diff --git a/pr/561/docs/help.html b/pr/561/docs/help.html index cb140c09e..cda0c7f93 100644 --- a/pr/561/docs/help.html +++ b/pr/561/docs/help.html @@ -1 +1 @@ -Help

All

Rustdoc help

Back
\ No newline at end of file +Help

All

Rustdoc help

Back
\ No newline at end of file diff --git a/pr/561/docs/noq/enum.ConnectionError.html b/pr/561/docs/noq/enum.ConnectionError.html index 8c2f73e3f..33a87ebdd 100644 --- a/pr/561/docs/noq/enum.ConnectionError.html +++ b/pr/561/docs/noq/enum.ConnectionError.html @@ -1,4 +1,4 @@ -ConnectionError in noq - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
+ConnectionError in noq - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
     VersionMismatch,
     TransportError(Error),
     ConnectionClosed(ConnectionClose),
@@ -20,8 +20,8 @@ and §

LocallyClosed

The local application closed the connection

§

CidsExhausted

The connection could not be created because not enough of the CID space is available

Try using longer connection IDs.

-

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Close> for ConnectionError

Source§

fn from(x: Close) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<CloseReason> for ConnectionError

Source§

fn from(value: CloseReason) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ReadError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ResetError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for SendDatagramError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for StoppedError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for WriteError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: Error) -> ConnectionError

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Close> for ConnectionError

Source§

fn from(x: Close) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<CloseReason> for ConnectionError

Source§

fn from(value: CloseReason) -> ConnectionError

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ReadError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for ResetError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for SendDatagramError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for StoppedError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<ConnectionError> for WriteError

Source§

fn from(source: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: Error) -> ConnectionError

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/561/docs/noq/struct.ConnectionStats.html b/pr/561/docs/noq/struct.ConnectionStats.html index cd16a9d7b..ff6799d85 100644 --- a/pr/561/docs/noq/struct.ConnectionStats.html +++ b/pr/561/docs/noq/struct.ConnectionStats.html @@ -1,16 +1,20 @@ -ConnectionStats in noq - Rust

ConnectionStats

Struct ConnectionStats 

Source
#[non_exhaustive]
pub struct ConnectionStats { +ConnectionStats in noq - Rust

ConnectionStats

Struct ConnectionStats 

Source
#[non_exhaustive]
pub struct ConnectionStats { pub udp_tx: UdpStats, pub udp_rx: UdpStats, pub frame_tx: FrameStats, pub frame_rx: FrameStats, + pub lost_packets: u64, + pub lost_bytes: u64, }
Expand description

Connection statistics.

The fields here are a sum of the respective fields in the PathStats for all the paths that exist as well as all paths that previously existed.

-

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§udp_tx: UdpStats

Statistics about UDP datagrams transmitted on a connection.

-
§udp_rx: UdpStats

Statistics about UDP datagrams received on a connection.

-
§frame_tx: FrameStats

Statistics about frames transmitted on a connection.

-
§frame_rx: FrameStats

Statistics about frames received on a connection.

-

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for ConnectionStats

Source§

fn clone(&self) -> ConnectionStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for ConnectionStats

Source§

fn default() -> ConnectionStats

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§udp_tx: UdpStats

Statistics about UDP datagrams transmitted on the connection.

+
§udp_rx: UdpStats

Statistics about UDP datagrams received on the connection.

+
§frame_tx: FrameStats

Statistics about frames transmitted on the connection.

+
§frame_rx: FrameStats

Statistics about frames received on the connection.

+
§lost_packets: u64

The number of packets lost on the connection.

+
§lost_bytes: u64

The number of bytes lost on the connection.

+

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for ConnectionStats

Source§

fn clone(&self) -> ConnectionStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for ConnectionStats

Source§

fn default() -> ConnectionStats

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/561/docs/noq/struct.PathStats.html b/pr/561/docs/noq/struct.PathStats.html index 0a167df85..56150f19e 100644 --- a/pr/561/docs/noq/struct.PathStats.html +++ b/pr/561/docs/noq/struct.PathStats.html @@ -20,15 +20,15 @@
§frame_rx: FrameStats

Statistics about frames received on this path.

§cwnd: u64

Current congestion window of the connection.

§congestion_events: u64

Congestion events on the connection.

-
§lost_packets: u64

The amount of packets lost on this path.

-
§lost_bytes: u64

The amount of bytes lost on this path.

+
§lost_packets: u64

The number of packets lost on this path.

+
§lost_bytes: u64

The number of bytes lost on this path.

§sent_plpmtud_probes: u64

The number of PLPMTUD probe packets sent on this path.

These are also counted by UdpStats::datagrams.

§lost_plpmtud_probes: u64

The number of PLPMTUD probe packets lost on this path.

These are not included in Self::lost_packets and Self::lost_bytes.

§black_holes_detected: u64

The number of times a black hole was detected in the path.

§current_mtu: u16

Largest UDP payload size the path currently supports.

-

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for PathStats

Source§

fn clone(&self) -> PathStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for PathStats

Source§

fn default() -> PathStats

Returns the “default value” for a type. Read more
Source§

impl PartialEq for PathStats

Source§

fn eq(&self, other: &PathStats) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for PathStats

Source§

fn clone(&self) -> PathStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for PathStats

Source§

fn default() -> PathStats

Returns the “default value” for a type. Read more
Source§

impl PartialEq for PathStats

Source§

fn eq(&self, other: &PathStats) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for PathStats

Source§

impl Eq for PathStats

Source§

impl StructuralPartialEq for PathStats

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/561/docs/noq/trait.NetworkChangeHint.html b/pr/561/docs/noq/trait.NetworkChangeHint.html index 61af9fcaf..4d04fd74a 100644 --- a/pr/561/docs/noq/trait.NetworkChangeHint.html +++ b/pr/561/docs/noq/trait.NetworkChangeHint.html @@ -1,4 +1,4 @@ -NetworkChangeHint in noq - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
+NetworkChangeHint in noq - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
     // Required method
     fn is_path_recoverable(
         &self,
@@ -6,7 +6,7 @@
         network_path: FourTuple,
     ) -> bool;
 }
Expand description

Hints when the caller identifies a network change.

-

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

+

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

After network changes, paths may not be recoverable. In this case, waiting for the path to become idle may take longer than what is desirable. If Self::is_path_recoverable returns false, a multipath-enabled, client-side connection will establish a new path to diff --git a/pr/561/docs/noq_proto/enum.ClosePathError.html b/pr/561/docs/noq_proto/enum.ClosePathError.html index c18f80803..e3d715929 100644 --- a/pr/561/docs/noq_proto/enum.ClosePathError.html +++ b/pr/561/docs/noq_proto/enum.ClosePathError.html @@ -1,4 +1,4 @@ -ClosePathError in noq_proto - Rust

ClosePathError

Enum ClosePathError 

Source
pub enum ClosePathError {
+ClosePathError in noq_proto - Rust

ClosePathError

Enum ClosePathError 

Source
pub enum ClosePathError {
     MultipathNotNegotiated,
     ClosedPath,
     LastOpenPath,
@@ -7,8 +7,8 @@
 
§

ClosedPath

The path is already closed or was never opened

§

LastOpenPath

Cannot close the last remaining open path via the local API.

Use Connection::close to end the connection instead.

-

Trait Implementations§

Source§

impl Clone for ClosePathError

Source§

fn clone(&self) -> ClosePathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClosePathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ClosePathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ClosePathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for ClosePathError

Source§

fn eq(&self, other: &ClosePathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for ClosePathError

Source§

impl StructuralPartialEq for ClosePathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for ClosePathError

Source§

fn clone(&self) -> ClosePathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClosePathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ClosePathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ClosePathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for ClosePathError

Source§

fn eq(&self, other: &ClosePathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Eq for ClosePathError

Source§

impl StructuralPartialEq for ClosePathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/561/docs/noq_proto/enum.ConnectionError.html b/pr/561/docs/noq_proto/enum.ConnectionError.html index 26e847b13..b615bedd7 100644 --- a/pr/561/docs/noq_proto/enum.ConnectionError.html +++ b/pr/561/docs/noq_proto/enum.ConnectionError.html @@ -1,4 +1,4 @@ -ConnectionError in noq_proto - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
+ConnectionError in noq_proto - Rust

ConnectionError

Enum ConnectionError 

Source
pub enum ConnectionError {
     VersionMismatch,
     TransportError(TransportError),
     ConnectionClosed(ConnectionClose),
@@ -20,8 +20,8 @@ and §

LocallyClosed

The local application closed the connection

§

CidsExhausted

The connection could not be created because not enough of the CID space is available

Try using longer connection IDs.

-

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<ConnectionError> for Error

Source§

fn from(x: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for ConnectionError

Source§

fn clone(&self) -> ConnectionError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ConnectionError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ConnectionError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<ConnectionError> for Error

Source§

fn from(x: ConnectionError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for ConnectionError

Source§

fn eq(&self, other: &ConnectionError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Eq for ConnectionError

Source§

impl StructuralPartialEq for ConnectionError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/561/docs/noq_proto/enum.Event.html b/pr/561/docs/noq_proto/enum.Event.html index cc7051927..ecd491b3a 100644 --- a/pr/561/docs/noq_proto/enum.Event.html +++ b/pr/561/docs/noq_proto/enum.Event.html @@ -1,4 +1,4 @@ -Event in noq_proto - Rust

Event

Enum Event 

Source
pub enum Event {
+Event in noq_proto - Rust

Event

Enum Event 

Source
pub enum Event {
     HandshakeDataReady,
     Connected,
     HandshakeConfirmed,
@@ -22,7 +22,7 @@
 
§

DatagramsUnblocked

One or more application datagrams have been sent after blocking

§

Path(PathEvent)

(Multi)Path events

§

NatTraversal(Event)

n0’s nat traversal events

-

Trait Implementations§

Source§

impl Debug for Event

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !Freeze for Event

§

impl !RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl !UnwindSafe for Event

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Debug for Event

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !Freeze for Event

§

impl !RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl !UnwindSafe for Event

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/pr/561/docs/noq_proto/enum.PathError.html b/pr/561/docs/noq_proto/enum.PathError.html index b7f69ef8b..5793e7409 100644 --- a/pr/561/docs/noq_proto/enum.PathError.html +++ b/pr/561/docs/noq_proto/enum.PathError.html @@ -1,4 +1,4 @@ -PathError in noq_proto - Rust

PathError

Enum PathError 

Source
pub enum PathError {
+PathError in noq_proto - Rust

PathError

Enum PathError 

Source
pub enum PathError {
     MultipathNotNegotiated,
     ServerSideNotAllowed,
     MaxPathIdReached,
@@ -12,8 +12,8 @@
 
§

RemoteCidsExhausted

No remote CIDs available to open a new path

§

ValidationFailed

Path could not be validated and will be abandoned

§

InvalidRemoteAddress(SocketAddr)

The remote address for the path is not supported by the endpoint

-

Trait Implementations§

Source§

impl Clone for PathError

Source§

fn clone(&self) -> PathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for PathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for PathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for PathError

Source§

fn eq(&self, other: &PathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PathError

Source§

impl Eq for PathError

Source§

impl StructuralPartialEq for PathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for PathError

Source§

fn clone(&self) -> PathError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for PathError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for PathError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for PathError

Source§

fn eq(&self, other: &PathError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl Copy for PathError

Source§

impl Eq for PathError

Source§

impl StructuralPartialEq for PathError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/561/docs/noq_proto/enum.PathEvent.html b/pr/561/docs/noq_proto/enum.PathEvent.html index bd6e495ab..a659eecf3 100644 --- a/pr/561/docs/noq_proto/enum.PathEvent.html +++ b/pr/561/docs/noq_proto/enum.PathEvent.html @@ -39,7 +39,7 @@ changes the status.

Fields

§id: PathId

Path over which the observed address was reported, PathId::ZERO when multipath is not negotiated

§addr: SocketAddr

The address observed by the remote over this path

-

Trait Implementations§

Source§

impl Clone for PathEvent

Source§

fn clone(&self) -> PathEvent

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for PathEvent

Source§

fn eq(&self, other: &PathEvent) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +

Trait Implementations§

Source§

impl Clone for PathEvent

Source§

fn clone(&self) -> PathEvent

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<PathEvent> for Event

Source§

fn from(source: PathEvent) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for PathEvent

Source§

fn eq(&self, other: &PathEvent) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for PathEvent

Source§

impl StructuralPartialEq for PathEvent

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/561/docs/noq_proto/struct.Connection.html b/pr/561/docs/noq_proto/struct.Connection.html index 7d59703fd..d3fe068a0 100644 --- a/pr/561/docs/noq_proto/struct.Connection.html +++ b/pr/561/docs/noq_proto/struct.Connection.html @@ -33,7 +33,7 @@ increasing time. Specifically, calling Instant may be interleaved in any order with a call to handle_event at that same instant; however events or timeouts with different instants must not be interleaved.

-

Implementations§

Source§

impl Connection

Source

pub fn poll_timeout(&mut self) -> Option<Instant>

Returns the next time at which handle_timeout should be called

+

Implementations§

Source§

impl Connection

Source

pub fn poll_timeout(&mut self) -> Option<Instant>

Returns the next time at which handle_timeout should be called

The value returned may change after:

  • the application performed some I/O on the connection
  • @@ -152,32 +152,34 @@ delivered. There may still be data from the peer that has not been received.

Source

pub fn force_key_update(&mut self)

Update traffic keys spontaneously

This can be useful for testing key updates, as they otherwise only happen infrequently.

Source

pub fn crypto_session(&self) -> &dyn Session

Get a session reference

-
Source

pub fn is_handshaking(&self) -> bool

Whether the connection is in the process of being established

-

If this returns false, the connection may be either established or closed, signaled by the -emission of a Connected or ConnectionLost message respectively.

-
Source

pub fn is_closed(&self) -> bool

Whether the connection is closed

+
Source

pub fn is_handshaking(&self) -> bool

Whether the connection is in the process of being established

+

If this returns false, the connection may be either established or closed, +signaled by the emission of a Connected or ConnectionLost message respectively.

+

For an established connection this essentially means the handshake is completed, +but not necessarily yet confirmed.

+
Source

pub fn is_closed(&self) -> bool

Whether the connection is closed

Closed connections cannot transport any further data. A connection becomes closed when either peer application intentionally closes it, or when either transport layer detects an error such as a time-out or certificate validation failure.

A ConnectionLost event is emitted with details when the connection becomes closed.

-
Source

pub fn is_drained(&self) -> bool

Whether there is no longer any need to keep the connection around

+
Source

pub fn is_drained(&self) -> bool

Whether there is no longer any need to keep the connection around

Closed connections become drained after a brief timeout to absorb any remaining in-flight packets from the peer. All drained connections have been closed.

-
Source

pub fn accepted_0rtt(&self) -> bool

For clients, if the peer accepted the 0-RTT data packets

+
Source

pub fn accepted_0rtt(&self) -> bool

For clients, if the peer accepted the 0-RTT data packets

The value is meaningless until after the handshake completes.

-
Source

pub fn has_0rtt(&self) -> bool

Whether 0-RTT is/was possible during the handshake

-
Source

pub fn has_pending_retransmits(&self) -> bool

Whether there are any pending retransmits

-
Source

pub fn side(&self) -> Side

Look up whether we’re the client or server of this Connection

-
Source

pub fn path_observed_address( +

Source

pub fn has_0rtt(&self) -> bool

Whether 0-RTT is/was possible during the handshake

+
Source

pub fn has_pending_retransmits(&self) -> bool

Whether there are any pending retransmits

+
Source

pub fn side(&self) -> Side

Look up whether we’re the client or server of this Connection

+
Source

pub fn path_observed_address( &self, path_id: PathId, ) -> Result<Option<SocketAddr>, ClosedPath>

Get the address observed by the remote over the given path

-
Source

pub fn rtt(&self, path_id: PathId) -> Option<Duration>

Current best estimate of this connection’s latency (round-trip-time)

-
Source

pub fn congestion_state(&self, path_id: PathId) -> Option<&dyn Controller>

Current state of this connection’s congestion controller, for debugging purposes

-
Source

pub fn set_max_concurrent_streams(&mut self, dir: Dir, count: VarInt)

Modify the number of remotely initiated streams that may be concurrently open

+
Source

pub fn rtt(&self, path_id: PathId) -> Option<Duration>

Current best estimate of this connection’s latency (round-trip-time)

+
Source

pub fn congestion_state(&self, path_id: PathId) -> Option<&dyn Controller>

Current state of this connection’s congestion controller, for debugging purposes

+
Source

pub fn set_max_concurrent_streams(&mut self, dir: Dir, count: VarInt)

Modify the number of remotely initiated streams that may be concurrently open

No streams may be opened by the peer unless fewer than count are already open. Large counts increase both minimum and worst-case memory consumption.

-
Source

pub fn set_max_concurrent_paths( +

Source

pub fn set_max_concurrent_paths( &mut self, now: Instant, count: NonZeroU32, @@ -188,16 +190,16 @@ actively reduce paths they must be closed using TransportConfig) this can not enable multipath and will fail.

-

Source

pub fn max_concurrent_streams(&self, dir: Dir) -> u64

Current number of remotely initiated streams that may be concurrently open

+
Source

pub fn max_concurrent_streams(&self, dir: Dir) -> u64

Current number of remotely initiated streams that may be concurrently open

If the target for this limit is reduced using set_max_concurrent_streams, it will not change immediately, even if fewer streams are open. Instead, it will decrement by one for each time a remotely initiated stream of matching directionality is closed.

-
Source

pub fn set_send_window(&mut self, send_window: u64)

Source

pub fn set_receive_window(&mut self, receive_window: VarInt)

Source

pub fn is_multipath_negotiated(&self) -> bool

Whether the Multipath for QUIC extension is enabled.

+
Source

pub fn set_send_window(&mut self, send_window: u64)

Source

pub fn set_receive_window(&mut self, receive_window: VarInt)

Source

pub fn is_multipath_negotiated(&self) -> bool

Whether the Multipath for QUIC extension is enabled.

Multipath is only enabled after the handshake is completed and if it was enabled by both peers.

-
Source

pub fn handle_network_change( +

Source

pub fn handle_network_change( &mut self, hint: Option<&dyn NetworkChangeHint>, now: Instant, @@ -212,26 +214,26 @@ paths as non recoverable when necessary accelerates connectivity re-establishmen allow it altogether.

The optional hint allows callers to indicate when paths are non-recoverable and should be migrated to new a PathId.

-

Source

pub fn current_mtu(&self) -> u16

Storage size required for the largest packet that can be transmitted on all currently +

Source

pub fn current_mtu(&self) -> u16

Storage size required for the largest packet that can be transmitted on all currently available paths

Buffers passed to Connection::poll_transmit should be at least this large.

When multipath is enabled, this value is the minimum MTU across all available paths.

-
Source

pub fn add_nat_traversal_address( +

Source

pub fn add_nat_traversal_address( &mut self, address: SocketAddr, ) -> Result<(), Error>

Add addresses the local endpoint considers are reachable for nat traversal.

-
Source

pub fn remove_nat_traversal_address( +

Source

pub fn remove_nat_traversal_address( &mut self, address: SocketAddr, ) -> Result<(), Error>

Removes an address the endpoing no longer considers reachable for nat traversal

Addresses not present in the set will be silently ignored.

-
Source

pub fn get_local_nat_traversal_addresses( +

Source

pub fn get_local_nat_traversal_addresses( &self, ) -> Result<Vec<SocketAddr>, Error>

Get the current local nat traversal addresses

-
Source

pub fn get_remote_nat_traversal_addresses( +

Source

pub fn get_remote_nat_traversal_addresses( &self, ) -> Result<Vec<SocketAddr>, Error>

Get the currently advertised nat traversal addresses by the server

-
Source

pub fn initiate_nat_traversal_round( +

Source

pub fn initiate_nat_traversal_round( &mut self, now: Instant, ) -> Result<Vec<SocketAddr>, Error>

Initiates a new nat traversal round

@@ -241,7 +243,7 @@ initiated, the previous one is cancelled, and paths that have not been opened ar

Returns the server addresses that are now being probed. If addresses fail due to spurious errors, these might succeed later and not be returned in this set.

-

Trait Implementations§

Source§

impl Debug for Connection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Debug for Connection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/pr/561/docs/noq_proto/struct.ConnectionStats.html b/pr/561/docs/noq_proto/struct.ConnectionStats.html index 8e521c858..3ec075720 100644 --- a/pr/561/docs/noq_proto/struct.ConnectionStats.html +++ b/pr/561/docs/noq_proto/struct.ConnectionStats.html @@ -1,16 +1,20 @@ -ConnectionStats in noq_proto - Rust

ConnectionStats

Struct ConnectionStats 

Source
#[non_exhaustive]
pub struct ConnectionStats { +ConnectionStats in noq_proto - Rust

ConnectionStats

Struct ConnectionStats 

Source
#[non_exhaustive]
pub struct ConnectionStats { pub udp_tx: UdpStats, pub udp_rx: UdpStats, pub frame_tx: FrameStats, pub frame_rx: FrameStats, + pub lost_packets: u64, + pub lost_bytes: u64, }
Expand description

Connection statistics.

The fields here are a sum of the respective fields in the PathStats for all the paths that exist as well as all paths that previously existed.

-

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§udp_tx: UdpStats

Statistics about UDP datagrams transmitted on a connection.

-
§udp_rx: UdpStats

Statistics about UDP datagrams received on a connection.

-
§frame_tx: FrameStats

Statistics about frames transmitted on a connection.

-
§frame_rx: FrameStats

Statistics about frames received on a connection.

-

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> Self::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for ConnectionStats

Source§

fn clone(&self) -> ConnectionStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ConnectionStats

Source§

fn default() -> ConnectionStats

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§udp_tx: UdpStats

Statistics about UDP datagrams transmitted on the connection.

+
§udp_rx: UdpStats

Statistics about UDP datagrams received on the connection.

+
§frame_tx: FrameStats

Statistics about frames transmitted on the connection.

+
§frame_rx: FrameStats

Statistics about frames received on the connection.

+
§lost_packets: u64

The number of packets lost on the connection.

+
§lost_bytes: u64

The number of bytes lost on the connection.

+

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> Self::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for ConnectionStats

Source§

fn clone(&self) -> ConnectionStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ConnectionStats

Source§

fn default() -> ConnectionStats

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/561/docs/noq_proto/struct.MultipathNotNegotiated.html b/pr/561/docs/noq_proto/struct.MultipathNotNegotiated.html index 87eef45d2..ed2794b71 100644 --- a/pr/561/docs/noq_proto/struct.MultipathNotNegotiated.html +++ b/pr/561/docs/noq_proto/struct.MultipathNotNegotiated.html @@ -1,5 +1,5 @@ -MultipathNotNegotiated in noq_proto - Rust

MultipathNotNegotiated

Struct MultipathNotNegotiated 

Source
pub struct MultipathNotNegotiated { /* private fields */ }
Expand description

Error when the multipath extension was not negotiated, but attempted to be used.

-

Trait Implementations§

Source§

impl Clone for MultipathNotNegotiated

Source§

fn clone(&self) -> MultipathNotNegotiated

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MultipathNotNegotiated

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for MultipathNotNegotiated

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for MultipathNotNegotiated

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl Copy for MultipathNotNegotiated

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +MultipathNotNegotiated in noq_proto - Rust

MultipathNotNegotiated

Struct MultipathNotNegotiated 

Source
pub struct MultipathNotNegotiated { /* private fields */ }
Expand description

Error when the multipath extension was not negotiated, but attempted to be used.

+

Trait Implementations§

Source§

impl Clone for MultipathNotNegotiated

Source§

fn clone(&self) -> MultipathNotNegotiated

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MultipathNotNegotiated

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for MultipathNotNegotiated

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for MultipathNotNegotiated

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl Copy for MultipathNotNegotiated

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where diff --git a/pr/561/docs/noq_proto/struct.PathStats.html b/pr/561/docs/noq_proto/struct.PathStats.html index 218e8cddc..0c29f0b2a 100644 --- a/pr/561/docs/noq_proto/struct.PathStats.html +++ b/pr/561/docs/noq_proto/struct.PathStats.html @@ -20,15 +20,15 @@
§frame_rx: FrameStats

Statistics about frames received on this path.

§cwnd: u64

Current congestion window of the connection.

§congestion_events: u64

Congestion events on the connection.

-
§lost_packets: u64

The amount of packets lost on this path.

-
§lost_bytes: u64

The amount of bytes lost on this path.

+
§lost_packets: u64

The number of packets lost on this path.

+
§lost_bytes: u64

The number of bytes lost on this path.

§sent_plpmtud_probes: u64

The number of PLPMTUD probe packets sent on this path.

These are also counted by UdpStats::datagrams.

§lost_plpmtud_probes: u64

The number of PLPMTUD probe packets lost on this path.

These are not included in Self::lost_packets and Self::lost_bytes.

§black_holes_detected: u64

The number of times a black hole was detected in the path.

§current_mtu: u16

Largest UDP payload size the path currently supports.

-

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> Self::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for PathStats

Source§

fn clone(&self) -> PathStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for PathStats

Source§

fn default() -> PathStats

Returns the “default value” for a type. Read more
Source§

impl PartialEq for PathStats

Source§

fn eq(&self, other: &PathStats) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +

Trait Implementations§

Source§

impl Add<PathStats> for ConnectionStats

Source§

type Output = ConnectionStats

The resulting type after applying the + operator.
Source§

fn add(self, rhs: PathStats) -> Self::Output

Performs the + operation. Read more
Source§

impl AddAssign<PathStats> for ConnectionStats

Source§

fn add_assign(&mut self, rhs: PathStats)

Performs the += operation. Read more
Source§

impl Clone for PathStats

Source§

fn clone(&self) -> PathStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PathStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for PathStats

Source§

fn default() -> PathStats

Returns the “default value” for a type. Read more
Source§

impl PartialEq for PathStats

Source§

fn eq(&self, other: &PathStats) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for PathStats

Source§

impl Eq for PathStats

Source§

impl StructuralPartialEq for PathStats

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/561/docs/noq_proto/struct.TransportError.html b/pr/561/docs/noq_proto/struct.TransportError.html index a4f87476f..0f2d94005 100644 --- a/pr/561/docs/noq_proto/struct.TransportError.html +++ b/pr/561/docs/noq_proto/struct.TransportError.html @@ -11,7 +11,7 @@
§reason: String

Human-readable explanation of the reason

§crypto: Option<Arc<dyn Error + Send + Sync>>

An underlying crypto (e.g. TLS) layer error

Implementations§

Source§

impl Error

Source

pub fn new(code: Code, reason: String) -> Self

Construct an error with a code and a reason

-

Trait Implementations§

Source§

impl Clone for Error

Source§

fn clone(&self) -> Error

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for Error

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Error> for ConnectionClose

Source§

fn from(x: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for TransportError

Source§

fn from(e: Error) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for Error

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +

Trait Implementations§

Source§

impl Clone for Error

Source§

fn clone(&self) -> Error

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for Error

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Error> for ConnectionClose

Source§

fn from(x: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for ConnectionError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for TransportError

Source§

fn from(e: Error) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for Error

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Error

Auto Trait Implementations§

§

impl Freeze for Error

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where diff --git a/pr/561/docs/noq_proto/trait.NetworkChangeHint.html b/pr/561/docs/noq_proto/trait.NetworkChangeHint.html index eed4175d2..05d31583b 100644 --- a/pr/561/docs/noq_proto/trait.NetworkChangeHint.html +++ b/pr/561/docs/noq_proto/trait.NetworkChangeHint.html @@ -1,4 +1,4 @@ -NetworkChangeHint in noq_proto - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
+NetworkChangeHint in noq_proto - Rust

NetworkChangeHint

Trait NetworkChangeHint 

Source
pub trait NetworkChangeHint: Debug + 'static {
     // Required method
     fn is_path_recoverable(
         &self,
@@ -6,7 +6,7 @@
         network_path: FourTuple,
     ) -> bool;
 }
Expand description

Hints when the caller identifies a network change.

-

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

+

Required Methods§

Source

fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

Inform the connection if a path may recover after a network change.

After network changes, paths may not be recoverable. In this case, waiting for the path to become idle may take longer than what is desirable. If Self::is_path_recoverable returns false, a multipath-enabled, client-side connection will establish a new path to diff --git a/pr/561/docs/search.index/000adf3fe488.js b/pr/561/docs/search.index/000adf3fe488.js new file mode 100644 index 000000000..4708f493f --- /dev/null +++ b/pr/561/docs/search.index/000adf3fe488.js @@ -0,0 +1 @@ +rn_("AQIBsIATVQABdAHjCAAAAYECoBAAABK0oHAAABL7YWPzAQFy8ioRAAAYAPOAAmVpI4ACsAALywABZHLzAAFl9IgAAAATDAwHAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0033f3568d59.js b/pr/561/docs/search.index/0033f3568d59.js deleted file mode 100644 index bb8d36b85..000000000 --- a/pr/561/docs/search.index/0033f3568d59.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQgBoIAAABQSZgEAEwAAE4ACoOAAABPaYnABAwGwABOWAExz9m0PAAABAL8AKQABAOkCAYACsEASKwABoBAAABCTcHIBgQOgAAAAEQWwAA9YAR6gEAAAD1Blc3XzgANhb3IBAgD1WRAAAAEAAQBLAgEAAQQAOzAAAAEAAAkAAQDKEAkAAYECoJAAABNZsFASEwABYnejgISwUBN1AAGwkBKeAAFAIANXAwAAhqBwAAATUKBAAAATvzBBDDowAAABAAAAAAA7ABAAAACkBKUEYwVkBWUFZgVnBWgFaQVqBWsFbAVRB/UI9gj7COAL4QsDDAQMBQyQDJEMngw2DkMPRA9FD1gPdw94D70PNhBEEEUQYxBkEHYQmxCcEAkRVhFfEWARZBFcEpQSlRJEE0UTSxN1E3YTlBOVE6wTDxQQFBoUGxQ=") \ No newline at end of file diff --git a/pr/561/docs/search.index/008877e88ece.js b/pr/561/docs/search.index/008877e88ece.js new file mode 100644 index 000000000..d44488314 --- /dev/null +++ b/pr/561/docs/search.index/008877e88ece.js @@ -0,0 +1 @@ +rn_("AQYAOzAAAAEAAAUAAQDNEgUAg4YEsFASlgABsHAS/AABoNAAABPTYm5vdhOAArAQEmkAAXByAQABoDAAABFodAEbEwAA8wIBc/IqEAAA9QITgAKgYAAAEBtldQECAPa1DAAAAQAbAwEAJwEBAAGAArAAElQAAYAONjLQAWVzAQEA8ykHAADICwEAY4ADsIATbQABYm5084ADYW9yARQA9P8TAAABAAEAAQABAAA7MAAAAQAABgACAPoSAABgEwUAI4gCsEAT0QABZXMBBAGwMBLLAAFj8wYRAAABAAEAAQUAOzAAAAEAAAgAAwB1EQIAchIEAJITAADzAgNjZXDzeQwAAAEAAQBjgAOgYAAAD3tlb3UBAAGwYBN5AAFlAbATAADzAgFz9vIIAAABAAEA0Qc/ABUBAQgA8zMSAAABAAEAQ4ADoBAAABL+oOAAABOEZG9zAQIBoFAAABEFcgGlEAAAAYACoEAAABAnoHAAABO+YWUBAAA7MAAAAQAACwACAMoGBQBNEgUA84ACdHYBAQD0wgcAAAEAAQABAPMAAm5y9ucIAABXAMkGAQCyAAEA8wCHMJEM96kEAADaC+QBAQCFAAEA8AA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/008abdeaeb1f.js b/pr/561/docs/search.index/008abdeaeb1f.js new file mode 100644 index 000000000..5d3b93056 --- /dev/null +++ b/pr/561/docs/search.index/008abdeaeb1f.js @@ -0,0 +1 @@ +rn_("AQQA9rUMAAABABsDAQAnAQEAAQoA80YSAAABAKgAAQEA9+4IAAABABQHAQBtAAEADgEjgAKwYBNZAAFpbwECAPR2DAAAAQAPBgEAAQUA9G8TAAABAEkAAQD3BAAAh6AgAAAMeLCQEXMAAQScAzowAAABAAAAAAAIABAAAABvBd8I4AgWDBcMgRCCEHcSeBI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/00b3b4632f27.js b/pr/561/docs/search.index/00b3b4632f27.js new file mode 100644 index 000000000..cefbf9c8c --- /dev/null +++ b/pr/561/docs/search.index/00b3b4632f27.js @@ -0,0 +1 @@ +rn_("AQMAOzAAAAEAAIcAAgB3EAAAgRGGAAEAAbBwEzYAAWXyaQ8AAAEAIwACoEAAABONZXP01A8AAAEAKAQBADOAA6BgAAARKmRpbw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/01625088bebd.js b/pr/561/docs/search.index/01625088bebd.js new file mode 100644 index 000000000..5f58b2b49 --- /dev/null +++ b/pr/561/docs/search.index/01625088bebd.js @@ -0,0 +1 @@ +rn_("AQIAOzAAAAEAAAYAAgCTBQUABREAAAEEAbAAEpgAAXM7MAAAAQAACwACABITBwD/EwMARwAAAYaggAAAEvOxABQMAAGwQBJUAAGwgBQaAAGwUBKaAAEVABb0Mg4AAAEAAQABAAEFAPOGDwAAAQABAGOAA7BAEA4AAW1ubwGBArAADJAAAbAQEAwAAXN18wACYWk6MAAAAQAAAAAABwAQAAAAOQdoD0QQRRAAEwETAhMDEwGAA7AAE1AAAbAAE1IAAbBwE8QAATQ2YQEEAPQTFAAAAQAKAAEAI4ECoEAAABDebXABAgA7MAAAAQAADgAEADwHAQCzDAEAzhAJAAwRAAABAQA7MAAAAQAACAADAEgSAAC5EgAAIBQGAAEBADswAAABAAAKAAMA8hACACoTAwAIFAMAI4ACoDAAAA/fZGfXAwAAxqCAAAASI0BGgAg7MAAAAQAAGAAJAH0PAQCVEAEAyhABANoQAwBJEQYALhMCAHwTAADUEwEABBQBAAEDAPbnCAAAVwDJBgEAsgABABOAArBwE6UAAW9yAQQBsLAT7AABbPSxDAAAAQAdAwEAAQIAOzAAAAEAAAwAAwDHCAAAPhMFAPMTBQABAQDzxQ8AAAEATAIjgAKgsAAAE6RnegECADowAAABAAAAAAAJABAAAABXEVgRaxJsElUTVhOpE6oTGhQbFPMAAW/yQQkAAAEAAQUA9G8PAAABAOoAAQCDAISgQAAADKawcBLeAAGwIAwrAAEQBQI7MAAAAQAACQADAJsEAwBaBQIARhECAAGAAqAgAAAQpLAgE6UAAWR0AYQCsLAT7wABsAATSAABYXPTgISgsAAAE9hAKAQBgAKgMAAAEXGwYA+EAAFockf/AQDNoCAAAAV5oCAAAAV6sHATPAABA2c0BzswAAABAAA6ABkAfgQAALUEBQA3CQAAfgwAAD4PAwAwEAMA7RAAAEgSAABaEgUAuRIBANwSAADkEgAA9BIAAP8SAAAQEwEAGhMAABwTAgAgEwEAdRMAAHsTAACHEwEAoRMBALMTBQDHEwAAIBQGAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/016287c739af.js b/pr/561/docs/search.index/016287c739af.js deleted file mode 100644 index e38ce7f6e..000000000 --- a/pr/561/docs/search.index/016287c739af.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQACoDAAABCXoJAAABL7MGj1dxEAAIwBAQABAAEAE4ACoDAAAA9VZHIjAISwEAjGAySwIAu7AP+gMAAAD3oSABj1dgUAAC4AAQABAAEAAQIA9A8UAAABAAoAAQABAgDz9A8AAAEAAQDzgAJpcgEBArBAEN0AAaBQAAAS4WVz9DEOAADCAgEAfgIBCwD2ChMAAAEAowBUABYAAQDzgAJsdNOAhKCQAAASuQFEBA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/01818b9a5dfd.js b/pr/561/docs/search.index/01818b9a5dfd.js deleted file mode 100644 index 7d2cf82a1..000000000 --- a/pr/561/docs/search.index/01818b9a5dfd.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9DkSAAABAKQAAQABCAD08xIAAAEAhQABADMBA7BAEsIAAWFiZTowAAABAAAAAAAJABAAAAAEBwUHnwygDFAPvg8KEAsQEhLhEgEAADswAAABAAAfAA4ApAQBAGMFCQD1CAEA4AsBAJAMAQA2DgAAQw8CAFgPAAB3DwEAYxABAHYQAAAJEQAAXxEBAGQRAAABgQKwABD6AAGwABD8AAE0NiOAArCAE+sAAW9wAQABsEASvgABZfMFEQAASwEBALcBAICFoGAAABChEAEL") \ No newline at end of file diff --git a/pr/561/docs/search.index/01dabba3dd0f.js b/pr/561/docs/search.index/01dabba3dd0f.js deleted file mode 100644 index c604ac4dd..000000000 --- a/pr/561/docs/search.index/01dabba3dd0f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACoGAAABNyoKAAABNkYWkBCwD0AxMAAAEAAQABAAEEAPQpEAAAAQABAAEAI4ACsEAQgQABbHLzAANjZHMBdxAAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0258058d4a15.js b/pr/561/docs/search.index/0258058d4a15.js deleted file mode 100644 index 3098d5aaf..000000000 --- a/pr/561/docs/search.index/0258058d4a15.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA9DkHAAAtCNwAAQABBQD0pBIAAAEAkQABAPMCAWP12w8AAAEAvAABAAEAYwAEoDAAAAvpoHAAABFWZW5zdvP5DwAAlQATAg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/029bf8043ee9.js b/pr/561/docs/search.index/029bf8043ee9.js new file mode 100644 index 000000000..ce402d006 --- /dev/null +++ b/pr/561/docs/search.index/029bf8043ee9.js @@ -0,0 +1 @@ +rn_("AQEBoGAAABP6c/JUEQAAAQABCAD1qxMAAAEAAQABAAEAowCEsCAJPwABoIAAABJgMEAIOzAAAAEAAAUAAgDkAQAAHBAEAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/02ee31440dda.js b/pr/561/docs/search.index/02ee31440dda.js new file mode 100644 index 000000000..4702e1fb5 --- /dev/null +++ b/pr/561/docs/search.index/02ee31440dda.js @@ -0,0 +1 @@ +rn_("AQQBoEAAABEDZQHCDwAAAQgA9D4RAAABAAEAAQABAwGgQAAAEQJlAVEPAAABAgDz4gsAAAEAAQAjAAKwIAvTAAFrcvbGBgAAAQC9CecAAQAkAvOAAnJ4AQMBsIATxAABdjswAAABAAALAAMAlRABAEkRBgAuEwIAI4ACsGAQCwC9YXIBAwGgAAAAD8Fz8k8PAAABACOAAqCwAAATVGVoAQMBoEAAABCUZfLkCAAAAQDXCwAAirAgBzgJi7CwEqYAAaCAAAARQqAAAAASs58ITDowAAABAAAAAAAKABAAAAD7AVwEXQReBL4LvwsjDCQMJQy0EsoS") \ No newline at end of file diff --git a/pr/561/docs/search.index/03099968b016.js b/pr/561/docs/search.index/03099968b016.js deleted file mode 100644 index 6b3fa5854..000000000 --- a/pr/561/docs/search.index/03099968b016.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYkCsCAT0gABoDAAABPcaXATAAOgIAAAEpiggAAAEqtlaXX1yQsAADQAAQABAAEAAYYCsJAT9wABoAAAABIoYmQBgAKwMBKMAAGgMAAAEHRydtcAAACFoDAAAA/xoDAAABLiEAETOjAAAAEAAAAAAAkAEAAAAMoIywjMCPwI/QgJEA4QxBDFEGkS") \ No newline at end of file diff --git a/pr/561/docs/search.index/035f6767badf.js b/pr/561/docs/search.index/035f6767badf.js new file mode 100644 index 000000000..e0d3c29a7 --- /dev/null +++ b/pr/561/docs/search.index/035f6767badf.js @@ -0,0 +1 @@ +rn_("AQIBoQAAABPlZPIyBwAABgIBBgGgMAAAEWh0ARsTAAABAwGwUBJpAAFl9OIIAAA4AwEA5QMBAQD0iwUAAAEAAQABAAEBAaEAAAAT2WTyigUAADwClwcAAIewoBJnAAGg4AAAE7AegArzQgQAAAEAAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/036f261a9e1b.js b/pr/561/docs/search.index/036f261a9e1b.js new file mode 100644 index 000000000..f0f2d8112 --- /dev/null +++ b/pr/561/docs/search.index/036f261a9e1b.js @@ -0,0 +1 @@ +rn_("AQYA9JUQAAABALgAAQATgQOgAAAAEN6xIBQEAAFhZG4BFAD1IhQAAAEAAQABAAEAAQUBsIATxAABdjswAAABAAAHAAIASREEAC4TAgAjgAKwcBFvAAFiZFcAAAGGoMAAABL5oKAAABMboJAAABLlsFAQDAABBeAC9ekGAAABAAEAnghwBAEGAPNGEgAAAQCoAAEAAaBgAAAPdHIBcAQAANcBAIDFoDAAAAvGAACKCg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/03bc9a92028b.js b/pr/561/docs/search.index/03bc9a92028b.js new file mode 100644 index 000000000..aed4365ab --- /dev/null +++ b/pr/561/docs/search.index/03bc9a92028b.js @@ -0,0 +1 @@ +rn_("AQAEoAAAABAbsCAQzAABoFAAABFxoEAAABOkZGxzdjswAAABAAATAAYAhgUAAOULAACSDAAAkQ8NAPAQAACfEwEAAQIA9FARAAABAAEAAQAThAKwIBFUAAFhc/OAAmFl") \ No newline at end of file diff --git a/pr/561/docs/search.index/03d8571d8861.js b/pr/561/docs/search.index/03d8571d8861.js deleted file mode 100644 index 8c8df5e4f..000000000 --- a/pr/561/docs/search.index/03d8571d8861.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBsEAT3QABdDswAAABAAANAAYAahIDANQSAQBBEwEAWBMBANITAQD3EwEAE4ACsDASnQE/aXABBQDzGBMAAAEAAQATgAKgMAAAE3FleVMBA7BwE34AAWJlcwHFDwAAE4ADsDAT6wABsCAG0QABZWxz") \ No newline at end of file diff --git a/pr/561/docs/search.index/04067d1944a2.js b/pr/561/docs/search.index/04067d1944a2.js deleted file mode 100644 index e4352dbc5..000000000 --- a/pr/561/docs/search.index/04067d1944a2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOjAAAAEAAAAAAAoAEAAAAGsPbA9UEFUQ3xBpEWoRfhJ/EggUCRTzAQF58nMTAAABACMAA6BAAAAQ/qBQAAATv2Vvc/JPDwAAwAI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0435c5f11e89.js b/pr/561/docs/search.index/0435c5f11e89.js deleted file mode 100644 index 49cddb36f..000000000 --- a/pr/561/docs/search.index/0435c5f11e89.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsHARUwABsCAPbwDpaHkBBQD0sQwAAAEAGwMBAAEAAPQTDAAAAQABAGoAAQIAOjAAAAEAAAAAAAkAEAAAAGQPZQ9TEA4RXRJeElcT2RMKFAsUAQMA8+oIAAABAAEA1wMAAIagQAAAEW4YQAc6MAAAAQAAAAAAFwAQAAAAOgc7B8kH9wgrCSwJsAxRD1IPcg8YEB8QIBAhECIQXRBeEJQQlRAEElUTVhOBE4IT") \ No newline at end of file diff --git a/pr/561/docs/search.index/04367367ed95.js b/pr/561/docs/search.index/04367367ed95.js new file mode 100644 index 000000000..dc10d1b9b --- /dev/null +++ b/pr/561/docs/search.index/04367367ed95.js @@ -0,0 +1 @@ +rn_("AQAA9p8QAAABAHMDAQAKAAEAAQAAOzAAAAEAAAYAAgD6EgAAYBMFACOIArBAE9EAAWVzAQ0BsEATywABZfWTEwAAAQABAAEAAQABBQA7MAAAAQAACAADAHURAgByEgQAkhMAANcBAACFLHeiHBt+FIQC83kMAAABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/04ab6183db19.js b/pr/561/docs/search.index/04ab6183db19.js new file mode 100644 index 000000000..43d0857c8 --- /dev/null +++ b/pr/561/docs/search.index/04ab6183db19.js @@ -0,0 +1 @@ +rn_("AQYAOzAAAAEAAAkAAQDOEAkAAQIAOzAAAAEAABMAAQCrDxMAE4GEoFAAABCPoBAAAAvcoCAAAAybHEAAE4ACsFAS8QABYW4zgAOwMA9TAAFpc3Q=") \ No newline at end of file diff --git a/pr/561/docs/search.index/04cd208f0148.js b/pr/561/docs/search.index/04cd208f0148.js deleted file mode 100644 index 3b98ad075..000000000 --- a/pr/561/docs/search.index/04cd208f0148.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMA8y8SAAABAAEAI4ECsSAUFgABY2sBBAGgQAAAEW5l87AMAADkAwEAAQAA9W8QAAABAAEAAQCDAnOAhKAwAAATnwgwAQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0530b4c13347.js b/pr/561/docs/search.index/0530b4c13347.js deleted file mode 100644 index b7fecce4d..000000000 --- a/pr/561/docs/search.index/0530b4c13347.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBoEAAABOfZfLJEwAAAQABAAD0ehIAAAEAAQABAPMEAWT0IBIAAAEAAQABAKcAAAKFsKATtwABsEASeAABsHATZQABFYgAAY0TAAABAAGwgBOhAAFw8p0TAAABAEMAA6AgAAAQ3KBAAAASJGRlc/N+DwAAMwMBAPOAAmVp") \ No newline at end of file diff --git a/pr/561/docs/search.index/058523a6e4f8.js b/pr/561/docs/search.index/058523a6e4f8.js deleted file mode 100644 index 1e553e4bc..000000000 --- a/pr/561/docs/search.index/058523a6e4f8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQsA9NUTAAAMAB4ADwABCgA6MAAAAQAAAAAABwAQAAAAuhK7ElMTVBOKE4sT1hPXE/OBAm90EwCEsCASrgBZsDAQxgABoFAAABCtEDACOzAAAAEAAAgABAB9AAEAqAADACoHAQA9CQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/0589571d15d3.js b/pr/561/docs/search.index/0589571d15d3.js new file mode 100644 index 000000000..445e3dbe1 --- /dev/null +++ b/pr/561/docs/search.index/0589571d15d3.js @@ -0,0 +1 @@ +rn_("AQUAOzAAAAEAAAYAAQDmDwYAAQMA9IMMAAABAAEAAQBjAAOgkAAAEuRocHM6MAAAAQAAAAAADgAQAAAAggWXBuEIDAwZDIUQhhApEioSfhJ/EoASgRKsEq0S") \ No newline at end of file diff --git a/pr/561/docs/search.index/0634a96c2644.js b/pr/561/docs/search.index/0634a96c2644.js new file mode 100644 index 000000000..3ab3ed8f8 --- /dev/null +++ b/pr/561/docs/search.index/0634a96c2644.js @@ -0,0 +1 @@ +rn_("AQoBoIAAABQWZgEEEwAAAQgA9asTAAABAAEAAQABAPMDAWb1HBAAAAEAAQABAAEA84MCYXMBAgKgIAAAEVagMAAAEhtiaAFVDwAAI4ACoIAAABK5YXDzAAJobQGGBAAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/0697183800b7.js b/pr/561/docs/search.index/0697183800b7.js deleted file mode 100644 index 03a11cb16..000000000 --- a/pr/561/docs/search.index/0697183800b7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYQCoCAAABCioDAAABEJaXQBAQA7MAAAAQAAhwACAEUHAABDCYYA8wACZWz1lwQAALICdwlBAgEAAQIAOzAAAAEAAOcAAgDFCwAAwwzmAMcAAACFsLASrAABoBAAABMwsDAMwQABFDACOzAAAAEAABMBCwDSAQYAfAUAAKgF5gAUBwcAyA8CABgRDQA/EQIAExIBAJYSAQDnEgEAexMCAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/06c25d8359bd.js b/pr/561/docs/search.index/06c25d8359bd.js deleted file mode 100644 index df1605b7a..000000000 --- a/pr/561/docs/search.index/06c25d8359bd.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAAYAAgCTBQUAAREAAAEEAbAAEpQAAXM7MAAAAQAACwACAA4TBwD7EwMARwAAAYaggAAAEu+xABQIAAGwQBJQAAGwgBQWAAGwUBKWAAEVABb0Mg4AAAEAAQABAAEFAPOEDwAAAQABAGOAA7BAEAwAAW1ubwGBArAADJAAAbAQEAoAAXN18wACYWk6MAAAAQAAAAAABwAQAAAAOQdmD0IQQxD8Ev0S/hL/EgGAA7AAE0wAAbAAE04AAbBwE8AAATQ2YQEEAPQPFAAAAQAKAAEAI4ECoEAAABDabXABAgA7MAAAAQAADgAEADwHAQCzDAEAyhAJAAgRAAABAQA7MAAAAQAACAADAEQSAAC1EgAAHBQGAAEBADswAAABAAAKAAMA7hACACYTAwAEFAMAI4ACoDAAAA/dZGfXAwAAxqCAAAASH0BGgAg7MAAAAQAAGAAJAHsPAQCREAEAxhABANYQAwBFEQYAKhMCAHgTAADQEwEAABQBAAEDAPbnCAAAVwDHBgEAsAABABOAArBwE6EAAW9yAQQBsLAT6AABbPSxDAAAAQAbAwEAAQIAOzAAAAEAAAwAAwDHCAAAOhMFAO8TBQABAQDzww8AAAEASgIjgAKgsAAAE6BnegECADowAAABAAAAAAAJABAAAABTEVQRZxJoElETUhOlE6YTFhQXFPMAAW/yQQkAAAEAAQUA9G0PAAABAOgAAQCDAISgQAAADKawcBLaAAGwIAwrAAEQBQI7MAAAAQAACQADAJsEAwBaBQIAQhECAAGAAqAgAAAQoLAgE6EAAWR0AYQCsLAT6wABsAATRAABYXPTgISgsAAAE9RAKAQBgAKgMAAAEW2wYA+CAAFockf/AQDNoCAAAAV5oCAAAAV6sHATOAABA2c0BzswAAABAAA4ABkAfgQAALUEBQA3CQAAfgwAAD4PAQAuEAMA6RAAAEQSAABWEgUAtRIBANgSAADgEgAA8BIAAPsSAAAMEwEAFhMAABgTAgAcEwEAcRMAAHcTAACDEwEAnRMBAK8TBQDDEwAAHBQGAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/06c6b77500fe.js b/pr/561/docs/search.index/06c6b77500fe.js deleted file mode 100644 index 416fb8a5a..000000000 --- a/pr/561/docs/search.index/06c6b77500fe.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBoKAAABLYZPLIBgAAAQABgQKgMAAAE9SgUAAAE2RjcwEEA7AgEMgAAaBQAAARbaBAAAAToGxzdvKbEwAAAQDzAANhZW87MAAAAQAACAADAGsEAQC8CwAAuwwFAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/06d81f6e89b0.js b/pr/561/docs/search.index/06d81f6e89b0.js new file mode 100644 index 000000000..c7e84dfca --- /dev/null +++ b/pr/561/docs/search.index/06d81f6e89b0.js @@ -0,0 +1 @@ +rn_("AQkA8+MTAAABADUAAYADoEAAABLKsCAThQABoCAAAA9eaGl5AQkBoIAAABQWZgEEEwAAAQMBsAATmgBMc/IvEAAAFQNDgAOwIA9aASCwUBIvAAFhb3IBAgD1XRAAAAEAAQBLAgEA8wADaXR1OjAAAAEAAAAAAA8AEAAAAFEH+wieDL8POBBaEWASmBKZEkgTSRNPE3kTehOYE5kTAQYA9IISAAABAIkBAQATAgKwYBKEAAFmbfKMDAAAAQAjggKwQBKwAAFlbAGAAqAwAAATxrCwEyAAAWFsAQYA82gPAADcAAEAAQUA9G8TAAABAEkAAQDzAgFj8ncSAAABAAECAaAwAAAP/mEBCQwAAAGAArBQEKoAAbAgDzgAAWNu84ACbnQBBQA7MAAAAQAADgACAJIMAACRDw0AAQIAOzAAAAEAAAcAAQAiCQcA5wUAAAmgMAAADAigsAAAE5iggAAAESqw0BOnAAEwYWZpa21ydXY7MAAAAQAAVgIFAO8BAABUA+YASAcAAMMK5gCqDYYAAQwBoKAAABQnd/IXFAAAAQABAQDzgQ8AAAEAAQDzgAJ0dQEDAPMzEgAAAQABAAEBAPW+EAAAAQABAAEAAQABAQGwMA9xAOt09joHAAABAI4AqwemAO4BY4ADsJATcQABYW10AQMBoEAAABPKZfLqEwAAAQATgAKwYBQaAAFlcgEDAaAAAAATT3MBeRAAAAECADowAAABAAAAAAAKABAAAAAgCSEJqA/eEt8SDhMPE7ITBhQcFB0UgwAEoIAAABINsHAQ7gABsCAQjgDqZm5ydgHIBwAAAYECoAAAAAj7oDAAAA9ec3THAQCAxrAAE6UAAbCQEgsAAaAQAAAHIAASiCgBAgA7MAAAAQAADQAGAOAPBQDrEAEAQhIBAGsTAQC9EwAA3BMAABOCArDwFBoAAWZnAYACsIAT8QABoGAAABQVZHMTgAKwwBM2AAFpbwEIAPWrEwAAAQABAAEAAQDzAgFm9RwQAAABAAEAAQABACOAA6AgAAAPWLCgE+8AAWRydPf7BwCPoDAAAA9Ol9cPOzAAAAEAAD0BHQBnBAEAlAQCAFcFAgB/BQIAogUBAJIGBAARBwAAKQcAAMIHAwDRCAIA/wgBAN4LAQAKDAEAMgwDAI4MAQA5DvUAdw8BAPYPAgA5EAEATBACAHgQAQALEQAAYREBABUSAABTEgAAihIBAPESAQASEwcA/xMDAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0717d66ebc8c.js b/pr/561/docs/search.index/0717d66ebc8c.js deleted file mode 100644 index 3d5ceee14..000000000 --- a/pr/561/docs/search.index/0717d66ebc8c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBoEAAABOJZfL5EwAAAQABAQA7MAAAAQAABgABABwUBgDzBgFl9NATAAABAC8AAQBTAISgIAAACSqwYBLwAIcBAQnz/w8AAGICAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0727d10d12d0.js b/pr/561/docs/search.index/0727d10d12d0.js new file mode 100644 index 000000000..6c7ff7093 --- /dev/null +++ b/pr/561/docs/search.index/0727d10d12d0.js @@ -0,0 +1 @@ +rn_("AYACoFAAABDFoFAAABIIYXUBgwKxABQcAAGw0BQOAAFrbQEEAaCgAAAUJ3fyFxQAAAEAAQsA9IkTAAABAAEAAQAjgAKggAAAE7Flb2MDA6BgAAATR2VucAHZCwAAI4ACoEAAABBXbXABCgDzaxMAAAEAcAATgAKiEAAAFCdsb/cAAACFoQAAABPeBIEDOzAAAAEAADsABACTBQUAIQcAAHQHMwAFEQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/0740e388ca16.js b/pr/561/docs/search.index/0740e388ca16.js deleted file mode 100644 index b4815041d..000000000 --- a/pr/561/docs/search.index/0740e388ca16.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACoCAAAA9YoDAAABNAYXLzAAF0AVEHAAABBAGgQAAAE8Zl8uYTAAABAAEFADswAAABAAALAAUA3g8FAD4SAQBnEwEAuRMAANgTAADjAISgMAAAD1aFAAI7MAAAAQAACwAFAH8FAgCSBgQACgwBAAcRAABPEgAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/080595ed9c0d.js b/pr/561/docs/search.index/080595ed9c0d.js deleted file mode 100644 index 8d6e23374..000000000 --- a/pr/561/docs/search.index/080595ed9c0d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9JASAAABAI8AAQABAwD0xBIAAAEAlQABAPMFAmJ1OjAAAAEAAAAAAAcAEAAAAAcQCBC4ELkQZRFmEZsSnBIBAgD08RAAAAEAbQEBAAEFAPP3EAAAAQABAAEEAPQ5EgAAAQCkAAEA84CEEQkA") \ No newline at end of file diff --git a/pr/561/docs/search.index/082d110ec414.js b/pr/561/docs/search.index/082d110ec414.js new file mode 100644 index 000000000..aaf3cec25 --- /dev/null +++ b/pr/561/docs/search.index/082d110ec414.js @@ -0,0 +1 @@ +rn_("AYMCoFAAABCToKAAABK9a3ABAAGwQBILAAFs9DkJAAABACkHAQABCAD0HxIAAAEAAQABAAEEAbAAEG0AAXMB3A8AAAECAaBQAAASe2MBfQwAALcAAACFsEAMuAABoDAAAAvIlQABOzAAAAEAAAgABACoBAAAcwUCAIAMAQBLDwIAJwEAgIWwMAj4AAGgEAAAEvOwIAdKAAGRAEQBEAD0/xMAAAEAAQABAAEDAPQ5CQAAAQApBwEAY4ADoAAAAAvIbnJ1AQACsNATNgABoDAAAA9OYmr2VwUAAAEAAQBJAAEAbgEBAAGwgBNVAAF0OzAAAAEAAEEABACgBQAA4wgAAO0IAAA3DD4AAQkA8z8SAAABAAEA84ADY2d0AYMCoJAAABOfoJAAABOgMjMBgAKgUAAAE8eggAAAEvBjZfMAAnN08hIHAAABAAEAAaCwAAATOGLzxRIAACIBAQAjgAKgAAAAEsRkciOAAqBQAAATkWNl84ACaXkBBAD1vhAAAAEAAQABAAEA8wEBbgEIBwAAAQEAOzAAAAEAAAkAAgC3BwcAhBIBAAEGAPQqEwAAAQABAAEAAQ8A9AgUAAABAAEAAQDzgQJobQEAAbBAE8sAAWX1kxMAAAEAAQABAAEAU4ADoCAAABFabG50120AgMugIAAAE/qwYBBTAAGwQA+EAAHAGzgK") \ No newline at end of file diff --git a/pr/561/docs/search.index/082f22c58a74.js b/pr/561/docs/search.index/082f22c58a74.js new file mode 100644 index 000000000..16202dfa7 --- /dev/null +++ b/pr/561/docs/search.index/082f22c58a74.js @@ -0,0 +1 @@ +rn_("AYMCsQAUHAABsNAUDgABa20BCgDzaxMAAAEAcAATgAKiEAAAFCdsbzMBhKBgAAASCKEAAAAT3gSAAzswAAABAAA0AAIAIQcAAHQHMwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/08d9a5c3e851.js b/pr/561/docs/search.index/08d9a5c3e851.js deleted file mode 100644 index 0137afb5a..000000000 --- a/pr/561/docs/search.index/08d9a5c3e851.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMA9N8IAAABADYDAQABAwDzEwwAAAEAAQDzgAJpbwEBAbBQEIgAAWP0LwcAAAEAAQAEAiOBAqBQAAAQTGNuAQQAOzAAAAEAAAcAAwA/EQIA5xIBAHsTAgABAQA6MAAAAQAAAAAABwAQAAAAYhFjEZkSmhLxEvISmROaE/MJAWkBhxAAANcCAACHsMAS3AABoFAAAA9AoRAAABO/FAEXOzAAAAEAACQAAQCqASQA") \ No newline at end of file diff --git a/pr/561/docs/search.index/09031ecd90af.js b/pr/561/docs/search.index/09031ecd90af.js deleted file mode 100644 index 1e7250d2e..000000000 --- a/pr/561/docs/search.index/09031ecd90af.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBsEAQ3QABZQExDgAAAQUAOzAAAAEAAAYAAQDkDwYAAQMA9IMMAAABAAEAAQDzAAJwczowAAABAAAAAAAMABAAAACCBZcG4QgMDBkMgRCCECUSJhJ6EnsSfBJ9EjMAA7BQD1kAymRwcjswAAABAAAPAAYAggQAAEMFAwBGDwAAVxEDACASAwBSEgEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/098141622ea4.js b/pr/561/docs/search.index/098141622ea4.js new file mode 100644 index 000000000..5acfdb368 --- /dev/null +++ b/pr/561/docs/search.index/098141622ea4.js @@ -0,0 +1 @@ +rn_("AQIAOzAAAAEAABYACQDgDwUA6xABAHURAgBCEgEAchIEAGsTAQCSEwAAvRMAANwTAAAjgAOh8AAAFCew8BQaAAFjZmcjgAKwUBMoAAFtbgEFAPNrEwAAAQBwAPMEAWMBCxEAAAEBAbBwE8EAAXA7MAAAAQAACQACAKkHBwBTEAEAAQIAOzAAAAEAAAsAAgA+EwUA8xMFAPMBAW07MAAAAQAADQAEAH4MAADtEAAAWhIFALMTBQATAAKgMAAADIJlc/J5EQAAAQABggKwcBOhAAGgQAAAEJdpc/cBAICGsJAThQABkEkI") \ No newline at end of file diff --git a/pr/561/docs/search.index/0a1f8308fd81.js b/pr/561/docs/search.index/0a1f8308fd81.js new file mode 100644 index 000000000..ec5a46fc9 --- /dev/null +++ b/pr/561/docs/search.index/0a1f8308fd81.js @@ -0,0 +1 @@ +rn_("AQkBoIAAABQWZgEEEwAAAQIA9V0QAAABAAEASwIBAPMAAml1OjAAAAEAAAAAAAcAEAAAADgQYBJIE0kTeRN6E5gTmRMBCAD1qxMAAAEAAQABAAEA8wIBZvUcEAAAAQABAAEAAQATgAKwoBPvAAFydPMCAmFz80wQAAABAAEAAQQBsEATywABZfWTEwAAAQABAAEAAQABAgA7MAAAAQAACwACAD4TBQDzEwUA8wMBbTswAAABAAANAAQAfgwAAO0QAABaEgUAsxMFAPOBAmNl84ACYWU=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0a3276da8fac.js b/pr/561/docs/search.index/0a3276da8fac.js new file mode 100644 index 000000000..f1d246447 --- /dev/null +++ b/pr/561/docs/search.index/0a3276da8fac.js @@ -0,0 +1 @@ +rn_("AQABsGATeQABZQGwEwAAAQYA9KYSAAABAEUBAQABBAD0wBIAAAEABwEBAPMAA2VyczowAAABAAAAAAAJABAAAADyCPMI9AjFEAQRCxIMEhkScRNyEw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0a8ad4b154a4.js b/pr/561/docs/search.index/0a8ad4b154a4.js deleted file mode 100644 index 35f8d54f8..000000000 --- a/pr/561/docs/search.index/0a8ad4b154a4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsFAQgQABoLAAABNkY3MBBADzSQ8AAAEAAQABgAKgUAAAEFOgYAAAEMFpcgGAAqAgAAAMJ6BgAAAQwGVoAQEBoCAAABC/YvMjDAAAAQABABOBAqAQAAAMJmFjAYACoBAAABMwsDAMwQABZXMjAAKgQAAAE8Zld/LmEwAAAQABAwA7MAAAAQAABQACAB8MAwDUEAEAAQYA9H4SAAABAIkBAQATAAKwYBKAAAFmbfKMDAAAAQABAQD0jBAAAAEAqQABACOAAqCwAAATS2RnAYICoKAAABKwoEAAAA/5b3bzgANnbnIBgAKgQAAAEnegMAAAD0ZobLc/AACKsEAPRwABNGBXOzAAAAEAABoABAD6AQAATAQOAKoLCQB9DAAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/0aa067caf819.js b/pr/561/docs/search.index/0aa067caf819.js new file mode 100644 index 000000000..c50e68e96 --- /dev/null +++ b/pr/561/docs/search.index/0aa067caf819.js @@ -0,0 +1 @@ +rn_("AQsBoEAAABOjZfLNEwAAAQABBQD0fBEAAAEAAQABAAGDArAAEG8AAbBQEusAAWR3E4ACoKAAABNcZXYBAgD0iRAAAAEAhgEBAAEAAPR5DwAAAQDtAAEBI4ICsFASwgABZXMBAgD0lBIAAAEAjwABAAEDAPTIEgAAAQCVAAEA84UCYnUBAgD09RAAAAEAbQEBAPOAAmls8wADYnR1OjAAAAEAAAAAAA8AEAAAAEQH0QfSB9MH1AehD2AQGxOaE+MT5BPmE/ET8hMVFBkUAQwA838TAAABAAEAAYACsAAI6AABoCAAAAyuZG4BBgD0khIAAAEAjwABAPMDAWL0hxAAAAEAhgEBAJcGAACHsEAPdwABoHAAABIasJASwAABOAkDOjAAAAEAAAAAACQAEAAAAJwFnQWeBZ8FBgcHB+YLowykDKUMqQyqDKsMbw9wD8MPxA/ID8kP5g/nD+gP6Q/qD+sP7A8qEC8QWhBbEPsSHxNEE9kT5RMDFBIUAQMA9KYSAAABAEUBAQDzgAJjbXcBAIDFsYAUIgABQIEECA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0b1eca90850d.js b/pr/561/docs/search.index/0b1eca90850d.js new file mode 100644 index 000000000..a7d28a526 --- /dev/null +++ b/pr/561/docs/search.index/0b1eca90850d.js @@ -0,0 +1 @@ +rn_("AQIBsEATJgABZfKYBgAAAQABBADz9g8AAAEAAQBDAAOwQBKMAAGxABNrAAFlZnA7MAAAAQAAJAAGAAgCAACnBgwAtQYMAC8PBgCPEAAAyxIBAGOAA7AwC8oAA2FlaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0b62d17c06c4.js b/pr/561/docs/search.index/0b62d17c06c4.js new file mode 100644 index 000000000..f27e25411 --- /dev/null +++ b/pr/561/docs/search.index/0b62d17c06c4.js @@ -0,0 +1 @@ +rn_("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") \ No newline at end of file diff --git a/pr/561/docs/search.index/0bac143bcb50.js b/pr/561/docs/search.index/0bac143bcb50.js deleted file mode 100644 index 169f369b7..000000000 --- a/pr/561/docs/search.index/0bac143bcb50.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkA898TAAABADUAAYACoEAAABLGsCATgQABaGkBDAGgoAAAFCN38hMUAAABAAEBAPN/DwAAAQABAPOAAnR1AYECsIAT7QABoGAAABQRZHM3AwCDhqBAAAATwrBgE5YATAKQDgESAPT7EwAAAQABAAEAAQDGoFAAABJPoAAAABAZsCAQyAABoFAAABFtoQAAABP2oEAAABOgAAMCCzswAAABAAAVAAcAhgUAAOULAACSDAAAjw8NAOwQAABlEgEAmxMBAAEBAbCwE+gAAWw7MAAAAQAADAADAPgGCACxDAEAzQ8BAAEBAaAwAAAQo2jz0AgAAC4AVwgBAgD0TBEAAAEAAQABABOBArAgEVAAAWFz84ICbm/3AQCAh6AgAAAFhaBAAAALzxUBBw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0bca21001963.js b/pr/561/docs/search.index/0bca21001963.js deleted file mode 100644 index a4edb28c8..000000000 --- a/pr/561/docs/search.index/0bca21001963.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBoAAAABK2c/RXDwAA1gMBAAMAAQECsGATowABsEAT3QABZHQ7MAAAAQAADQAGAGoSAwDUEgEAQRMBAFgTAQDSEwEA9xMBAAEBA7BwEXUAAbCAEkcAAYAS6QAQ8G1uczswAAABAAALAAIAwAgFAMkSBQCjgISgsAAAEzCxcBQWAAEIQIIBAISgcAAAEg6gcAAAEIqxABOjAAGwABKqAVkCIQHyUwUAAAEAZwQAAIc7EUdIZJ2gEAAABYWwMBKdAT+gQAAAEK0RwQw7MAAAAQAABgACAPYSAABcEwUA") \ No newline at end of file diff --git a/pr/561/docs/search.index/0bd42362d0ac.js b/pr/561/docs/search.index/0bd42362d0ac.js deleted file mode 100644 index 502a52f11..000000000 --- a/pr/561/docs/search.index/0bd42362d0ac.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQcA9HgRAAABAAEAAQAjAQKgcAAAEXdhcgFMBwAAAQMAOzAAAAEAAAgAAgAvDwYAxxIBAPMAAmN0OzAAAAEAAFYAJwCIBAsASgUAAN0IAQDdCwAA4gsCAJoMAACmDAIAuAwBAFUPAABaDwEAXQ8BAGMPAADrDwIA8g8BAPcPAQAXEAAAihAAAJAQAADdEAEA6hABAP4QAQACEQIAWxEBAG4RAgB0EQAAJBIAAC0SAQAyEgEAeBIBAIgSAQCMEgEArBIBALwSAwDCEgEAIhMBADQTAACfEwAAxBMEAM0TAgA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0c095a22cb40.js b/pr/561/docs/search.index/0c095a22cb40.js new file mode 100644 index 000000000..90e1fa283 --- /dev/null +++ b/pr/561/docs/search.index/0c095a22cb40.js @@ -0,0 +1 @@ +rn_("AQQBoFAAABPDcwETEgAAAYICsEASOQABsEASOwABNDYBCwDzMxMAAGgAAQABBgD0ExQAAAEACgABAPMCAXIBfBMAAPMDAWX0BRAAAAEAqQABAPOEA2FlaWOAA6BQAAAT+mNldA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0c134c082066.js b/pr/561/docs/search.index/0c134c082066.js new file mode 100644 index 000000000..792007a0c --- /dev/null +++ b/pr/561/docs/search.index/0c134c082066.js @@ -0,0 +1 @@ +rn_("AQkA8+MTAAABADUAAYADoEAAABLKsCAThQABoCAAAA9eaGl5AQkBoIAAABQWZgEEEwAAAQMBsAATmgBMc/IvEAAAFQMjgAKgIAAAD1phcgECAPVdEAAAAQABAEsCAQDzAANpdHU6MAAAAQAAAAAADgAQAAAAUQf7CJ4Mvw84EGASmBKZEkgTSRNPE3kTehOYE5kTAYACoDAAABPGsLATIAABYWwBDAGgoAAAFCd38hcUAAABAAEBAPOBDwAAAQABAPOAAnR1AQMA8zMSAAABAAEAAQEA9b4QAAABAAEAAQABACOAArCQE3EAAWF0AQQBoEAAABPKZfLqEwAAAQABAgA7MAAAAQAACwAFAOAPBQBCEgEAaxMBAL0TAADcEwAAE4ICsPAUGgABZmcBgQKwgBPxAAGgYAAAFBVkcwEIAPWrEwAAAQABAAEAAQDzAgFm9RwQAAABAAEAAQABACOAA6AgAAAPWLCgE+8AAWRydHfvAQCNsBATpQABsOATpwABl9UOOzAAAAEAACUBEgBnBAEAlAQCAH8FAgCSBgQAwgcDAN4LAQAKDAEAjgwBADkO9QB3DwEAORABAEwQAgB4EAEACxEAAGERAQBTEgAAEhMHAP8TAwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0c955f5d87ad.js b/pr/561/docs/search.index/0c955f5d87ad.js new file mode 100644 index 000000000..86618ab23 --- /dev/null +++ b/pr/561/docs/search.index/0c955f5d87ad.js @@ -0,0 +1 @@ +rn_("AYICoFAAABJToQAAABP6Y3QjAAKwQA9cAAFldTswAAABAAA3ABYAmgYBAMMLAQChDAEAYQ8BAOAPBQAREAUAjBABAOsQAQB1EQIAQhIDAHISBACiEgEAqBIBALcSAQA6EwEATRMBAGsTAQBvEwEAkhMAALkTAQC9EwEA3BMAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0ca93a7be19c.js b/pr/561/docs/search.index/0ca93a7be19c.js deleted file mode 100644 index 9f0b27b33..000000000 --- a/pr/561/docs/search.index/0ca93a7be19c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMA8+sPAAABAAEAAYACoLAAABOMsDAS3AABbnRDAAOgIAAAEJawUBFnAAFlaGk7MAAAAQAABgADAMcLAAB4EQMAOBMBAPOAAmRy") \ No newline at end of file diff --git a/pr/561/docs/search.index/0d32a9b9999a.js b/pr/561/docs/search.index/0d32a9b9999a.js new file mode 100644 index 000000000..e3529ca8c --- /dev/null +++ b/pr/561/docs/search.index/0d32a9b9999a.js @@ -0,0 +1 @@ +rn_("AQYA9CoTAAABAAEAAQABDwD0CBQAAAEAAQABAAEAAbDwFBAAAWv2hBMAAAUAAQABAAEAJQABAgD0/A8AAAEAqwABAPcAAACFsQAT/QABiTAA8ksSAAABABOAArAQDAYAAWVvAQUAOzAAAAEAAA0AAQAcEQ0AAQIA844PAAABAAEAAQIA9IoPAAABAAEAAQABAwA7MAAAAQAACAABADsQCAABgAKgAAAAC9ywMBPLAAFxcgGAAqBAAAAQj7DAE8EAAWVzAQEAOzAAAAEAABMAAQCrDxMAI4ACsJATMQABaW13NgAAiqBQAAATkLBwE3EAAaAgAAAMm5xVETswAAABAAALAAQAKAcAAGkQAwAtEgEAkxMEAAECAbAwEPcAAXABFBIAALOAhKAgAAARWgIoBA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0d5f9f853410.js b/pr/561/docs/search.index/0d5f9f853410.js new file mode 100644 index 000000000..be958c8d2 --- /dev/null +++ b/pr/561/docs/search.index/0d5f9f853410.js @@ -0,0 +1 @@ +rn_("AQEBsFAPYQABY/SDBAAAAQABAMIAAQABoIAAABQWZgEEEwAA8wYBc/KvDAAAbAQzAAOgYAAAE/pjaXPyVBEAAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/0d6bfa8c2af1.js b/pr/561/docs/search.index/0d6bfa8c2af1.js deleted file mode 100644 index e16e6edf4..000000000 --- a/pr/561/docs/search.index/0d6bfa8c2af1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA9XsFAAC+DAEApAABAAEAADswAAABAAAHAAMAAgIBABwMAQCiDwMAAYMCsHATAQABsIATOAABY3MBBQD0pBIAAAEAkQABAPMIAWP12w8AAAEAvAABAAEAAQABoDAAABEFdPJEEAAAAQABgAKgAAAAEBWgAAAAEBY0NvMDAXYBrQwAAJcAAACFsKASiAABsCAL2gABsIASZwABCQQGOjAAAAEAAAAAAAkAEAAAANsG3AbdBugLfQ/bEBgSGRIaEr8TAQIA9JASAAABAI8AAQABAwD0xBIAAAEAlQABAPMAAmJ1OjAAAAEAAAAAABUAEAAAABwHHQceB2EPYg8HEAgQJhAnELgQuRBlEWYRjhKPEpsSnBKrEtYS1xIeEx8TAQEA9HcFAAABACQHAQC3AACAhbEAE6UAAbAAByYAAQwIRAEIADswAAABAAAFAAEASRIFANcNAACIsEAQqAABoCAAAAy3uQALOzAAAAEAAA8ABQByAAEA0wYHADUHAQD6DwEApBABAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0d8cb66fef7e.js b/pr/561/docs/search.index/0d8cb66fef7e.js new file mode 100644 index 000000000..93c2a891e --- /dev/null +++ b/pr/561/docs/search.index/0d8cb66fef7e.js @@ -0,0 +1 @@ +rn_("AQABoLAAABM4YvPFEgAAIgEBAAGAAqAgAAAPWqAwAAATRGFy8wABdAFRBwAAAQQBoEAAABPKZfLqEwAAAQABBQA7MAAAAQAACwAFAOAPBQBCEgEAaxMBAL0TAADcEwAA4wGEoDAAAA9YhQACOzAAAAEAAAsABQB/BQIAkgYEAAoMAQALEQAAUxIAAGOAA7AAD3sDSWRucg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0e2aac44d870.js b/pr/561/docs/search.index/0e2aac44d870.js deleted file mode 100644 index e0ea83a05..000000000 --- a/pr/561/docs/search.index/0e2aac44d870.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9AwJAAABALUHAQABCQGggAAAFBJmAQATAAABAgD1WRAAAAEAAQBLAgEA8wACaXU6MAAAAQAAAAAABwAQAAAANhBcEkQTRRN1E3YTlBOVEwEIAPWnEwAAAQABAAEAAQDzAgFm9RoQAAABAAEAAQABABOAArCgE+sAAXJ08wACYXPzSBAAAAEAAQDzgAJ0dg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/0e4d0f710b2b.js b/pr/561/docs/search.index/0e4d0f710b2b.js deleted file mode 100644 index df57f1ea5..000000000 --- a/pr/561/docs/search.index/0e4d0f710b2b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMA9qwMAADFAloAAQC4AgEAAQQAOzAAAAEAAAoABAAPEAUAQBIBAJ4SAQC6EwAAAYYCoAAAABLAoAAAABLBZHLzAgF2AewSAADzgAJlbycBAADHoDAAAA9woHAAABIRoIAAABONoNAAABMwoLAAABONQEUICTswAAABAAAJAAMAmQUCAPIGBAANDAEAI4ACU5KIn+d+ZHIBAAA6MAAAAQAAAAAACgAQAAAAIAkhCaYP2hLbEgoTCxOuEwIUGBQZFBOAAqAwAAAQJWx084ACYWU=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0f1ad3f0f257.js b/pr/561/docs/search.index/0f1ad3f0f257.js new file mode 100644 index 000000000..dbae446e8 --- /dev/null +++ b/pr/561/docs/search.index/0f1ad3f0f257.js @@ -0,0 +1 @@ +rn_("AQIA9SsRAAABAAEAAQABAAGAArBgEoYAAaAgAAAQgG95AQABoMAAABOkafTcEgAACAAbABsAAQMA9AATAAABAAEAAQABBgD0CBQAAAEAAQABAAECAPR+EAAAAQCaAAEAAQIBoEAAABKzcjswAAABAAAHAAIAfBABABMRBQDzgAJhb2cHAACHsIASsgBZsKATKAABDDAHOzAAAAEAAA4ABAB1BAUA0gsAAD4RAwAfEgMApwAAgIWg8AAAEzmwUA/WAAGgkAAAEQqUgQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/0f30d894e39f.js b/pr/561/docs/search.index/0f30d894e39f.js deleted file mode 100644 index 48b803886..000000000 --- a/pr/561/docs/search.index/0f30d894e39f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYYCoAAAABLAoAAAABLBZHIBgAKgcAAAE1CgMAAAEJNmdAELAaBAAAATn2XyyRMAAAEAI4ECsFAQawABY3YBAAGwgBOhAAFw8p0TAAABAEMGA6AgAAAQ3KBAAAASJGRlc/N+DwAAMwMBAPMABGlyc3Y7MAAAAQAADwAFAMoGBQBJEgUAdRIBAOwSAADUEwAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/0f76ca14a896.js b/pr/561/docs/search.index/0f76ca14a896.js new file mode 100644 index 000000000..f62f8e18e --- /dev/null +++ b/pr/561/docs/search.index/0f76ca14a896.js @@ -0,0 +1 @@ +rn_("AQEBsIAS2gABdfITCQAAAQAjgAKwEAkRAAEzNgECAPMjBwAA7AEBAAECAPQMCQAAAQC5BwEAAQIA8wMMAAABAAEAE4ACsBAJCgABaXUBAgA7MAAAAQAACwACAD4TBQDzEwUA8wkBbTswAAABAAAMAAMA7RAAAFoSBQCzEwUAdzAAAIqgMAAAE1SgcAAAEXigIAAACQ6wMBE8AAGgUAAAD4kzhQs7MAAAAQAAJgIEAO0BAAATAisBRwcAAMoJ+AA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/100590a026d4.js b/pr/561/docs/search.index/100590a026d4.js new file mode 100644 index 000000000..65808ae43 --- /dev/null +++ b/pr/561/docs/search.index/100590a026d4.js @@ -0,0 +1 @@ +rn_("AQIAOzAAAAEAAAUAAQDzEwUA8w0BbTswAAABAAAFAAEAsxMFACMDhLBAEjYAAaEAAAAT+bAAEvQAhzAIAjswAAABAAAUAAUAshAHAFgSAQDTEgQAqxMEABYUAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/100cd8e013cf.js b/pr/561/docs/search.index/100cd8e013cf.js deleted file mode 100644 index 638ecb111..000000000 --- a/pr/561/docs/search.index/100cd8e013cf.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBoEAAABOJZfL5EwAAAQABAQA7MAAAAQAABgABABwUBgDzBgFl9NATAAABAC8AAQAzBQOwYBLwAIdhcnXz/w8AAGICAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1018db7f545d.js b/pr/561/docs/search.index/1018db7f545d.js new file mode 100644 index 000000000..851edd30c --- /dev/null +++ b/pr/561/docs/search.index/1018db7f545d.js @@ -0,0 +1 @@ +rn_("AQAA9D4PAAABAAEAAQDzAgFzAbEQAAABAAKwgBPxAAGgYAAAFBVkc/LGCAAAJAOTgISwwBM2AAGgEAAAEVYAwUA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1047f5569448.js b/pr/561/docs/search.index/1047f5569448.js new file mode 100644 index 000000000..7b499bb29 --- /dev/null +++ b/pr/561/docs/search.index/1047f5569448.js @@ -0,0 +1 @@ +rn_("AQIA9IkQAAABAIYBAQABAAD0eQ8AAAEA7QABASOCArBQEsIAAWVzAQIA9JQSAAABAI8AAQABAwD0yBIAAAEAlQABAPOFAmJ1AQIA9PUQAAABAG0BAQDzgAJpbPMAA2J0dTowAAABAAAAAAAPABAAAABEB9EH0gfTB9QHoQ9gEBsTmhPjE+QT5hPxE/ITFRQZFAEMAPN/EwAAAQABAAGAArAACOgAAaAgAAAMrmRuAQYA9JISAAABAI8AAQDzAwFi9IcQAAABAIYBAQCXBgAAh7BAD3cAAaBwAAASGrCQEsAAATgJAzowAAABAAAAAAAkABAAAACcBZ0FngWfBQYHBwfmC6MMpAylDKkMqgyrDG8PcA/DD8QPyA/JD+YP5w/oD+kP6g/rD+wPKhAvEFoQWxD7Eh8TRBPZE+UTAxQSFA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1074492a6ce1.js b/pr/561/docs/search.index/1074492a6ce1.js deleted file mode 100644 index 303d4f5fe..000000000 --- a/pr/561/docs/search.index/1074492a6ce1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAD8AAgDtCAAANww+AAGAArBQEEQAAbCwEwwAAWFsYwAEsEAPPgABoBAAAA/9YnBydjswAAABAAAGAAEA4BAGAAGAArCAEI4CE7DgE3MAAWlyAQMBsEAQ3QABZQExDgAAAQUAOzAAAAEAAAYAAQDkDwYAAQMA9IMMAAABAAEAAQDzAAJwczowAAABAAAAAAAMABAAAACCBZcG4QgMDBkMgRCCECUSJhJ6EnsSfBJ9ElcAAACFsFAQNgImsFAPWQDKoEAAABEISIADOzAAAAEAAA8ABgCCBAAAQwUDAEYPAABXEQMAIBIDAFISAQDTAISgYAAADJUQCAbzoAEAAAEA1wo=") \ No newline at end of file diff --git a/pr/561/docs/search.index/10cc047da5fa.js b/pr/561/docs/search.index/10cc047da5fa.js new file mode 100644 index 000000000..6d41427a7 --- /dev/null +++ b/pr/561/docs/search.index/10cc047da5fa.js @@ -0,0 +1 @@ +rn_("AQAA9OcSAAABAAEAAQATAAKwgBK7AAFzdvQ7CQAAAQAtCgEAE4ACsDAQjAABbG4BgAKgAAAAEBegAAAAEBg0NvMDAXYBrQwAABMAAqBAAAARCWFz9+gLAACXA2ABPQEBAAEApQEBAgD0lBIAAAEAjwABAAEDAPTIEgAAAQCVAAEA8wACYnU6MAAAAQAAAAAAEwAQAAAAHAcdBx4HYw9kDwkQChAoECkQvBC9EGkRahGSEpMSnxKgEq8SIhMjE/OAAmR0E4ACoCAAAAy3ZXIBBwGgQAAAE6Nl8s0TAAABAAEAAPUtCQAAAQABAAEAAQAjgAKgoAAAE/lmcEcAAACFsDAPPAABoFAAAA//sHAQhQABsUAUIAABgSkA8lEFAAABAPOAAmx0lwEAgIaxMBOlAAGxEBPPAAGgsAAAEsoRRQg=") \ No newline at end of file diff --git a/pr/561/docs/search.index/11072cb31ff4.js b/pr/561/docs/search.index/11072cb31ff4.js new file mode 100644 index 000000000..19e82203c --- /dev/null +++ b/pr/561/docs/search.index/11072cb31ff4.js @@ -0,0 +1 @@ +rn_("AQYAOzAAAAEAAAkAAQDOEAkAI4ADsGAS8QABsDAPUwABaXN0AQgA9asTAAABAAEAAQABAPMBAWb1HBAAAAEAAQABAAEAY4ADoDAAABKzZWd0") \ No newline at end of file diff --git a/pr/561/docs/search.index/111fe05311d8.js b/pr/561/docs/search.index/111fe05311d8.js new file mode 100644 index 000000000..35f7431f4 --- /dev/null +++ b/pr/561/docs/search.index/111fe05311d8.js @@ -0,0 +1 @@ +rn_("AQIAOjAAAAEAAAAAAA4AEAAAALgMuQyUEHIRcxF0ESgSMRIyEjYSNxKMEo0SwhLDEgEJAPP7EAAAAQABAAEKAPM/EgAAAQABAAEGAPW+EAAAAQABAAEAAQDzgAJkbnMAhLEgE6cAAQARA/KWEgAAAQABDQD2DhMAAAEAowBUABYAAQABgAKwoBMmAAGgEAAAC+ljdQEBAPQ2EwAAAQBLAAEA8wABZfI/CQAAAQD3AACAxbAwEDkAAQACqAg=") \ No newline at end of file diff --git a/pr/561/docs/search.index/117405adffd2.js b/pr/561/docs/search.index/117405adffd2.js deleted file mode 100644 index d38754ec4..000000000 --- a/pr/561/docs/search.index/117405adffd2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQ0A9UYTAAABAAEAcwABAAECAPSFEAAAAQCGAQEAAQMA9PEQAAABAG0BAQDzAAJidQGfDwAAAQMA9IMQAAABAIYBAQDzhAJkcwECAPPbCAAAAQBYAPOAAml0ARgA8yAUAAABAAEAI4ECsMATRAABY20BBQGgYAAAEjRy9NcLAAABAMUDAQABCQD2XRIAAAEA+QCCADEAAQATgAKwYBBGAAFkbgEDAaBwAAASmGf0LQcAAAEABAIBAAEJAPPfEwAAAQA1AAGBArCAE+0AAaBgAAAUEWRzFwEAiYWw0BQTAAGgQAAAE8KwYBOWAEwCkApnXgAAi7BwEKgAAbCwEqYAAaCgAAASXLDwE3UAAW2BD/SAAAAAAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/120419dec60e.js b/pr/561/docs/search.index/120419dec60e.js deleted file mode 100644 index e087520fa..000000000 --- a/pr/561/docs/search.index/120419dec60e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsIAToQABcPKdEwAAAQBDBQOgIAAAENygQAAAEiRkZXPzfg8AADMDAQABAgA7MAAAAQAAEwABAKkPEwATgYSgUAAAEIugEAAAC9ygIAAADJscQAAzgAOwUBLtAAFhZm4=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1209d5018515.js b/pr/561/docs/search.index/1209d5018515.js new file mode 100644 index 000000000..c9bf1af19 --- /dev/null +++ b/pr/561/docs/search.index/1209d5018515.js @@ -0,0 +1 @@ +rn_("AQIAOzAAAAEAAOcAAgDFCwAAwwzmAPMAAW07MAAAAQAA5wACAHwFAACoBeYAAQMAOzAAAAEAAAgAAgAvDwYAyxIBAPMAAWM7MAAAAQAAVgAnAIgECwBKBQAA3QgBAN0LAADiCwIAmgwAAKYMAgC4DAEAVw8AAFwPAQBfDwEAZQ8AAO0PAgD0DwEA+Q8BABkQAACOEAAAlBAAAOEQAQDuEAEAAhEBAAYRAgBfEQEAchECAHgRAAAoEgAAMRIBADYSAQB8EgEAjBIBAJASAQCwEgEAwBIDAMYSAQAmEwEAOBMAAKMTAADIEwQA0RMCAPOAAnJ3AQkA8+MTAAABADUAAYACoEAAABLKsCAThQABaGkBDAGgoAAAFCd38hcUAAABAAEBAPOBDwAAAQABAPOAAnR1AYECsIAT8QABoGAAABQVZHM3AwCBhqBAAAATxrBgE5oATAKQDgGIArAAE1AAAbAAE1IAATQ2M4ADoDAAABEFZG5zYwADoBAAAASqYWVvAX8AAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1227567231b7.js b/pr/561/docs/search.index/1227567231b7.js new file mode 100644 index 000000000..a29b00765 --- /dev/null +++ b/pr/561/docs/search.index/1227567231b7.js @@ -0,0 +1 @@ +rn_("AYECsDAPxQABsBATKAABc3QBAwDzPxIAAAEAAQAjgAKwABE8AAFoaQEAADswAAABAAATAAEAWAcTACOAAqAwAAAMh2Fl84ACcnTzAAJhbDswAAABAAAoAAMAlAATAJ8BAACrDxMA") \ No newline at end of file diff --git a/pr/561/docs/search.index/12f9fbc29c76.js b/pr/561/docs/search.index/12f9fbc29c76.js new file mode 100644 index 000000000..131785d2d --- /dev/null +++ b/pr/561/docs/search.index/12f9fbc29c76.js @@ -0,0 +1 @@ +rn_("AQcA9HwRAAABAAEAAQAjAAKgcAAAEXthcgFMBwAAAQAA9p8QAAABAHMDAQAKAAEAAQAAOzAAAAEAAAYAAgD6EgAAYBMFACOIArBAE9EAAWVzAQ0BsEATywABZfWTEwAAAQABAAEAAQABBQA7MAAAAQAACAADAHURAgByEgQAkhMAANcDAACGLHeiHBt+FIQG9aEEAAABANcHAQABAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1309e810f607.js b/pr/561/docs/search.index/1309e810f607.js new file mode 100644 index 000000000..f398c3e32 --- /dev/null +++ b/pr/561/docs/search.index/1309e810f607.js @@ -0,0 +1 @@ +rn_("AYACsRAT/QABsBAMBgABZW8BBQA7MAAAAQAADQABABwRDQABAgDzjg8AAAEAAQABAgD0ig8AAAEAAQABAAEDADswAAABAAAIAAEAOxAIAIcHAACHsKATMQABsNATwQABoFAAABOQjBQROzAAAAEAAAYAAwAoBwAAaRADAC0SAQDzgAJsdBOAA6AgAAAMfLCgE6kAAWFkbg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/133a2aaf2619.js b/pr/561/docs/search.index/133a2aaf2619.js deleted file mode 100644 index 84f8e1255..000000000 --- a/pr/561/docs/search.index/133a2aaf2619.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAAAcAAwA/EQIA5xIBAHsTAgABBADzQhEAAAEAAQAjAAKgYAAAEmlhcvNrEAAAAQC8AQGAAqEQAAAT/7CAE/cAAWl1NwQAgYexUBQaAAGgAAAAEEywcBNEAAGhMAAAFA4KQBsjgAKgMAAAEgludg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/13baa5793c64.js b/pr/561/docs/search.index/13baa5793c64.js deleted file mode 100644 index 2b775e4bb..000000000 --- a/pr/561/docs/search.index/13baa5793c64.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsKASQAABZTswAAABAAAJAAIAtwcHAIASAQABAAGgIAAADJVtAV8FAAABgAKwoBI+AAGwQA9fAAFsbwEAAPR6EgAAAQABAAEA8wQBZPQgEgAAAQABAAEAIwKEsKATtwABsEASeAABsHATZQABFYAAAY0TAAABAAGwgBOhAAFw8p0TAAABAEMAA6AgAAAQ3KBAAAASJGRlc/N+DwAAMwMBAPOBAmVp1wIAAIawIBIFAAGw0BOlAAEXAQL0gwQAAAEAAQDCAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/13ccbf84cfd6.js b/pr/561/docs/search.index/13ccbf84cfd6.js new file mode 100644 index 000000000..1d34bf144 --- /dev/null +++ b/pr/561/docs/search.index/13ccbf84cfd6.js @@ -0,0 +1 @@ +rn_("AQABoJAAABLkaPKsEgAAAQDzAgFk8ucGAAABAAECADswAAABAAAFAAEA8xMFAPMLAW07MAAAAQAABQABALMTBQAjgAKwIAyWAAFhbwECAPPNCAAANAMBAAGKArAAE1AAAbAAE1IAATQ2I4ECoDAAAAwqZXIBgAKwQBFtAAFPNzweGsFjdbcGAACHsBAP2gABsFATzwABEVEJ9X0EAAAKAMEAAQBuBw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/14310c58cecd.js b/pr/561/docs/search.index/14310c58cecd.js new file mode 100644 index 000000000..937a6b9a3 --- /dev/null +++ b/pr/561/docs/search.index/14310c58cecd.js @@ -0,0 +1 @@ +rn_("AQABoCAAAAyVbQFfBQAAAQAA9H4SAAABAAEAAQDzBAFk9CQSAAABAAEAAQAjhISwoBO7AAGwQBJ8AAGwcBNpAAEVgAAzgAOw0BOpAAFhZWk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/146f2605eb40.js b/pr/561/docs/search.index/146f2605eb40.js new file mode 100644 index 000000000..547bcfb53 --- /dev/null +++ b/pr/561/docs/search.index/146f2605eb40.js @@ -0,0 +1 @@ +rn_("AQAA9A0HAAABAAEAAQABhQKwcBOCAAGwMBLYAAFlcxMAA7BAD18AAaBgAAARDGJlczswAAABAAASAAQAgwUBAJwGCgDYDwEAKxADAAECAPOPBQAA9QkBAAEDAPVXDwAAnQABAAQAAQABCgGgQAAAE8pl8uoTAAABACMABKAwAAAQm6CQAAAS/7BgEi0AATBjaGn1exEAAIwBAQABAAEA84ACZHLnBAAAh7AQCMYDJLAgC7sA/6AwAAAPfBJBODswAAABAAASAAYAhQACAHYFAACkBQMAbgcFALEHAwDGCwAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/147f3f5b489c.js b/pr/561/docs/search.index/147f3f5b489c.js new file mode 100644 index 000000000..d9c217634 --- /dev/null +++ b/pr/561/docs/search.index/147f3f5b489c.js @@ -0,0 +1 @@ +rn_("AQIA9V8RAAABABwBAQBWAQEBAPehEAAAAQABAMMCAQCCAAUAAQIA9DQQAAABAAEAAQATgAKg0AAAE9hjc/OAAmVvI4ACsAAHJAABbHTzAAJhcvI4DwAAAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/149306f963b3.js b/pr/561/docs/search.index/149306f963b3.js new file mode 100644 index 000000000..b2c525373 --- /dev/null +++ b/pr/561/docs/search.index/149306f963b3.js @@ -0,0 +1 @@ +rn_("AQUA9G8TAAABAEkAAQDzAwFj8ncSAAABACOAArBwFBoAAWhvAYICsAASVAABsAARYwABZXNDAAOgoAAAE76gIAAAEv5laXTyZxIAAAEAAQIAOzAAAAEAAAYAAQDkEAYAAQIBoEAAABOjZfLNEwAAAQDzgAJpbwEIAPRmEwAAAQCCAAUAEwEDsJATyAABsFASrgFZZ2xwOzAAAAEAABIACQDwDwIAZhEBAJ0SAQC+EgEA9RIBAFcTAQCOEwEAnRMBANoTAQABgAKwQBIrAQ6gIAAAEKdhaQGBArAwE3cAAbAwEkkAAWNpAQMBsAASmAABczswAAABAAANAAMAYREBABITBwD/EwMAAQMA9V8RAAABABwBAQBWAfOAAnJ2AQAAOzAAAAEAAAUAAgApEgEAfhIDAPMCAWQ7MAAAAQAACQADAFsRAwAkEgMAVhIBACOAAqCQAAATvWlvE4ACsPAUDAABbG8BBQD02RMAAAwAHgAPACOAAqBgAAAS82dzI4ACsJATuwABYmz3xwAAjbBgE+8AAbBwE2kAAbBgEqwAAbBQEpoAAbXJFzowAAABAAAAAAAgABAAAACPBdAI/ggRDBIMiQyKDIsMMg4zDjQONQ43DjgOhA+FD4YPhw+ID1EQUhCLEK4QDhEPERARERFZEaQSuxK8Et0SkRM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1507fd45a0d0.js b/pr/561/docs/search.index/1507fd45a0d0.js deleted file mode 100644 index ebf3252a2..000000000 --- a/pr/561/docs/search.index/1507fd45a0d0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQsBoEAAABOfZfLJEwAAAQABBQD0eBEAAAEAAQABAAGDArAAEGsAAbBQEucAAWR3E4ACoKAAABNYZXYBAgD0hRAAAAEAhgEBAAEAAPR3DwAAAQDrAAEBI4ICsFASvgABZXMBAgD0kBIAAAEAjwABAAEDAPTEEgAAAQCVAAEA84UCYnUBAgD08RAAAAEAbQEBAPOAAmls8wADYnR1OjAAAAEAAAAAAA8AEAAAAEQH0QfSB9MH1AefD1wQFxOWE98T4BPiE+0T7hMRFBUUAQwA83sTAAABAAEAAYACsAAI6AABoCAAAAyuZG4BBgD0jhIAAAEAjwABAPMDAWL0gxAAAAEAhgEBAJcGAACHsEAPdQABoHAAABIWsJASvAABOAkDOjAAAAEAAAAAACQAEAAAAJwFnQWeBZ8FBgcHB+YLowykDKUMqQyqDKsMbQ9uD8EPwg/GD8cP5A/lD+YP5w/oD+kP6g8oEC0QVhBXEPcSGxNAE9UT4RP/Ew4UAQMA9KISAAABAEUBAQDzgAJjbXcBAIDFsYAUHgABQIEECA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/15883d436710.js b/pr/561/docs/search.index/15883d436710.js deleted file mode 100644 index 184d98bca..000000000 --- a/pr/561/docs/search.index/15883d436710.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYECoBAAABKwoHAAABL3YWMBhwKwABNMAAGwABNOAAE0NlMAhKCQAAAS2LCwE3MAAYEACfX3BgAANQDtCA0BGAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1593ad1b0859.js b/pr/561/docs/search.index/1593ad1b0859.js deleted file mode 100644 index 5c0f977d5..000000000 --- a/pr/561/docs/search.index/1593ad1b0859.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACoFAAABDBoFAAABIEYXUBgwKxABQYAAGw0BQKAAFrbQEEAaCgAAAUI3fyExQAAAEAAQsA9IUTAAABAAEAAQAjgAKggAAAE61lb2MDA6BgAAATQ2VucAHZCwAAI4ACoEAAABBTbXABCgDzZxMAAAEAcAATgAKiEAAAFCNsb/cAAACFoQAAABPaBIEDOzAAAAEAADsABACTBQUAIQcAAHQHMwABEQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/15d6832cecce.js b/pr/561/docs/search.index/15d6832cecce.js new file mode 100644 index 000000000..42233cde7 --- /dev/null +++ b/pr/561/docs/search.index/15d6832cecce.js @@ -0,0 +1 @@ +rn_("AQAAOzAAAAEAAAYAAgA2EQMAMxICAAEKAbBAE8sAAWX1kxMAAAEAAQABAAEA8wACaXP02gsAAAEAUAABACOBAqDgAAATsmV5") \ No newline at end of file diff --git a/pr/561/docs/search.index/15d820844df2.js b/pr/561/docs/search.index/15d820844df2.js deleted file mode 100644 index af028a449..000000000 --- a/pr/561/docs/search.index/15d820844df2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsIATUQABdAHjCAAAAQkA8zsSAAABAAEA84ACY2cBgwKgkAAAE5ugkAAAE5wyMwGAAqBQAAATw6CAAAAS7GNl8wACc3TyEgcAAAEAAQABoLAAABM0YvPBEgAAIgEBACOAAqAAAAASwGRyI4ACoFAAABONY2XzgAJpeQEGAPW6EAAAAQABAAEAAQABAQGwQBPHAAFl9Y8TAAABAAEAAQABAPcAAICFoBAAAAvIKWAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/16a5823b4448.js b/pr/561/docs/search.index/16a5823b4448.js new file mode 100644 index 000000000..6d03ad78f --- /dev/null +++ b/pr/561/docs/search.index/16a5823b4448.js @@ -0,0 +1 @@ +rn_("AQYA9CoTAAABAAEAAQABDwD0CBQAAAEAAQABAPOHAmhtAQAA9H4SAAABAAEAAQDzBAFk9CQSAAABAAEAAQAjh4SwoBO7AAGwQBJ8AAGwcBNpAAEVgAABAAGgQAAAEBllOzAAAAEAAAcAAgA+BwUAzwcBABOAArBQD9QAAWRyAQkA9UoTAAABAAEAcwABALcCAICGsCASLwABRhpAIv+6EUkB") \ No newline at end of file diff --git a/pr/561/docs/search.index/16ea9b1933a4.js b/pr/561/docs/search.index/16ea9b1933a4.js deleted file mode 100644 index dd302a4db..000000000 --- a/pr/561/docs/search.index/16ea9b1933a4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYA9H4SAAABAIkBAQATAgKwYBKAAAFmbfKMDAAAAQAjggKwQBKsAAFlbAEFAPRrEwAAAQBJAAEA8wMBY/JzEgAAAQABgQKgAAAACPugMAAAD1xzdBOAAqAQAAAHIG5404CEsHAUFgABkEAB") \ No newline at end of file diff --git a/pr/561/docs/search.index/17a463b91cd9.js b/pr/561/docs/search.index/17a463b91cd9.js deleted file mode 100644 index d93bc1b09..000000000 --- a/pr/561/docs/search.index/17a463b91cd9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYMCoJAAABOboJAAABOcMjMBgAKgUAAAE8OggAAAEuxjZfMAAnN08hIHAAABAAEAAaCwAAATNGLzwRIAACIBAQAjgAKwAA95A0dkcgEAAbCAE6EAAXDynRMAAAEAQwADoCAAABDcoEAAABIkZGVz834PAAAzAwEAE4ICoCAAABONZWnzgAJjZQEEADswAAABAAAJAAQAKwkBAB8QAwBdEAEAVRMBALOAhKCQAAAT9RABQg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/18eec5319d0e.js b/pr/561/docs/search.index/18eec5319d0e.js deleted file mode 100644 index 15b31f5ef..000000000 --- a/pr/561/docs/search.index/18eec5319d0e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkA898TAAABADUAAQ0BoKAAABQjd/ITFAAAAQABgQKwgBPtAAGgYAAAFBFkczcBAIaFoEAAABPCsGATlgBMApAK") \ No newline at end of file diff --git a/pr/561/docs/search.index/192e91b3150a.js b/pr/561/docs/search.index/192e91b3150a.js new file mode 100644 index 000000000..616f5826a --- /dev/null +++ b/pr/561/docs/search.index/192e91b3150a.js @@ -0,0 +1 @@ +rn_("AQAA9IkQAAABAIYBAQAjgQKgYAAAEq9iaQEAAPR5DwAAAQDtAAEBI4ICsFASwgABZXMBiQKwIBPWAAGgMAAAE+BpcAECAPSUEgAAAQCPAAEAAQMA9MgSAAABAJUAAQDzhQJidQECAPT1EAAAAQBtAQEA84ACaWy3AQAAhaAgAAASnBIBDDowAAABAAAAAAAUABAAAABEB9EH0gfTB9QHyQv9C/4L/wsADKEPYBAbE5oT4xPkE+YT8RPyExUUGRQBBQDzfxMAAAEAAQBDhgOwkBP7AAGgAAAAEixiZHcBgAKwAAjoAAGwIAyuA0VkbgEDAPN3DwAAAQAAAQECAPbQCwAAAQBlAwEAxQMBAAEAAPQGCQAAAQABAAEAAQAAOzAAAAEAAAYAAgD6EgAAYBMFACOBArBAE9EAAWVz84ADZXh5AQAA9AIJAAABAAEAAQBDgAOgQAAAE/mwIBKQAAFlcngBgAKgQAAADJiwQA+iAAFnbCcaAADJoJAAABLdsMATJgABoBAAABDxoDAAABN2sEAMkAABAEegCzowAAABAAAAAAAJABAAAABLBUwFlgyXDKwMcw/ND84PiBKJEgEGAPSSEgAAAQCPAAEA8wMBYvSHEAAAAQCGAQEAtwwAAImgcAAAEhqwkBLAAAGwYA/FAAGgMAAAEuY4iRM6MAAAAQAAAAAALwAQAAAAnAWdBZ4FnwUGBwcHygjLCMwI/Aj9CNUL5gujDKQMpQypDKoMqwxvD3APww/ED8gPyQ/mD+cP6A/pD+oP6w/sDwsQEBAqEC8QWhBbEMgQyRBtEvsSHxNEE9kT5RMDFBIU") \ No newline at end of file diff --git a/pr/561/docs/search.index/198ed3364ee2.js b/pr/561/docs/search.index/198ed3364ee2.js new file mode 100644 index 000000000..7f056800a --- /dev/null +++ b/pr/561/docs/search.index/198ed3364ee2.js @@ -0,0 +1 @@ +rn_("AYQCsAAQ/gABsAARAAABNDbzAAFh8igMAAABACOAArCQEQQBFWx0AYACsHATBQABsIATPAABY3MBAAA6MAAAAQAAAAAACQAQAAAAVxFYEWsSbBJVE1YTqROqExoUGxTzgAJkZScBAICFoNAAABN8sBAEoQABoDAAAA//AggL") \ No newline at end of file diff --git a/pr/561/docs/search.index/19baf510d15e.js b/pr/561/docs/search.index/19baf510d15e.js deleted file mode 100644 index 20caee6c1..000000000 --- a/pr/561/docs/search.index/19baf510d15e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoEAAABAtdPWeDAAAHwPXAgEAtgDzAAFzOzAAAAEAABgACACUBAIA3gsBAHUPAQA3EAEAdBABAF0RAQAOEwcA+xMDACOAArEQFAAAAWF0") \ No newline at end of file diff --git a/pr/561/docs/search.index/19d0359d569b.js b/pr/561/docs/search.index/19d0359d569b.js deleted file mode 100644 index 94eb07afc..000000000 --- a/pr/561/docs/search.index/19d0359d569b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBoEAAABPGZfLmEwAAAQABgAOgMAAAEhCw4BOlAAGwkBPoAAFhY22HAQCAhrAQEKgAAbAQEMgAAaCgAAAT1KDwAAAT9TFJAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/19dbb7fb56fb.js b/pr/561/docs/search.index/19dbb7fb56fb.js new file mode 100644 index 000000000..3be20f51a --- /dev/null +++ b/pr/561/docs/search.index/19dbb7fb56fb.js @@ -0,0 +1 @@ +rn_("AQgBoIAAABQWZgEEEwAAE4ACoOAAABPeYnABAwGwABOaAExz9m8PAAABAL8AKwABAOkCAYACsEASLwABoBAAABCXcHIBgQOgAAAAEQmwAA9aASCgEAAAD1Jlc3XzgANhb3IBAgD1XRAAAAEAAQBLAgEAAQQAOzAAAAEAAAkAAQDOEAkAAYECoJAAABNdsFASFwABYnejgISwUBN5AAGwkBKiAAFAIANXAwAAhqBwAAATVKBAAAATwzBBDDowAAABAAAAAAA9ABAAAACkBKUEYwVkBWUFZgVnBWgFaQVqBWsFbAVRB/UI9gj7COAL4QsDDAQMBQyQDJEMngw2DkUPRg9HD1oPeQ96D78POBBGEEcQSBBJEGcQaBB6EJ8QoBANEVoRYxFkEWgRYBKYEpkSSBNJE08TeRN6E5gTmROwExMUFBQeFB8U") \ No newline at end of file diff --git a/pr/561/docs/search.index/1a66cd07757a.js b/pr/561/docs/search.index/1a66cd07757a.js deleted file mode 100644 index bde846ae8..000000000 --- a/pr/561/docs/search.index/1a66cd07757a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBoEAAABD/ZQHADwAAAQgA9DoRAAABAAEAAQABAwGgQAAAEP5lAU8PAAABAgDz4gsAAAEAAQAjAAKwIAvTAAFrcvbGBgAAAQC5CecAAQAkAvOAAnJ4AQMBsIATwAABdjswAAABAAALAAMAkRABAEURBgAqEwIAI4ACsGAQCQC7YXIBAwGgAAAAD79z8k0PAAABACOAAqCwAAATUGVoAQMBoEAAABCQZfLkCAAAAQDXCwAAirAgBzgJh7CwEqIAAaCAAAARPqAAAAASr58ITDowAAABAAAAAAAKABAAAAD7AVwEXQReBL4LvwsjDCQMJQywEsYS") \ No newline at end of file diff --git a/pr/561/docs/search.index/1aea9ce41e66.js b/pr/561/docs/search.index/1aea9ce41e66.js new file mode 100644 index 000000000..441c647cf --- /dev/null +++ b/pr/561/docs/search.index/1aea9ce41e66.js @@ -0,0 +1 @@ +rn_("AQIA9DARAAABAAEAAQABAQDzRhEAAAEAAQATgAJZrbjoPMZlcwEKAPMuEwAAAQABAAGAArAgE6cAAaBgAAAS+292AYACoDAAABI4oAAAABK0Y2TzgIUFEAY=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1b09adfc9e65.js b/pr/561/docs/search.index/1b09adfc9e65.js new file mode 100644 index 000000000..1202f51a2 --- /dev/null +++ b/pr/561/docs/search.index/1b09adfc9e65.js @@ -0,0 +1 @@ +rn_("AQACoCAAABL+sDARYwABaXTyZxIAAAEAAQMAOzAAAAEAAAYAAQDkEAYAAQgA9GYTAAABAIIABQATAQOwkBPIAAGwUBKuAVlnbHA7MAAAAQAAEgAJAPAPAgBmEQEAnRIBAL4SAQD1EgEAVxMBAI4TAQCdEwEA2hMBAAGAArAwEV8AAbAwEWEAAXJ2AQQBsAASKQABZDswAAABAAAFAAIAWxEDAFYSAQC3BQABh7BQEisBDrBgEqwAAZQJAzowAAABAAAAAAALABAAAACJDIoMiww3DjgOixAOEQ8REBEREaQS3RIjgAKgEAAADIhubwEDAPPtDwAAAQABACOAAqAAAAALx2RyYwGEoFAAABELoDAAABAmFAEQ8mwHAAABABOAArBgEksAAWNnE4ADoLAAABOEoEAAAA42ZW9z") \ No newline at end of file diff --git a/pr/561/docs/search.index/1b2b113ba497.js b/pr/561/docs/search.index/1b2b113ba497.js deleted file mode 100644 index 4c86a3eb8..000000000 --- a/pr/561/docs/search.index/1b2b113ba497.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYAOzAAAAEAAAkAAQDKEAkAAQIAOzAAAAEAABMAAQCpDxMAE4GEoFAAABCLoBAAAAvcoCAAAAybHEAAE4ACsFAS7QABYW4zgAOwMA9RAAFpc3Q=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1b2fe59e5c8a.js b/pr/561/docs/search.index/1b2fe59e5c8a.js new file mode 100644 index 000000000..394b7c5a2 --- /dev/null +++ b/pr/561/docs/search.index/1b2fe59e5c8a.js @@ -0,0 +1 @@ +rn_("AQMBgBLtABDwczswAAABAAAFAAEAzRIFACOCAqCQAAATx2lzAQEA9JQSAAABAI8AAQAjgAKwoBN3AAFjbgGEArCgE4UAAbCgE4cAAWNyAQIAOzAAAAEAAAYAAQDmDwYAE4ICoCAAABNoZXUBAgDzRhEAAAEAAQABgAKwIBOnAAGgYAAAEvtvdmOBA6AQAAAStGFjcwEDAPSDDAAAAQABAAEAAQEA8+oIAAABAAEAAQEA9H4QAAABAJoAAQBTgAOgwAAAE9NucHUBgAKwMA+iAAGhYAAAFAdhZQGBArBAEjkAAbBAEjsAATQ2AQUBoFAAABOQaPItEgAAAQABBQD0/A8AAAEAqwABAHOAhLAwEuAAAQGgBAEIAPPcEgAACAAbABOAArBAEWsAAWFlAQoA8zMTAABoAAEAAQABoCAAABAZcgHgEAAAAQAA9DYTAAABAEsAAQCnAQCAhaAwAAAQe6AQAAAQmgkgIQEJAaBAAAATymXy6hMAAAEAQ4CEoCAAABPYoJAAABM1oTAAABPpEEkAAQIA9MgSAAABAJUAAQATgAKwQBKWAAFpeQEBAqAwAAASbaBAAAASs2dyOzAAAAEAAAcAAgB8EAEAExEFAAGAArAAE1AAAbAAE1IAATQ2AQYA9BMUAAABAAoAAQDzAgJydgF8EwAA8wIBZfQFEAAAAQCpAAEA84ACZHTnrT8AEqAwAAAQm6BAAAAMmLDwFBAAAbBwEvwAATBhYmNlZ2hpa2xub3Byc3R1djswAAABAAAHAUYAowQAAIIFAACJBQAAiwUDAJcGAAD3BgAAHAcCACwHAAA+BwUARQcAAKgHAADPBwEAzggBANQIAQDhCAAAPwkBAEMJhgC5CwEAxwsAAMsLAQDWCwAADAwAABkMAAA6DwEAYw8BAHsPAADfDwAACRABABsQAAAoEAEAbxABAHMQAwCFEAEAvBABAN4QAAD7EAIAKhEAAEIRAABlEQAAaREBAG8RAQB7EQQAGhIAACkSAQAsEgAAOBIAAEkSAQB+EgMAkhIBAJ8SAQCmEgEArBIBAK8SAACyEgAAxBIAANoSAQD5EgAABxMEACITAQA0EwAANhMBADwTAQBHEwAAghMCAIkTBAClEwEAsRMAAMQTAQDsEwEAJxQAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1b7cc07f1f34.js b/pr/561/docs/search.index/1b7cc07f1f34.js deleted file mode 100644 index 8031a5eef..000000000 --- a/pr/561/docs/search.index/1b7cc07f1f34.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYkCsCAT0gABoDAAABPcaXATAAOgIAAAEpiggAAAEqtlaXX1yQsAADQAAQABAAEAAYYCsJAT9wABoAAAABIoYmQBgAKwMBKMAAGgMAAAEHRydtcAAAKFoDAAAA/xoDAAABLiEAETOjAAAAEAAAAAAAkAEAAAAMoIywjMCPwI/QgJEA4QxBDFEGkSAQMBsDASpgABc/NIEAAAAQABAAEAADswAAABAAAKAAMA7hACACYTAwAEFAMAlwEAAIWgIAAABYmwIAfVAAFQGAH1LQwAAAEAAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/1bf00b4f0c44.js b/pr/561/docs/search.index/1bf00b4f0c44.js deleted file mode 100644 index be881b667..000000000 --- a/pr/561/docs/search.index/1bf00b4f0c44.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYMCsQAUGAABsNAUCgABa20BCgDzZxMAAAEAcAATgAKiEAAAFCNsbzMChKBgAAASBKEAAAAT2gSAAzswAAABAAA0AAIAIQcAAHQHMwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1c262f510d82.js b/pr/561/docs/search.index/1c262f510d82.js deleted file mode 100644 index a323c4011..000000000 --- a/pr/561/docs/search.index/1c262f510d82.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBoGAAABP2c/JQEQAAAQABCAD1pxMAAAEAAQABAAEAowCEsCAJPwABoIAAABJcMEAIOzAAAAEAAAUAAgDkAQAAGhAEAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1c9efdaca1bd.js b/pr/561/docs/search.index/1c9efdaca1bd.js new file mode 100644 index 000000000..e6c429992 --- /dev/null +++ b/pr/561/docs/search.index/1c9efdaca1bd.js @@ -0,0 +1 @@ +rn_("AQABsIATpQABcPKhEwAAAQBDBQOgIAAAEOCgQAAAEihkZXPzgA8AADUDAQABAgA7MAAAAQAAEwABAKsPEwATgYSgUAAAEI+gEAAAC9ygIAAADJscQAAzgAOwUBLxAAFhZm4=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1d1698203bc9.js b/pr/561/docs/search.index/1d1698203bc9.js new file mode 100644 index 000000000..d5c244605 --- /dev/null +++ b/pr/561/docs/search.index/1d1698203bc9.js @@ -0,0 +1 @@ +rn_("AQUA9AATAAABAAEAAQABAAD1LQwAAAEAAQABAAEA84ACZ2sTgAKwsBNZAAFhbwGAAqAgAAALtKBAAAAL5mV0AYUCsHATggABsDAS2AABZXMTAAOwQA9fAAGgYAAAEQxiZXM7MAAAAQAAEgAEAIMFAQCcBgoA2A8BACsQAwABAwD09A8AAAEABAABAAEKAaBAAAATymXy6hMAAAEAE4ACsGASLQABY2nzgAJkcvMAAmVvOzAAAAEAAAkAAgBuBwUAsQcDAAECAbAwENgAAW47MAAAAQAACQABAKoLCQDzgAJvdAEDADswAAABAADnAAIASAcAAMMK5gABAgGgcAAAEXhpOzAAAAEAAPkAAgBHBwAAygn4ABOAAqBAAAAL5XJ1AQQA9LcSAAABAJUAAQABAwDzRhIAAAEAqADzgAJhb9cHAACIsEAMpwABsTAT5wABNIEWOzAAAAEAAB4ADQCfBAEAXQUBAL0LAADrCwcADwwBAG0PAQBYEAEA4xAAADARAwBtEQEAIxIAAIISAQAMFAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/1d20e6ae93bd.js b/pr/561/docs/search.index/1d20e6ae93bd.js new file mode 100644 index 000000000..e5b7036fd --- /dev/null +++ b/pr/561/docs/search.index/1d20e6ae93bd.js @@ -0,0 +1 @@ +rn_("AYQCsCARBAEVoJAAABOSbXABgAKgMAAAEI+gUAAAEzhjcpcAAACFsCATBQABsMATwQABoGAAABFZEEAOOzAAAAEAABIABgCsBAgAVxEBAGsSAQBVEwEAqRMBABoUAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1d3e9e771a71.js b/pr/561/docs/search.index/1d3e9e771a71.js new file mode 100644 index 000000000..0c6f1b1a7 --- /dev/null +++ b/pr/561/docs/search.index/1d3e9e771a71.js @@ -0,0 +1 @@ +rn_("AQIA9DARAAABAAEAAQABCgDzLhMAAAEAAQDzgQJtdAEGAPPyEAAAAQABAAGCArBgErUAAbDQE80AAWlyE4ACsBAMkwABZWkBBQD0bxMAAAEASQABAPMEAWPydxIAAAEAI4ICsFASSQABZnQBAAGwABPEAAFk9LULAAABAAEAAQDzgQJlaTcGAACJsTAT6gABoGAAABDxoFAAABCEsJASiAABsEAQgQABtRAHAaQTAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1d3f2d3bd8f6.js b/pr/561/docs/search.index/1d3f2d3bd8f6.js deleted file mode 100644 index af8545e4e..000000000 --- a/pr/561/docs/search.index/1d3f2d3bd8f6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBoAAAABK2c/RXDwAA1gMBAAMAAQECsGATowABsEAT3QABZHQ7MAAAAQAADQAGAGoSAwDUEgEAQRMBAFgTAQDSEwEA9xMBAAEBA7BwEXUAAbCAEkcAAYAS6QAQ8G1uczswAAABAAALAAIAwAgFAMkSBQCjgISgsAAAEzCxcBQWAAEIQIJHAQAAhTsRR0hknbEQE6MAAbAwEp0BPxGBCDswAAABAAAGAAIA9hIAAFwTBQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1d8c8f6f3340.js b/pr/561/docs/search.index/1d8c8f6f3340.js deleted file mode 100644 index 0aad66da1..000000000 --- a/pr/561/docs/search.index/1d8c8f6f3340.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBsDASxwABY/MCEQAAAQABAAEDAYAS6QAQ8HM7MAAAAQAABQABAMkSBQAjggKgkAAAE8NpcwcBAIDFsFASkgABoKAAABMxsHAS+AABoNAAABPPgAEYCPOAAmRy") \ No newline at end of file diff --git a/pr/561/docs/search.index/1dbcf54491ae.js b/pr/561/docs/search.index/1dbcf54491ae.js deleted file mode 100644 index 032eb5f2c..000000000 --- a/pr/561/docs/search.index/1dbcf54491ae.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA9A0HAAABAAEAAQABAQGgQAAAEQVz9egLAADzBD0BAQABABOCAqAgAAAMt2VyI4ADoEAAAAvnsDAI9QABZW90AQAA9AkHAAABAAEAAQABAgD0DBMAAAEADwABABOAArBAE70AAWJ284ACb3gBCgD1RhMAAAEAAQBzAAEAAYECoCAAABB2sFASKwABYW8BBAGgAAAAE0tzAXUQAABjAwOwUBDnAAFjZXP20QgAAAEAAQAsAAEAEQkBAQD0gwwAAAEAAQABACOAArAwEqoBWXJ08wCGAcAH8uMBAADeBQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1de07b6bd5ed.js b/pr/561/docs/search.index/1de07b6bd5ed.js deleted file mode 100644 index 0b2e4a6f0..000000000 --- a/pr/561/docs/search.index/1de07b6bd5ed.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsAAPpwABsCAMEQABZWkBiQKwIBPSAAGgMAAAE9xpcBMAA6AgAAASmKCAAAASq2VpdfXJCwAANAABAAEAAQABhgKwkBP3AAGgAAAAEihiZAGAArAwEowAAaAwAAAQdHJ21wAAAIWgMAAAD/GgMAAAEuIQARM6MAAAAQAAAAAACgAQAAAAygjLCMwI/Aj9CNULCRAOEMQQxRBpEmOAA7AQCL4AAWRtdA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1dff5e6ecf7f.js b/pr/561/docs/search.index/1dff5e6ecf7f.js deleted file mode 100644 index b0cc7a764..000000000 --- a/pr/561/docs/search.index/1dff5e6ecf7f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOjAAAAEAAAAAAAoAEAAAAGsPbA9UEFUQ3xBpEWoRfhJ/EggUCRQBBADzZg8AANwAAQDzAAFx97UMAAABABkDAQDDAGIAAQDzAAJleTowAAABAAAAAAAOABAAAADYCAYMBwz8DwwQDRCdEJ4QnxBiE2MTcxN0E+UT6hM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1e93e59e94d9.js b/pr/561/docs/search.index/1e93e59e94d9.js deleted file mode 100644 index 1e17c6d75..000000000 --- a/pr/561/docs/search.index/1e93e59e94d9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBsEAT3QABdDswAAABAAANAAYAahIDANQSAQBBEwEAWBMBANITAQD3EwEAE4ACsDASnQE/aXABBQDzGBMAAAEAAQATgAKgMAAAE3FleVMAA7BwE34AAWJlcwHFDwAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/1ebad890e62e.js b/pr/561/docs/search.index/1ebad890e62e.js deleted file mode 100644 index 39b6ba28a..000000000 --- a/pr/561/docs/search.index/1ebad890e62e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEAOjAAAAEAAAAAAAgAEAAAANgI/A+dEJ4QnxBiE2MT5RPqEwECAPQyEAAAAQABAAEAE4ACoNAAABPUY3NTgAOgcAAAE89laW+DgISwIBMIAAGgIAAAD3CwAAckAAEKCAQ=") \ No newline at end of file diff --git a/pr/561/docs/search.index/1ee39b692949.js b/pr/561/docs/search.index/1ee39b692949.js deleted file mode 100644 index 0b61e66b9..000000000 --- a/pr/561/docs/search.index/1ee39b692949.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAAAYAAQDkDwYAAQMA9IMMAAABAAEAAQBjAAOgkAAAEuBocHM6MAAAAQAAAAAADgAQAAAAggWXBuEIDAwZDIEQghAlEiYSehJ7EnwSfRKoEqkS") \ No newline at end of file diff --git a/pr/561/docs/search.index/1f4450a92511.js b/pr/561/docs/search.index/1f4450a92511.js deleted file mode 100644 index e10c427e1..000000000 --- a/pr/561/docs/search.index/1f4450a92511.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAIcAAgBzEAAAfRGGAAEAAbBwEzIAAWXyZw8AAAEAIwACoEAAABOJZXP00g8AAAEAJgQBADOAA6BgAAARJmRpbw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1f56c50f0ed3.js b/pr/561/docs/search.index/1f56c50f0ed3.js new file mode 100644 index 000000000..821e60a8f --- /dev/null +++ b/pr/561/docs/search.index/1f56c50f0ed3.js @@ -0,0 +1 @@ +rn_("AYQCsAAQ/gABsAARAAABNDbzAgFh8igMAAABAAEAAPU4EgAAbgABAEUBAQDzAAFk80YSAAABAKgAY4ADoCAAAAjIYWVv") \ No newline at end of file diff --git a/pr/561/docs/search.index/1f8374f280ae.js b/pr/561/docs/search.index/1f8374f280ae.js deleted file mode 100644 index 8248652c2..000000000 --- a/pr/561/docs/search.index/1f8374f280ae.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYA9CYTAAABAAEAAQABDwD0BBQAAAEAAQABAAEAAbDwFAwAAWv2gBMAAAUAAQABAAEAJQABAgD0+g8AAAEAqQABAPcAAACFsQAT+QABiTAA8kcSAAABABOAArAQDAYAAWVvAQUAOzAAAAEAAA0AAQAYEQ0AAQIA84wPAAABAAEAAQIA9IgPAAABAAEAAQABAwA7MAAAAQAACAABADkQCAABgAKgAAAAC9ywMBPHAAFxcgGAAqBAAAAQi7DAE70AAWVzAQEAOzAAAAEAABMAAQCpDxMAI4ACsJATLQABaW13NgAAiqBQAAATjLBwE20AAaAgAAAMm5xVETswAAABAAALAAQAKAcAAGUQAwApEgEAjxMEAAECAbAwEPMAAXABEBIAALOAhKAgAAARVgIoBA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/1fa92fce3d43.js b/pr/561/docs/search.index/1fa92fce3d43.js new file mode 100644 index 000000000..e1719a5e1 --- /dev/null +++ b/pr/561/docs/search.index/1fa92fce3d43.js @@ -0,0 +1 @@ +rn_("AQIA9JQSAAABAI8AAQABAwD0yBIAAAEAlQABAPMFAmJ1OjAAAAEAAAAAAAcAEAAAAAkQChC8EL0QaRFqEZ8SoBIBAgD09RAAAAEAbQEBAAEFAPP7EAAAAQABAAEEAPQ9EgAAAQCkAAEA84CEEQkA") \ No newline at end of file diff --git a/pr/561/docs/search.index/1fac5249737c.js b/pr/561/docs/search.index/1fac5249737c.js deleted file mode 100644 index cd94d35ad..000000000 --- a/pr/561/docs/search.index/1fac5249737c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA950QAAABAAEAwwIBAIIABQABAgD0MhAAAAEAAQABABOAAqDQAAAT1GNz84ACZW8jgQKwAAckAAFsdAEAAPSLBQAAAQABAAEAU4CEoFAAABQjsKATbwABCCAF") \ No newline at end of file diff --git a/pr/561/docs/search.index/201011f148a9.js b/pr/561/docs/search.index/201011f148a9.js deleted file mode 100644 index 7f0281bf0..000000000 --- a/pr/561/docs/search.index/201011f148a9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("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") \ No newline at end of file diff --git a/pr/561/docs/search.index/20a41ecff08f.js b/pr/561/docs/search.index/20a41ecff08f.js deleted file mode 100644 index 5ef389029..000000000 --- a/pr/561/docs/search.index/20a41ecff08f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9WwSAAABAOwAeQABABOAArAwEp0BP2lwAQYA8xgTAAABAAEA8wICYnMBxQ8AAPMBAWbyOAcAAIcJAQIA9MQSAAABAJUAAQAzgAOwQBKSAAFpdXk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/20afefeb7ec4.js b/pr/561/docs/search.index/20afefeb7ec4.js deleted file mode 100644 index bb1e97cef..000000000 --- a/pr/561/docs/search.index/20afefeb7ec4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBoQAAABPhZPIyBwAABgIBBgGgMAAAEWR0ARcTAAABAwGwUBJlAAFl9OIIAAA4AwEA4wMBAQD0iwUAAAEAAQABAAEBAaEAAAAT1WTyigUAADwClwcAAIewoBJjAAGg4AAAE6wegArzQgQAAAEAAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/20da1b8e8e24.js b/pr/561/docs/search.index/20da1b8e8e24.js deleted file mode 100644 index 926b71b4d..000000000 --- a/pr/561/docs/search.index/20da1b8e8e24.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA9boQAAABAAEAAQABACOBArCQE20AAWF0Q4ADsRAT5gABoIAAABMwY290EwACsAATvQABbnL2/QEAAAEAawIBAJ4C8gs=") \ No newline at end of file diff --git a/pr/561/docs/search.index/20fbab33fc2f.js b/pr/561/docs/search.index/20fbab33fc2f.js deleted file mode 100644 index 592d56661..000000000 --- a/pr/561/docs/search.index/20fbab33fc2f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBoFAAABO/cwEPEgAAAYICsEASNQABsEASNwABNDYBCwDzLxMAAGgAAQABBgD0DxQAAAEACgABAPMCAXIBeBMAAPMDAWX0AxAAAAEApwABAPOEA2FlaWOAA6BQAAAT9mNldA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/21288f4e15ea.js b/pr/561/docs/search.index/21288f4e15ea.js new file mode 100644 index 000000000..b50133410 --- /dev/null +++ b/pr/561/docs/search.index/21288f4e15ea.js @@ -0,0 +1 @@ +rn_("AQgA9PwPAAABAKsAAQABAAGggAAAFBZm8skIAAA7CgEHAPXTEgAAAQABAAEAAQAjgAKgUAAAEONhb/MCAmZzOzAAAAEAAAgABAAfBwAAUgcFAK8MAAAbEQAAM4ADoEAAAAvGYWVv") \ No newline at end of file diff --git a/pr/561/docs/search.index/212fcae32986.js b/pr/561/docs/search.index/212fcae32986.js new file mode 100644 index 000000000..502167bdd --- /dev/null +++ b/pr/561/docs/search.index/212fcae32986.js @@ -0,0 +1 @@ +rn_("AYMCoJAAABOfoJAAABOgMjMBgAKgUAAAE8eggAAAEvBjZfMAAnN08hIHAAABAAEAAaCwAAATOGLzxRIAACIBAQAjgAKwAA97A0lkcgEAAbCAE6UAAXDyoRMAAAEAQwADoCAAABDgoEAAABIoZGVz84APAAA1AwEAE4ICoCAAABORZWnzgAJjZQEEADswAAABAAAJAAQAKwkBACEQAwBhEAEAWRMBALOAhKCQAAAT+RABQg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/224317490b71.js b/pr/561/docs/search.index/224317490b71.js new file mode 100644 index 000000000..4f816d53b --- /dev/null +++ b/pr/561/docs/search.index/224317490b71.js @@ -0,0 +1 @@ +rn_("AQQBoEAAABONZfL9EwAAAQABAQA7MAAAAQAABgABACAUBgDzBgFl9NQTAAABAC8AAQAzAwOwYBL0AIdhcnXzARAAAGQCAQAjgAKAEPsAEAFkcg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/227000c17c1b.js b/pr/561/docs/search.index/227000c17c1b.js deleted file mode 100644 index 669a76959..000000000 --- a/pr/561/docs/search.index/227000c17c1b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUBsEASMgABZfJUEgAAAQABAAA7MAAAAQAAEQAEAPABAQA5EAgAMhEDAC8SAgABCgGwQBPHAAFl9Y8TAAABAAEAAQABAEcGAACHsCAQjwIqsMAUDAABoCAAAAbQsDAHKgABGIkKOjAAAAEAAAAAAAwAEAAAACYHJwcOCdML1AvaC9sLKwwsDHYMdwyCEoMS") \ No newline at end of file diff --git a/pr/561/docs/search.index/22b3594fbe52.js b/pr/561/docs/search.index/22b3594fbe52.js new file mode 100644 index 000000000..ae7d52a3f --- /dev/null +++ b/pr/561/docs/search.index/22b3594fbe52.js @@ -0,0 +1 @@ +rn_("AQMAOzAAAAEAAD8AAgDtCAAANww+AAEFAPRGEAAAAQABAAEAE4ACsLATEAABYWwBBAD0Pg8AAAEAAQABAHMABKAQAAAP/2JwcnY7MAAAAQAABgABAOQQBgABgAKwgBCSAhOw4BN3AAFpcgEDAbBAEOEAAWUBMQ4AAAEFADswAAABAAAGAAEA5g8GAAEDAPSDDAAAAQABAAEA8wACcHM6MAAAAQAAAAAADAAQAAAAggWXBuEIDAwZDIUQhhApEioSfhJ/EoASgRJXAAAAhbBQEDgCKLBQD1sAyqBAAAARDEiAAzswAAABAAAPAAYAggQAAEMFAwBIDwAAWxEDACQSAwBWEgEA0wCEoGAAAAyVEAgG86ABAAABANcK") \ No newline at end of file diff --git a/pr/561/docs/search.index/22ed3c7158e3.js b/pr/561/docs/search.index/22ed3c7158e3.js new file mode 100644 index 000000000..4d8738ea8 --- /dev/null +++ b/pr/561/docs/search.index/22ed3c7158e3.js @@ -0,0 +1 @@ +rn_("AYMCsQAUHAABsNAUDgABa20BBAGgoAAAFCd38hcUAAABAAELAPSJEwAAAQABAAEAI4ACoIAAABOxZW9jBAOgYAAAE0dlbnAB2QsAAAEKAPNrEwAAAQBwABOAAqIQAAAUJ2xvdwAAAIWgYAAAEgihAAAAE94EgQM7MAAAAQAAOwAEAJMFBQAhBwAAdAczAAURAABDgAOwgBEEARWgAAAAAgdka3Q=") \ No newline at end of file diff --git a/pr/561/docs/search.index/22f66fe81db4.js b/pr/561/docs/search.index/22f66fe81db4.js deleted file mode 100644 index e0bef0582..000000000 --- a/pr/561/docs/search.index/22f66fe81db4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAIcAAgBFBwAAQwmGAAGEArBwE50AAaBAAAAQk2lzAQcA820QAAABAA4BI4ACoLAAABJEYXQBAAOwMAjwAAGwMBMBAAGgIAAAB0ZhZG8BBgIAADcDAICGoMAAABOVsAATaQABAJgV") \ No newline at end of file diff --git a/pr/561/docs/search.index/230d9ae0255e.js b/pr/561/docs/search.index/230d9ae0255e.js deleted file mode 100644 index 0d0dbd079..000000000 --- a/pr/561/docs/search.index/230d9ae0255e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBgBLpABDwczswAAABAAAFAAEAyRIFACOCAqCQAAATw2lzAQEA9JASAAABAI8AAQAjgAKwoBNzAAFjbgGEArCgE4EAAbCgE4MAAWNyAQIAOzAAAAEAAAYAAQDkDwYAE4ICoCAAABNkZXUBAgDzQhEAAAEAAQABgAKwIBOjAAGgYAAAEvdvdmOBA6AQAAASsGFjcwEDAPSDDAAAAQABAAEAAQEA8+oIAAABAAEAAQEA9HoQAAABAJoAAQBTgAOgwAAAE89ucHUBgAKwMA+gAAGhYAAAFANhZQGBArBAEjUAAbBAEjcAATQ2AQUBoFAAABOMaPIpEgAAAQABBQD0+g8AAAEAqQABAHOAhLAwEtwAAQGgBAEIAPPYEgAACAAbABOAArBAEWcAAWFlAQoA8y8TAABoAAEAAQABoCAAABAXcgHcEAAAAQAA9DITAAABAEsAAQCnAQCAhaAwAAAQd6AQAAAQlgkgIQEJAaBAAAATxmXy5hMAAAEAQ4CEoCAAABPUoJAAABMxoTAAABPlEEkAAQIA9MQSAAABAJUAAQATgAKwQBKSAAFpeQEBAqAwAAASaaBAAAASr2dyOzAAAAEAAAcAAgB4EAEADxEFAAGAArAAE0wAAbAAE04AATQ2AQYA9A8UAAABAAoAAQDzAgJydgF4EwAA8wIBZfQDEAAAAQCnAAEA84ACZHTnrT8AEqAwAAAQl6BAAAAMmLDwFAwAAbBwEvgAATBhYmNlZ2hpa2xub3Byc3R1djswAAABAAAHAUYAowQAAIIFAACJBQAAiwUDAJcGAAD3BgAAHAcCACwHAAA+BwUARQcAAKgHAADPBwEAzggBANQIAQDhCAAAPwkBAEMJhgC5CwEAxwsAAMsLAQDWCwAADAwAABkMAAA6DwEAYQ8BAHkPAADdDwAABxABABkQAAAmEAEAaxABAG8QAwCBEAEAuBABANoQAAD3EAIAJhEAAD4RAABhEQAAZREBAGsRAQB3EQQAFhIAACUSAQAoEgAANBIAAEUSAQB6EgMAjhIBAJsSAQCiEgEAqBIBAKsSAACuEgAAwBIAANYSAQD1EgAAAxMEAB4TAQAwEwAAMhMBADgTAQBDEwAAfhMCAIUTBAChEwEArRMAAMATAQDoEwEAIxQAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2336a65ecd2e.js b/pr/561/docs/search.index/2336a65ecd2e.js new file mode 100644 index 000000000..796eab058 --- /dev/null +++ b/pr/561/docs/search.index/2336a65ecd2e.js @@ -0,0 +1 @@ +rn_("AQUA9G8TAAABAEkAAQDzAwFj8ncSAAABACOAArBwFBoAAWhvAYICsAASVAABsAARYwABZXNDAAOgoAAAE76gIAAAEv5laXT1ZxIAAAEAhQABAPAAAYACsHASSwABoLAAABOEZW8BAgA7MAAAAQAABgABAOQQBgABAgGgQAAAE6Nl8s0TAAABAPOAAmlvAQgA9GYTAAABAIIABQATAQOwkBPIAAGwUBKuAVlnbHA7MAAAAQAAEgAJAPAPAgBmEQEAnRIBAL4SAQD1EgEAVxMBAI4TAQCdEwEA2hMBAAGAArBAEisBDqAgAAAQp2FpAYECsDATdwABsDASSQABY2kBAwGwABKYAAFzOzAAAAEAAA0AAwBhEQEAEhMHAP8TAwABAwD1XxEAAAEAHAEBAFYB84ACcnYBAAA7MAAAAQAABQACACkSAQB+EgMA8wIBZDswAAABAAAJAAMAWxEDACQSAwBWEgEAI4ACoJAAABO9aW8TgAKw8BQMAAFsbwEFAPTZEwAADAAeAA8AI4ACoGAAABLzZ3MjgAKwkBO7AAFibPcXAwCPsHAReQABsGAT7wABsHATaQABsGASrAABsFASmgABtfkXOzAAAAEAADwAGACPBQAAPAcBAMAIBQDQCAAA/ggAAMgLAAARDAEAiQwCALMMAQAyDgMANw4BAIQPBABREAEAixAAAK4QAADOEAkADBEAAA4RAwBZEQAApBIAALsSAQDNEgUA3RIAAJETAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/234f067de821.js b/pr/561/docs/search.index/234f067de821.js new file mode 100644 index 000000000..bc08c18b6 --- /dev/null +++ b/pr/561/docs/search.index/234f067de821.js @@ -0,0 +1 @@ +rn_("AYMCsCARBAEVoJAAABOSbXABggKwoBOFAAGwoBOHAAFjcgECAaBAAAARA2UBwg8AADOAhLAgEIEAAbAgD0MAAVAUAPOAAm9y") \ No newline at end of file diff --git a/pr/561/docs/search.index/23daddc85a2a.js b/pr/561/docs/search.index/23daddc85a2a.js deleted file mode 100644 index 2fb4f07a7..000000000 --- a/pr/561/docs/search.index/23daddc85a2a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoDAAAAx8aQHiEgAAAQABsDAQxgABbvIqBwAAAQABAQDzqAcAAJIHAQATAAKgUAAAEChlc/U7BAAAAQABAAEAAQABhAKwoBOBAAGwoBODAAFjcvMBAXTzYREAAOQAAQABAwGwYBPLAAFmOzAAAAEAAAYAAwDACwIA8xIBAHkTAQDzgAJhZfOAhAAoBQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2402bf28ad52.js b/pr/561/docs/search.index/2402bf28ad52.js new file mode 100644 index 000000000..1ef5fa7ab --- /dev/null +++ b/pr/561/docs/search.index/2402bf28ad52.js @@ -0,0 +1 @@ +rn_("AQAA9OcSAAABAAEAAQABBADzSw8AAAEAAQABgAKgUAAAEFegYAAAEMVpcgGAAqAgAAAMJ6BgAAAQxGVoAQEBoCAAABDDYvMjDAAAAQABABOBAqAQAAAMJmFjAQMAOzAAAAEAAAUAAgAfDAMA2BABAAEGAPSCEgAAAQCJAQEAEwACsGAShAABZm3yjAwAAAEAI4ACoMAAABNPbnKnDwAAiKBAAAAPSLBAD0kAATQgFzswAAABAAAZAAMA+gEAAEwEDgCqCwkAAYADsHATBQABsDASsAABsIATPAABY3JzAQABsCATBQABbzowAAABAAAAAAAJABAAAABXEVgRaxJsElUTVhOpE6oTGhQbFAGAArAgCPAAAbAwErsAAXJ09wQAAMigIAAAB0agYAAAD3SwgBK7AAFABpIJ9gYCAABqAssEAQAtCgEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/240436689105.js b/pr/561/docs/search.index/240436689105.js deleted file mode 100644 index a4e34eeb2..000000000 --- a/pr/561/docs/search.index/240436689105.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBsIAS1gABdfITCQAAAQAjgAKwEAkRAAEzNgECAPMjBwAA7AEBAAECAPQMCQAAAQC1BwEAAQIA8wMMAAABAAEAE4ACsBAJCgABaXUBAgA7MAAAAQAACwACADoTBQDvEwUA8wkBbTswAAABAAAMAAMA6RAAAFYSBQCvEwUAdzAAAIqgMAAAE1CgcAAAEXSgIAAACQ6wMBE4AAGgUAAAD4czhQs7MAAAAQAAJgIEAO0BAAATAisBRwcAAMoJ+AA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/25045c96f4b6.js b/pr/561/docs/search.index/25045c96f4b6.js new file mode 100644 index 000000000..47bd1a4f7 --- /dev/null +++ b/pr/561/docs/search.index/25045c96f4b6.js @@ -0,0 +1 @@ +rn_("AQEA844PAAABAAEAAQMBoEAAABONZfL9EwAAAQABAQGgIAAAEMNi8yMMAAABAAEAE4ACoBAAAAwmYWNzgISgUAAAD3QQQAw=") \ No newline at end of file diff --git a/pr/561/docs/search.index/25143dd2528f.js b/pr/561/docs/search.index/25143dd2528f.js deleted file mode 100644 index 380d928c0..000000000 --- a/pr/561/docs/search.index/25143dd2528f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYADsAATTAABsAATTgABsHATwAABNDZhAQQA9A8UAAABAAoAAQAjgQKgQAAAENptcAEBADswAAABAAAIAAMARBIAALUSAAAcFAYAxwEAAMWgQAAAD92ggAAAEh9ABoAIOzAAAAEAABYACAB7DwEAkRABANYQAwBFEQYAKhMCAHgTAADQEwEAABQBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/25a2359dd30d.js b/pr/561/docs/search.index/25a2359dd30d.js deleted file mode 100644 index 63dc01182..000000000 --- a/pr/561/docs/search.index/25a2359dd30d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9GsTAAABAEkAAQDzAwFj8nMSAAABACOAArBwFBYAAWhvAYICsAASUAABsAARXwABZXNDAAOgoAAAE7qgIAAAEvplaXTyYxIAAAEAAQIAOzAAAAEAAAYAAQDgEAYAAQIBoEAAABOfZfLJEwAAAQDzgAJpbwEIAPRiEwAAAQCCAAUAEwEDsJATxAABsFASqgFZZ2xwOzAAAAEAABIACQDuDwIAYhEBAJkSAQC6EgEA8RIBAFMTAQCKEwEAmRMBANYTAQABgAKwQBInAQ6gIAAAEKNhaQGBArAwE3MAAbAwEkUAAWNpAQMBsAASlAABczswAAABAAANAAMAXREBAA4TBwD7EwMAAQMA9VsRAAABABwBAQBWAfOAAnJ2AQAAOzAAAAEAAAUAAgAlEgEAehIDAPMCAWQ7MAAAAQAACQADAFcRAwAgEgMAUhIBACOAAqCQAAATuWlvE4ACsPAUCAABbG8BBQD01RMAAAwAHgAPACOAAqBgAAAS72dzI4ACsJATtwABYmz3xwAAjbBgE+sAAbBwE2UAAbBgEqgAAbBQEpYAAbXJFzowAAABAAAAAAAgABAAAACPBdAI/ggRDBIMiQyKDIsMMg4zDjQONQ43DjgOgg+DD4QPhQ+GD00QThCHEKoQChELEQwRDRFVEaAStxK4EtkSjRM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/25bbc9694954.js b/pr/561/docs/search.index/25bbc9694954.js new file mode 100644 index 000000000..16ac9db24 --- /dev/null +++ b/pr/561/docs/search.index/25bbc9694954.js @@ -0,0 +1 @@ +rn_("AQUA9KgSAAABAJEAAQDzAAFj9d0PAAABAL4AAQABAAEJAPPjEwAAAQA1AAENAaCgAAAUJ3fyFxQAAAEAAYECsIAT8QABoGAAABQVZHM3AQCEhaBAAAATxrBgE5oATAKQCiOAAqBwAAAQ32RyAQsBoEAAABPKZfLqEwAAAQATgAKwMA/5AAFkcvMCAWX0sQcAAAEAAQABACOAArAgC74AAWV5AQoA8zMSAAABAAEAAQsAOzAAAAEAAAcAAQASEwcAAQIA9G8TAAABAEkAAQC3AACAhbBwEmcAAbDQFAwAAWAgBgEGAPM/EgAAAQABAAEDAbBAE+EAAXTyRRMAAAEAI4UCoEAAABN1YnMjAgOgQAAAEIOgUAAAEPBhYmb31ggAAAEASAArBwEAXwABAPOAAmlwAQQA8/YPAAABAAEA8wABcDswAAABAAAMAAEAtQYMACOAA6AwAAALzbBwEyYAAWFlafOAA2RtbgEAADowAAABAAAAAAAHABAAAADhCBkMKRIqEn4SfxKAEoES8wIBZDswAAABAAAJAAMAWxEDACQSAwBWEgEAI4ACoJAAABO9aW8BgAOwMBLaAAGAExwAEAGwUBCfAAFjc3jzAAFlAasEAADnFQAAiaAAAAAMKqBAAAAMf7BADIAAAZBIXQH/AQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/260cf307291f.js b/pr/561/docs/search.index/260cf307291f.js new file mode 100644 index 000000000..db36b8ebd --- /dev/null +++ b/pr/561/docs/search.index/260cf307291f.js @@ -0,0 +1 @@ +rn_("AQUAOzAAAAEAAAcAAwBDEQIA6xIBAH8TAgABBADzRhEAAAEAAQAjAAKgYAAAEm1hcvNvEAAAAQC8AQGAAqEQAAAUA7CAE/sAAWl1NwQAgYexUBQeAAGgAAAAEFCwcBNIAAGhMAAAFBIKQBsBAAA7MAAAAQAAhgABAKoNhgABAgD2DhMAAAEAowBUABYAAQAjgQKgIAAAEI5ydvOAAmVvI4ACoCAAABINZHQBAAA7MAAAAQAA6QAEAKEFAADXB+YANgwAAPEQAADzgANkbnY=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2657ace38ed9.js b/pr/561/docs/search.index/2657ace38ed9.js deleted file mode 100644 index c0f52d63d..000000000 --- a/pr/561/docs/search.index/2657ace38ed9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkA898TAAABADUAAYADoEAAABLGsCATgQABoCAAAA9caGl5AQkBoIAAABQSZgEAEwAAAQMBsAATlgBMc/ItEAAAEwMjgAKgIAAAD1hhcgECAPVZEAAAAQABAEsCAQDzAANpdHU6MAAAAQAAAAAADgAQAAAAUQf7CJ4MvQ82EFwSlBKVEkQTRRNLE3UTdhOUE5UTAYACoDAAABPCsLATHAABYWwBDAGgoAAAFCN38hMUAAABAAEBAPN/DwAAAQABAPOAAnR1AQMA8y8SAAABAAEAAQEA9boQAAABAAEAAQABACOAArCQE20AAWF0AQQBoEAAABPGZfLmEwAAAQABAgA7MAAAAQAACwAFAN4PBQA+EgEAZxMBALkTAADYEwAAE4ICsPAUFgABZmcBgQKwgBPtAAGgYAAAFBFkcwEIAPWnEwAAAQABAAEAAQDzAgFm9RoQAAABAAEAAQABACOAA6AgAAAPVrCgE+sAAWRydHfvAQCNsBAToQABsOATowABl9UOOzAAAAEAACUBEgBnBAEAlAQCAH8FAgCSBgQAwgcDAN4LAQAKDAEAjgwBADkO9QB1DwEANxABAEgQAgB0EAEABxEAAF0RAQBPEgAADhMHAPsTAwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/26625634ad63.js b/pr/561/docs/search.index/26625634ad63.js deleted file mode 100644 index 207639749..000000000 --- a/pr/561/docs/search.index/26625634ad63.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBoAAAABNLcwF1EAAAAYACsDAQCgABsFAQDAABYWkBgAKgsAAAE9SgMAAAEKBsbhcBAACFoCAAABIOoCAAAAjHsIAToQABEJEEOjAAAAEAAAAAABEAEAAAAH4EtQS2BLcEuAS5BLoENwk+Dz8PthLwEnETdxODE4QTnROeEwECADowAAABAAAAAAAKABAAAAAgCSEJpg/aEtsSChMLE64TAhQYFBkUAQAAOzAAAAEAAAYAAgD2EgAAXBMFAAECAbAwEscAAWM6MAAAAQAAAAAAEwAQAAAApgxVD+sP7A/tD/IP8w/3D/gPihD+EAIRAxEEEXQRvBK9Ep8TxBPFEwEDAPMvEwAAaAABABOBArBAEOoAAWFlE4ACoLAAABPbYWUBAQGwQBPHAAFl9Y8TAAABAAEAAQABABOAAqAQAAALyGFvhw8AAMiwMAjYBySwQBPNAAGggAAAEglATIgJ88gHAAAGBDsAAYACoIAAABLhoJAAABK5YWsBAwDzLxIAAAEAAQAjgISxIBQWAAGgAAAACPugMAAAD1wEBAYBCAD1HhQAAAEAAQABAAEAE4oCsEAT+QABYXKTAISgwAAAErWhAAAAE4ABQAbySgcAAAEAAQMBoEAAABFuZfOwDAAA5AMBAAEFAPQmEwAAAQABAAEAU4ADsAAS3AABZXN0AQYA9AQUAAABAAEAAQDzCAFt9BsSAAABAAEAAQABAgA7MAAAAQAABQABAO8TBQDzDQFtOzAAAAEAAAUAAQCvEwUAAQQA97gMAAABAGsFDgABAIsAAQABAwGAEukAEPBzOzAAAAEAAAUAAQDJEgUAI4ICoJAAABPDaXMBBQGgUAAAE4xo8ikSAAABABOAArAwEtwAAW50AYACoIAAABL7sEARZwABYWUBgAKgEAAAEJagAAAAENxucgEJAaBAAAATxmXy5hMAAAEAI4ACoJAAABMxaWzHIwAACqAwAAAQl7BQEpIAAbDwFAwAAbBwEvgAAaDQAAATzzBiY2VoaWtub3Y7MAAAAQAAGgALAMcLAABvEAMAdxEEAPUSAAADEwMAOBMBAIATAACFEwMAoRMBAK0TAADAEwEAAQICoLAAABO5oLAAABO6Y3PzTRAAAAEAXAABAQKwUBFnAAGgwAAAE4xoafI4EwAAAQDzgAJlaQEBAaCQAAAS9XP0MhAAAAEAAQABAAEDAbAAEGkAAXMB2g8AAPOAA2hpdAEBAaBQAAASd2MBfQwAAAEFAbCAE8AAAXY7MAAAAQAABwACAEURBAAqEwIAAQEA9PoPAAABAKkAAQDjgISwcBFrAAEOCAD3ZQ8A0bCQEgcAAaBQAAAQj6EAAAAT9aCgAAATF6AQAAAHIEA/vyk7MAAAAQAAOAAYAKYEAACoBAAAcwUCAOkGAgC1CwMAgAwBAEkPAgBXDwAAfg8AAIcPAACnDwEArRAIAAURAABHEgEAUBIBAFQSAQCxEgEAzxIEACQTAQAtEwEAMRMAAKcTBAD1EwAAEhQAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/267214a93c12.js b/pr/561/docs/search.index/267214a93c12.js new file mode 100644 index 000000000..296dc9b37 --- /dev/null +++ b/pr/561/docs/search.index/267214a93c12.js @@ -0,0 +1 @@ +rn_("AQUAOzAAAAEAAPcAAgCODAEAOQ71AAEBAaAAAAASunP1pgQAALMK2AMBAAMAAQECoGAAABM4oOAAABOSZXQ7MAAAAQAACAABAKwECAABgAOwIBIJAAGwsBJCAAGwsBJEAAFiY3PzgARjbHR2") \ No newline at end of file diff --git a/pr/561/docs/search.index/26d52b96b38d.js b/pr/561/docs/search.index/26d52b96b38d.js new file mode 100644 index 000000000..dda4eac65 --- /dev/null +++ b/pr/561/docs/search.index/26d52b96b38d.js @@ -0,0 +1 @@ +rn_("AQQAOjAAAAEAAAAAAAcAEAAAAGMPZA8oECkQkhKTEiITIxMBAAD0zggAAAEAeArgACcAAACIoRAAABPfoEAAABCUsGATzwABoBAAAAw2sFATbQABsDAQ9wABsSAT7wABOcECOjAAAAEAAAAAABAAEAAAAOQI5Qj4CPkIwAvBC8ILygvNC4cMFBL3EvgSDBMNE30TfhMzgAOggAAAE3Zlb3k=") \ No newline at end of file diff --git a/pr/561/docs/search.index/26eaff1ecc2b.js b/pr/561/docs/search.index/26eaff1ecc2b.js deleted file mode 100644 index a55b2e9ef..000000000 --- a/pr/561/docs/search.index/26eaff1ecc2b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOzAAAAEAAAYAAgD2EgAAXBMFACOIArBAE80AAWVzAQQBsDASxwABY/MCEQAAAQABAAEFADswAAABAAAIAAMAcRECAG4SBACOEwAA8wMDY2Vw83kMAAABAAEAAQABsGATdQABZQGsEwAA8wIBc/byCAAAAQABAM0HPwAVAQECAaBQAAARAXIBoRAAAPOAA2ZtcA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/26fa7b86cb79.js b/pr/561/docs/search.index/26fa7b86cb79.js new file mode 100644 index 000000000..1aab216c1 --- /dev/null +++ b/pr/561/docs/search.index/26fa7b86cb79.js @@ -0,0 +1 @@ +rn_("AQABsKASRAABZTswAAABAAAJAAIAtwcHAIQSAQABAAGgIAAADJVtAV8FAAABgAKwoBJCAAGwQA9hAAFsbwEAAPR+EgAAAQABAAEA8wQBZPQkEgAAAQABAAEAIwKEsKATuwABsEASfAABsHATaQABFYAAAZETAAABAAGwgBOlAAFw8qETAAABAEMAA6AgAAAQ4KBAAAASKGRlc/OADwAANQMBAPOBAmVp1wIAAIawIBIJAAGw0BOpAAEXAQL0gwQAAAEAAQDCAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/27c5ba0e26e6.js b/pr/561/docs/search.index/27c5ba0e26e6.js new file mode 100644 index 000000000..066bf78e8 --- /dev/null +++ b/pr/561/docs/search.index/27c5ba0e26e6.js @@ -0,0 +1 @@ +rn_("AQMBoEAAABECZQFRDwAAAQIA8+ILAAABAAEAIwACsCAL0wABa3L2xgYAAAEAvQnnAAEAJALzAAJyePK+CAAAAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/280b57a12fe8.js b/pr/561/docs/search.index/280b57a12fe8.js deleted file mode 100644 index c3a679506..000000000 --- a/pr/561/docs/search.index/280b57a12fe8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYMCsQAUGAABsNAUCgABa20BCgDzZxMAAAEAcAATgAKiEAAAFCNsbzMBhKBgAAASBKEAAAAT2gSAAzswAAABAAA0AAIAIQcAAHQHMwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2892218972b3.js b/pr/561/docs/search.index/2892218972b3.js deleted file mode 100644 index 7be5a9a3f..000000000 --- a/pr/561/docs/search.index/2892218972b3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAAAcAAwA/EQIA5xIBAHsTAgABBADzQhEAAAEAAQAjAAKgYAAAEmlhcvNrEAAAAQC8AQGAAqEQAAAT/7CAE/cAAWl1NwQAgYexUBQaAAGgAAAAEEywcBNEAAGhMAAAFA4KQBsBAAA7MAAAAQAAhgABAKoNhgABAgD2ChMAAAEAowBUABYAAQAjgQKgIAAAEIpydvOAAmVvI4ACoCAAABIJZHQBAAA7MAAAAQAA6QAEAKEFAADXB+YANgwAAO0QAADzgANkbnY=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2a552ae8044e.js b/pr/561/docs/search.index/2a552ae8044e.js deleted file mode 100644 index 6c2e37553..000000000 --- a/pr/561/docs/search.index/2a552ae8044e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEAOjAAAAEAAAAAAAkAEAAAAGQPZQ9TEA4RXRJeElcT2RMKFAsUAYACsOATUQABsDATaQABZHDDgISxQBQaAAGgkAAAExcCgAk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2a67720851d1.js b/pr/561/docs/search.index/2a67720851d1.js deleted file mode 100644 index 89ca98e84..000000000 --- a/pr/561/docs/search.index/2a67720851d1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQgA9FETAAABAFMAAQABAgGgYAAAE/Zz8lARAAABAAGAArAgD6cAAaCQAAATrGFlAQcBsEATxwABZfWPEwAAAQABAAEAAQABAwGwQBPdAAF08kETAAABACOFAqBAAAATcWJzAQEA9EwRAAABAAEAAQATgAKgMAAAEH9kbDd0AACLsEATIgABoFAAABDsoJAAABMWsFASdQABoDAAAAwes5gHOzAAAAEAAF4AEQD4AQEASAQDAKAFAACYBgEAMwcBANYIAQDjCAAA7QgAAB8JAAA3DD4AiAwAAHMPAQBGEAEAYRABAKYQAQAnEQQAKxIBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2a8e4b0e890f.js b/pr/561/docs/search.index/2a8e4b0e890f.js deleted file mode 100644 index 6ec846f98..000000000 --- a/pr/561/docs/search.index/2a8e4b0e890f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9DkSAAABAKQAAQABCAD08xIAAAEAhQABADMAA7BAEsIAAWFiZTowAAABAAAAAAAJABAAAAAEBwUHnwygDFAPvg8KEAsQEhLhEg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2ad76e0ce400.js b/pr/561/docs/search.index/2ad76e0ce400.js new file mode 100644 index 000000000..e1f950fb8 --- /dev/null +++ b/pr/561/docs/search.index/2ad76e0ce400.js @@ -0,0 +1 @@ +rn_("AQABsIATVQABdAHjCAAAAQkA8z8SAAABAAEA84ACY2cBgwKgkAAAE5+gkAAAE6AyMwGAAqBQAAATx6CAAAAS8GNl8wACc3TyEgcAAAEAAQABoLAAABM4YvPFEgAAIgEBACOAAqAAAAASxGRyI4ACoFAAABORY2XzgAJpeQEGAPW+EAAAAQABAAEAAQABAQGwQBPLAAFl9ZMTAAABAAEAAQABAPcAAICFoBAAAAvIKWAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/2baa3eaa1638.js b/pr/561/docs/search.index/2baa3eaa1638.js new file mode 100644 index 000000000..ed89c9e16 --- /dev/null +++ b/pr/561/docs/search.index/2baa3eaa1638.js @@ -0,0 +1 @@ +rn_("AQMA8zMSAAABAAEAI4ECsSAUGgABY2sBBAGgQAAAEXJl87AMAADoAwEAAQAA9XMQAAABAAEAAQCDAnOAhKAwAAATowgwAQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2bbb5a542479.js b/pr/561/docs/search.index/2bbb5a542479.js new file mode 100644 index 000000000..513f10c29 --- /dev/null +++ b/pr/561/docs/search.index/2bbb5a542479.js @@ -0,0 +1 @@ +rn_("AQQBoEAAABONZfL9EwAAAQABAQA7MAAAAQAABgABACAUBgDzBgFl9NQTAAABAC8AAQAzAQOwYBL0AIdhcnXzARAAAGQCAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2bbea166f1f8.js b/pr/561/docs/search.index/2bbea166f1f8.js deleted file mode 100644 index abe4b0a17..000000000 --- a/pr/561/docs/search.index/2bbea166f1f8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoCAAAAyVbQFfBQAAAQAA9HoSAAABAAEAAQDzBAFk9CASAAABAAEAAQAjhISwoBO3AAGwQBJ4AAGwcBNlAAEVgAAzgAOw0BOlAAFhZWk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2bfe6de27ee2.js b/pr/561/docs/search.index/2bfe6de27ee2.js new file mode 100644 index 000000000..397255168 --- /dev/null +++ b/pr/561/docs/search.index/2bfe6de27ee2.js @@ -0,0 +1 @@ +rn_("AQYA9A4RAAABAAEAAQABAgA7MAAAAQAADAAFAMMLAQAREAUARBIBAKISAQC+EwAA84ACZm4BAQA7MAAAAQAACAACAC8PBgDLEgEA84ACZG4BAQDzAQcAAAEAAQABhgKgAAAAEsSgAAAAEsVkcvMBAXYB8BIAAEMAA7CAElgAAbCwE+wAAWtscjswAAABAAAMAAMA+AYIALEMAQDPDwEAAQIA9coHAAABAAEAAQABAPMAhBRBAAF2AAAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/2c1d62188edd.js b/pr/561/docs/search.index/2c1d62188edd.js new file mode 100644 index 000000000..baa575133 --- /dev/null +++ b/pr/561/docs/search.index/2c1d62188edd.js @@ -0,0 +1 @@ +rn_("AQcA9g4TAAABAKMAVAAWAAEA8wEBaQEqCQAAAQAA9S0JAAABAAEAAQABAEcBAIDGHT6edxpxoKAAABP5sGATcQABoBAAAAkBAAogig==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2c77a21c1b7e.js b/pr/561/docs/search.index/2c77a21c1b7e.js new file mode 100644 index 000000000..cd79c5172 --- /dev/null +++ b/pr/561/docs/search.index/2c77a21c1b7e.js @@ -0,0 +1 @@ +rn_("AQMBsDASywABY/MGEQAAAQABAAEDAYAS7QAQ8HM7MAAAAQAABQABAM0SBQAjggKgkAAAE8dpcwcBAIDFsFASlgABoKAAABM1sHAS/AABoNAAABPTgAEYCPOAAmRy") \ No newline at end of file diff --git a/pr/561/docs/search.index/2d92cd1657e9.js b/pr/561/docs/search.index/2d92cd1657e9.js deleted file mode 100644 index 1a0e5a44c..000000000 --- a/pr/561/docs/search.index/2d92cd1657e9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBsEAT3QABdDswAAABAAANAAYAahIDANQSAQBBEwEAWBMBANITAQD3EwEAE4ACsDASnQE/aXABBQDzGBMAAAEAAQATgAKgMAAAE3FleVMCA7BwE34AAWJlcwHFDwAAEwACoCAAAAV9Zm32ewAAALwGAQDSAQEAtAc=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2eaf4ab981c3.js b/pr/561/docs/search.index/2eaf4ab981c3.js deleted file mode 100644 index 570d27443..000000000 --- a/pr/561/docs/search.index/2eaf4ab981c3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("ARMA9R4UAAABAAEAAQABABOAAqDAAAAStWFvAQICoLAAABO5oLAAABO6Y3PzTRAAAAEAXAABgQKwUBFnAAGgwAAAE4xoafOAAmVpI4ACoLAAABL1aXQBBQGwgBPAAAF2OzAAAAEAAAcAAgBFEQQAKhMCACOAArBwEWsAAWJkdwAAAIagoAAAExegkAAAEuGwUBAKAAEF4AL16QYAAAEAAQCcCG4E") \ No newline at end of file diff --git a/pr/561/docs/search.index/2eb8b06482bc.js b/pr/561/docs/search.index/2eb8b06482bc.js new file mode 100644 index 000000000..18a565fe3 --- /dev/null +++ b/pr/561/docs/search.index/2eb8b06482bc.js @@ -0,0 +1 @@ +rn_("AQQA9DAQAAABAAEAAQABAAA6MAAAAQAAAAAACgAQAAAAbQ9uD1gQWRDjEG0RbhGCEoMSDBQNFPMBAXnydxMAAAEAAQADoKAAABO+oCAAABL+sDARYwABZWl08mcSAAABAAEDADswAAABAAAGAAEA5BAGAAEIAPRmEwAAAQCCAAUAEwEDsJATyAABsFASrgFZZ2xwOzAAAAEAABIACQDwDwIAZhEBAJ0SAQC+EgEA9RIBAFcTAQCOEwEAnRMBANoTAQABgAKwMBFfAAGwMBFhAAFydgECAbAAEikAAWQ7MAAAAQAABQACAFsRAwBWEgEAI4ECoJAAABO9aW8BBwD02RMAAAwAHgAPAHcWAAGJsFATdwABsFASKwEOsGASrAABtQkDOjAAAAEAAAAAAA4AEAAAAIkMigyLDDcOOA5REFIQixCuEA4RDxEQERERpBLdEkOAA6AgAAAMf6AQAAAMiG1ubwEDAPTtDwAAAQABABMBAYACoLAAABOQsDAS4AABbnRDAAOgIAAAEJqwUBFrAAFlaGk7MAAAAQAABgADAMcLAAB8EQMAPBMBAPOAAmRyhwsAAAqAAecAEAGAAeoAEAGgUAAAEQugUAAAE8OgMAAAEBugMAAAECYwMWNlaW9zdHV39WwHAAABAOQHwgJVAQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2eeacf2c8ee0.js b/pr/561/docs/search.index/2eeacf2c8ee0.js deleted file mode 100644 index 439deff84..000000000 --- a/pr/561/docs/search.index/2eeacf2c8ee0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYQCoCAAABCioDAAABEJaXQBAQA7MAAAAQAAhwACAEUHAABDCYYAYwADsAACCQABZGVsOjAAAAEAAAAAAAcAEAAAAJcEYAVhBWIFSQfAEAETAhM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2eeb48da148b.js b/pr/561/docs/search.index/2eeb48da148b.js new file mode 100644 index 000000000..975d99a28 --- /dev/null +++ b/pr/561/docs/search.index/2eeb48da148b.js @@ -0,0 +1 @@ +rn_("AYACoGAAABN2oKAAABNoYWkBCwD0BxMAAAEAAQABAAEEAPQrEAAAAQABAAEAI4ACsEAQhQABbHLzAANjZHMBexAAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/2f3c098b75b6.js b/pr/561/docs/search.index/2f3c098b75b6.js new file mode 100644 index 000000000..b0a79397b --- /dev/null +++ b/pr/561/docs/search.index/2f3c098b75b6.js @@ -0,0 +1 @@ +rn_("AQMBoAAAABNPcwF5EAAAAYACsDAQDAABsFAQDgABYWkBgAKgsAAAE9igMAAAEKRsbhcBAACFoCAAABISoCAAAAjHsIATpQABEJEEOjAAAAEAAAAAABMAEAAAAH4EtQS2BLcEuAS5BLoENwk+Dz8PQA9BD7oS9BJ1E3sThxOIE6ETohMBAgA6MAAAAQAAAAAACgAQAAAAIAkhCagP3hLfEg4TDxOyEwYUHBQdFAEAADswAAABAAAGAAIA+hIAAGATBQABAgGwMBLLAAFjOjAAAAEAAAAAABMAEAAAAKYMVw/tD+4P7w/0D/UP+Q/6D44QAhEGEQcRCBF4EcASwRKjE8gTyRMBAwDzMxMAAGgAAQATgQKwQBDuAAFhZROAAqCwAAAT32FlAQEBsEATywABZfWTEwAAAQABAAEAAQATgAKgEAAAC8hhb4cPAADIsDAI2AcmsEAT0QABoIAAABINQEyICfPIBwAABgQ7AAGAAqCAAAAS5aCQAAASvWFrAQMA8zMSAAABAAEAI4CEsSAUGgABoAAAAAj7oDAAAA9eBAQGAQgA9SIUAAABAAEAAQABABOKArBAE/0AAWFykwCEoMAAABK5oQAAABOEAUAG8koHAAABAAEDAaBAAAARcmXzsAwAAOgDAQABBQD0KhMAAAEAAQABAFOAA7AAEuAAAWVzdAEGAPQIFAAAAQABAAEA8wgBbfQfEgAAAQABAAEAAQIAOzAAAAEAAAUAAQDzEwUA8w0BbTswAAABAAAFAAEAsxMFAAEEAPe4DAAAAQBvBQ4AAQCLAAEAAQMBgBLtABDwczswAAABAAAFAAEAzRIFACOCAqCQAAATx2lzAQUBoFAAABOQaPItEgAAAQATgAKwMBLgAAFudAGAAqCAAAAS/7BAEWsAAWFlAYACoBAAABCaoAAAABDgbnIBCQGgQAAAE8pl8uoTAAABACOAAqCQAAATNWlsxyMAAAqgMAAAEJuwUBKWAAGw8BQQAAGwcBL8AAGg0AAAE9MwYmNlaGlrbm92OzAAAAEAABoACwDHCwAAcxADAHsRBAD5EgAABxMDADwTAQCEEwAAiRMDAKUTAQCxEwAAxBMBAAECAqCwAAATvaCwAAATvmNz81EQAAABAFwAAQECsFARawABoMAAABOQaGnyPBMAAAEA84ACZWkBAQGgkAAAEvlz9DQQAAABAAEAAQABAwGwABBtAAFzAdwPAADzgANoaXQBAQGgUAAAEntjAX0MAAABBQGwgBPEAAF2OzAAAAEAAAcAAgBJEQQALhMCAAEBAPT8DwAAAQCrAAEA44CEsHARbwABDggA92UPANGwkBILAAGgUAAAEJOhAAAAE/mgoAAAExugEAAAByBAP78pOzAAAAEAADgAGACmBAAAqAQAAHMFAgDpBgIAtQsDAIAMAQBLDwIAWQ8AAIAPAACJDwAAqQ8BALEQCAAJEQAASxIBAFQSAQBYEgEAtRIBANMSBAAoEwEAMRMBADUTAACrEwQA+RMAABYUAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/2f7ecc5dbb1a.js b/pr/561/docs/search.index/2f7ecc5dbb1a.js deleted file mode 100644 index 37e6348f3..000000000 --- a/pr/561/docs/search.index/2f7ecc5dbb1a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9cgPAAABAAEASQIBAAEEAaAAAAAQXHP1qQwAAAEAAQAbAwEAAQIA9ScRAAABAAEAAQABAAGAArBgEoIAAaAgAAAQfG95AQABoMAAABOgafTYEgAACAAbABsAAQYA9AQUAAABAAEAAQABAgD0ehAAAAEAmgABAAECAaBAAAASr3I7MAAAAQAABwACAHgQAQAPEQUA84ACYW9nAwAAhrCAEq4AWbCgEyQAAQwwBjswAAABAAAIAAMA0gsAADoRAwAbEgMA84ICZWlHAQAAhbBwEzIAAaCAAAAUEqBAAAAPfbBABPTJCAAAngYBAJgDAYECoCAAABB2sFASKwABYW8BBAGgAAAAE0tzAXUQAABjBAOwUBDnAAFjZXP20QgAAAEAAQAsAAEAEQkBAAA7MAAAAQAAJAAIABQHBwDIDwIAGBENAD8RAgATEgEAlhIBAOcSAQB7EwIAAQEA9LkLAAABALEFAQATAAOwMBO3AAGwUBKKAAFlcHL0aQ8AAAEA5wABAAEAA7BAE4MAAaFAAAAT6qBQAAARYWJjZgHeBgAA44CEsUAUDwABAjAQAQGEoLAAABNAsEAQNwABsMATbwABoGAAABEOFCAE9sUGAAAPCQEAMQEhAQ4BAQMAOzAAAAEAAAUAAQBJEgUAAQABoKAAABOscvRzDwAAAQDtAAEA84ECZ3MBBwD1zxIAAAEAAQABAAEAAYACoEAAABDfsFAQxgABY2nzgAJhbwEAAaAgAAAQ/3Lz5wsAAFkDYAFDgISgAAAAE4mgMAAAE4mABU0AHLsIICEBAwKwQBKMAAGgMAAAEuJld/IOEAAAtwATgwKgcAAAExtnbwECAPVsEgAAAQDsAHkAAQATgAKwMBKdAT9pcAEGAPMYEwAAAQABAPMFAmJzAcUPAAABAgD0og8AAAEAAQABACOAAqBgAAASD2Jj978AAIygkAAAEhA7yRo6MAAAAQAAAAAAFwAQAAAA/AEJAgoCZARlBGYE5gYfB1IHUwdUB1UHVgdXB7QLJwyvDMAP0g/TD5YQFxH5E/oT") \ No newline at end of file diff --git a/pr/561/docs/search.index/2f9a8770ad6f.js b/pr/561/docs/search.index/2f9a8770ad6f.js new file mode 100644 index 000000000..394e4f5eb --- /dev/null +++ b/pr/561/docs/search.index/2f9a8770ad6f.js @@ -0,0 +1 @@ +rn_("AYACoAAAABAXoAAAABAYNDYBgAOwABNQAAGwABNSAAGwcBPEAAE0NmEBBAD0ExQAAAEACgABACOBAqBAAAAQ3m1wAQEAOzAAAAEAAAgAAwBIEgAAuRIAACAUBgDHAQACxaBAAAAP36CAAAASI0AGgAg7MAAAAQAAFgAIAH0PAQCVEAEA2hADAEkRBgAuEwIAfBMAANQTAQAEFAEA8wACZXY6MAAAAQAAAAAAEgAQAAAABAIFAogFrQw8Dz0PWA9yDwUQBhCvELAQORI6EjsSPBIzE5sTnBMBgQKwcBDaAAGwcBDcAAE0NiOAArAQBzMAAW5wAQMCsEASkAABoDAAABLmZXf0CxAAAAUAuAABABOBAqBwAAATH2dvAQQAOzAAAAEAAAYAAgC8CwAAuwwFAGOAA7BQD30AAWRzdFcBAACFoBAAAA/fsSAT1AABESEBOzAAAAEAAAoAAwB0AAAAjQAFAFARAwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3036a9249b54.js b/pr/561/docs/search.index/3036a9249b54.js deleted file mode 100644 index 8f9354bf5..000000000 --- a/pr/561/docs/search.index/3036a9249b54.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEAOzAAAAEAAAYAAQDgEAYAAQAA9+4IAAABABIHAQBrAAEADgEBggKgIAAAEKKgMAAAEQlpdPOAA2FncwEBAaBAAAATn2XyyRMAAAEAI4ACsFATVQABZnPzgAJpbw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3180f3a703c8.js b/pr/561/docs/search.index/3180f3a703c8.js new file mode 100644 index 000000000..5b4a575ce --- /dev/null +++ b/pr/561/docs/search.index/3180f3a703c8.js @@ -0,0 +1 @@ +rn_("AQABoDAAAAx8aQHmEgAAAQABsDAQygABbvIqBwAAAQABAQDzqAcAAJIHAQATAAKgUAAAECplc/U7BAAAAQABAAEAAQABhAKwoBOFAAGwoBOHAAFjcvMBAXTzZREAAOQAAQABAwGwYBPPAAFmOzAAAAEAAAYAAwDACwIA9xIBAH0TAQDzgAJhZfOAhAAoBQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/318665e15f34.js b/pr/561/docs/search.index/318665e15f34.js new file mode 100644 index 000000000..4c82ce583 --- /dev/null +++ b/pr/561/docs/search.index/318665e15f34.js @@ -0,0 +1 @@ +rn_("AQUA9coPAAABAAEASwIBAAEEAaAAAAAQYHP1qQwAAAEAAQAdAwEAAQIA9SsRAAABAAEAAQABAAGAArBgEoYAAaAgAAAQgG95AQABoMAAABOkafTcEgAACAAbABsAAQYA9AgUAAABAAEAAQABAgD0fhAAAAEAmgABAAECAaBAAAASs3I7MAAAAQAABwACAHwQAQATEQUA84ACYW9nAwAAhrCAErIAWbCgEygAAQwwBjswAAABAAAIAAMA0gsAAD4RAwAfEgMA84ICZWlHAQAAhbBwEzYAAaCAAAAUFqBAAAAPf7BABPTJCAAAoAYBAJoDAYECoCAAABB6sFASLwABYW8BBAGgAAAAE09zAXkQAABjBAOwUBDrAAFjZXP20QgAAAEAAQAsAAEAFQkBAAA7MAAAAQAAJAAIABQHBwDKDwIAHBENAEMRAgAXEgEAmhIBAOsSAQB/EwIAAQEA9LkLAAABALUFAQATAAOwMBO7AAGwUBKOAAFlcHL0aw8AAAEA6QABAAEAA7BAE4cAAaFAAAAT7qBQAAARZWJjZgHeBgAA44CEsUAUEwABAjAQAQGEoLAAABNEsEAQOQABsMATcwABoGAAABESFCAE9sUGAAARCQEAMwEhAQ4BAQMAOzAAAAEAAAUAAQBNEgUAAQABoKAAABOwcvR1DwAAAQDvAAEA84ECZ3MBBwD10xIAAAEAAQABAAEAAYACoEAAABDjsFAQygABY2nzgAJhbwEAAaAgAAARA3Lz5wsAAFsDYgFDgISgAAAAE42gMAAAE42ABU0AHL8IICEBAwKwQBKQAAGgMAAAEuZld/IQEAAAuQATgwKgcAAAEx9nbwECAPVwEgAAAQDsAHkAAQATgAKwMBKhAT9pcAEGAPMcEwAAAQABAPMFAmJzAccPAAABAgD0pA8AAAEAAQABACOAAqBgAAASE2Jj978AAIygkAAAEhQ7yRo6MAAAAQAAAAAAFwAQAAAA/AEJAgoCZARlBGYE5gYfB1IHUwdUB1UHVgdXB7QLJwyvDMIP1A/VD5oQGxH9E/4T") \ No newline at end of file diff --git a/pr/561/docs/search.index/318a89235d98.js b/pr/561/docs/search.index/318a89235d98.js new file mode 100644 index 000000000..7330af95d --- /dev/null +++ b/pr/561/docs/search.index/318a89235d98.js @@ -0,0 +1 @@ +rn_("AQEA9coHAAABAAEAAQABAAEAAqAwAAAQm6CQAAAS/zBo9XsRAACMAQEAAQABABOAAqAwAAAPV2RyIwKEsBAIxgMksCALuwD/oDAAAA98EgAY9XYFAAAuAAEAAQABADOAhLCgEkIAAbBAD2EAARBJAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/31b45cf6ecff.js b/pr/561/docs/search.index/31b45cf6ecff.js deleted file mode 100644 index f81d2dbe0..000000000 --- a/pr/561/docs/search.index/31b45cf6ecff.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA9coHAAABAAEAAQABAAEAAqAwAAAQl6CQAAAS+zBo9XcRAACMAQEAAQABABOAAqAwAAAPVWRyIwKEsBAIxgMksCALuwD/oDAAAA96EgAY9XYFAAAuAAEAAQABADOAhLCgEj4AAbBAD18AARBJAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/320b0f4af278.js b/pr/561/docs/search.index/320b0f4af278.js deleted file mode 100644 index 439a4a533..000000000 --- a/pr/561/docs/search.index/320b0f4af278.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQA9rUMAAABABkDAQAlAQEAAQoA80ISAAABAKgAAQEA9+4IAAABABIHAQBrAAEADgEjgAKwYBNVAAFpbwECAPR2DAAAAQALBgEAAQUA9GsTAAABAEkAAQD3CAAAiLCQEyQAAaAgAAAMeLCQEW8AAQTcAzowAAABAAAAAAAIABAAAABvBd8I4AgWDBcMfRB+EHMSdBI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/321190b83abb.js b/pr/561/docs/search.index/321190b83abb.js deleted file mode 100644 index 9d8fdf7f6..000000000 --- a/pr/561/docs/search.index/321190b83abb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9IUQAAABAIYBAQAjgQKgYAAAEqtiaQEAAPR3DwAAAQDrAAEBI4ICsFASvgABZXMBiQKwIBPSAAGgMAAAE9xpcAECAPSQEgAAAQCPAAEAAQMA9MQSAAABAJUAAQDzhQJidQECAPTxEAAAAQBtAQEA84ACaWy3AQAAhaAgAAASmBIBDDowAAABAAAAAAAUABAAAABEB9EH0gfTB9QHyQv9C/4L/wsADJ8PXBAXE5YT3xPgE+IT7RPuExEUFRQBBQDzexMAAAEAAQBDhgOwkBP3AAGgAAAAEihiZHcBgAKwAAjoAAGwIAyuA0NkbgEDAPN1DwAAAQD+AAECAPbQCwAAAQBlAwEAwQMBAAEAAPQGCQAAAQABAAEAAQAAOzAAAAEAAAYAAgD2EgAAXBMFACOBArBAE80AAWVz84ADZXh5AQAA9AIJAAABAAEAAQBDgAOgQAAAE/WwIBKMAAFlcngBgAKgQAAADJiwQA+gAAFnbCcaAADJoJAAABLZsMATIgABoBAAABDtoDAAABNysEAMkAABAEegCzowAAABAAAAAAAJABAAAABLBUwFlgyXDKwMcQ/LD8wPhBKFEgEGAPSOEgAAAQCPAAEA8wMBYvSDEAAAAQCGAQEAtwwAAImgcAAAEhawkBK8AAGwYA/DAAGgMAAAEuI4iRM6MAAAAQAAAAAALwAQAAAAnAWdBZ4FnwUGBwcHygjLCMwI/Aj9CNUL5gujDKQMpQypDKoMqwxtD24PwQ/CD8YPxw/kD+UP5g/nD+gP6Q/qDwkQDhAoEC0QVhBXEMQQxRBpEvcSGxNAE9UT4RP/Ew4U") \ No newline at end of file diff --git a/pr/561/docs/search.index/3289f09b047b.js b/pr/561/docs/search.index/3289f09b047b.js deleted file mode 100644 index 286cebe8e..000000000 --- a/pr/561/docs/search.index/3289f09b047b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYICoFAAABJPoQAAABP2Y3QjAAKwQA9aAAFldTswAAABAAA3ABYAmgYBAMMLAQChDAEAXw8BAN4PBQAPEAUAiBABAOcQAQBxEQIAPhIDAG4SBACeEgEApBIBALMSAQA2EwEASRMBAGcTAQBrEwEAjhMAALUTAQC5EwEA2BMAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3292df3c6451.js b/pr/561/docs/search.index/3292df3c6451.js new file mode 100644 index 000000000..e855e87fe --- /dev/null +++ b/pr/561/docs/search.index/3292df3c6451.js @@ -0,0 +1 @@ +rn_("AQsA9NkTAAAMAB4ADwABCgA6MAAAAQAAAAAABwAQAAAAvhK/ElcTWBOOE48T2hPbE/OBAm90EwCEsCASsgBZsDAQygABoFAAABCxEDACOzAAAAEAAAgABAB9AAEAqAADACoHAQA9CQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/33739f552f9f.js b/pr/561/docs/search.index/33739f552f9f.js new file mode 100644 index 000000000..6e8faaa77 --- /dev/null +++ b/pr/561/docs/search.index/33739f552f9f.js @@ -0,0 +1 @@ +rn_("AYECoBAAABK0oHAAABL7YWMBhwKwABNQAAGwABNSAAE0NlMAhKCQAAAS3LCwE3cAAYEACfX3BgAANQDvCA8BGAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3381b6452880.js b/pr/561/docs/search.index/3381b6452880.js deleted file mode 100644 index 041ac6cbe..000000000 --- a/pr/561/docs/search.index/3381b6452880.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBsEATIgABZfKYBgAAAQABBADz9A8AAAEAAQBDAAOwQBKIAAGxABNnAAFlZnA7MAAAAQAAJAAGAAgCAACnBgwAtQYMAC8PBgCLEAAAxxIBAGOAA7AwC8oAA2FlaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/33ca221b1af1.js b/pr/561/docs/search.index/33ca221b1af1.js new file mode 100644 index 000000000..de0bbe095 --- /dev/null +++ b/pr/561/docs/search.index/33ca221b1af1.js @@ -0,0 +1 @@ +rn_("AQAA9OcSAAABAAEAAQATAgKwgBK7AAFzdvQ7CQAAAQAtCgEA8wABYwEYDAAAAQICoLAAABO9oLAAABO+Y3PzURAAAAEAXAABgQKwUBFrAAGgwAAAE5BoafOCAmVp84ACZW8=") \ No newline at end of file diff --git a/pr/561/docs/search.index/342a647c77a6.js b/pr/561/docs/search.index/342a647c77a6.js deleted file mode 100644 index 7baa88421..000000000 --- a/pr/561/docs/search.index/342a647c77a6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9psQAAABAHMDAQAKAAEAAQAAOzAAAAEAAAYAAgD2EgAAXBMFACOIArBAE80AAWVzAQ0BsEATxwABZfWPEwAAAQABAAEAAQABBQA7MAAAAQAACAADAHERAgBuEgQAjhMAANcBAACFHYyPbzNAFIQC83kMAAABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/355e9ccc3e7d.js b/pr/561/docs/search.index/355e9ccc3e7d.js deleted file mode 100644 index bc1b1f5c1..000000000 --- a/pr/561/docs/search.index/355e9ccc3e7d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQcA9goTAAABAKMAVAAWAAEA8wEBaQEqCQAAAQAA9S0JAAABAAEAAQABAEcBAIDGP4ZFwA18oKAAABP1sGATbQABoBAAAAkBAAogig==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3580644ae6d8.js b/pr/561/docs/search.index/3580644ae6d8.js deleted file mode 100644 index d9bc29d48..000000000 --- a/pr/561/docs/search.index/3580644ae6d8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBoDAAAA/8YQEJDAAAAYECoCAAABB2sFASKwABYW8BAwGgAAAAE0tzAXUQAAAjgAKgAAAAB8hydmMAA7BQEOcAAWNlczswAAABAAAIAAQA0QgCAP8IAQD0DwIAERIAAAcBAICFsFAQpgABoKAAABMWsPATLQABsCAPOAABRCEE84ACbnQ=") \ No newline at end of file diff --git a/pr/561/docs/search.index/363a976ef634.js b/pr/561/docs/search.index/363a976ef634.js new file mode 100644 index 000000000..40345700f --- /dev/null +++ b/pr/561/docs/search.index/363a976ef634.js @@ -0,0 +1 @@ +rn_("AQEBoEAAABEJc/XoCwAA9wQ9AQEAAQATggKgIAAADLdlcgECAPR1DwAAAQDvAAEAI4ECoBAAAAvnZWkTgAKg8AAAE5FucjMAA7AwCPUAAWVvdAFWEQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/3650ebdc9bae.js b/pr/561/docs/search.index/3650ebdc9bae.js deleted file mode 100644 index 5f74a8cc9..000000000 --- a/pr/561/docs/search.index/3650ebdc9bae.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEAOjAAAAEAAAAAAAcAEAAAALoSuxJTE1QTihOLE9YT1xPzBgFpAdkSAAAjgAKwUBKuAFlmbgEAAbBAEogAAWU7MAAAAQAADQACAKcGDACLEAAAI4ACoDAAAAvKYWU3AACAxbBQEwEAAbAQE6MAAbBgEwgAAQACmAg=") \ No newline at end of file diff --git a/pr/561/docs/search.index/36590b411474.js b/pr/561/docs/search.index/36590b411474.js deleted file mode 100644 index 9e676b0c4..000000000 --- a/pr/561/docs/search.index/36590b411474.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYQCsCARAAEVoJAAABOObXABgAKgMAAAEIugUAAAEzRjcpcAAACFsCATAQABsMATvQABoGAAABFVEEAOOzAAAAEAABIABgCsBAgAUxEBAGcSAQBREwEApRMBABYUAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/368640dd3a84.js b/pr/561/docs/search.index/368640dd3a84.js deleted file mode 100644 index adaf64363..000000000 --- a/pr/561/docs/search.index/368640dd3a84.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9C4QAAABAAEAAQDzAgFz9RUJAAABAAEAAQBEBgEGAPR4EQAAAQABAAEAAQQBoEAAABOJZfL5EwAAAQABAQA7MAAAAQAABgABABwUBgDzBgFl9NATAAABAC8AAQAzBgOwYBLwAIdhcnXz/w8AAGICAQDzgAJhZQEDAPQyEQAAAQABAAEAAQIA9FEPAAABAC8EAQABggKgEAAAEsawQBJnAAFhcwGAA7AAB0oAAaAAAAALzrBwEAwAAW5yc+cHAACHoHAAABF3kQVBOjAAAAEAAAAAAAwAEAAAANkB2gHbAdwBTAe1B7YHHgkIDIwPjQ+OD5cQ") \ No newline at end of file diff --git a/pr/561/docs/search.index/37a726d5cdeb.js b/pr/561/docs/search.index/37a726d5cdeb.js new file mode 100644 index 000000000..92241cf83 --- /dev/null +++ b/pr/561/docs/search.index/37a726d5cdeb.js @@ -0,0 +1 @@ +rn_("AQIBoDAAAA/+YQEJDAAAAYECoCAAABB6sFASLwABYW8BAwGgAAAAE09zAXkQAAAjgAKgAAAAB8hydmMAA7BQEOsAAWNlczswAAABAAAIAAQA0QgCAP8IAQD2DwIAFRIAAAcBAICFsFAQqgABoKAAABMasPATMQABsCAPOAABRCEE84ACbnQ=") \ No newline at end of file diff --git a/pr/561/docs/search.index/37a9ccbd1bf4.js b/pr/561/docs/search.index/37a9ccbd1bf4.js new file mode 100644 index 000000000..924751497 --- /dev/null +++ b/pr/561/docs/search.index/37a9ccbd1bf4.js @@ -0,0 +1 @@ +rn_("AYACoCAAAA9aoDAAABNEYXLzAAF0AVEHAAABBAGgQAAAE8pl8uoTAAABAAEFADswAAABAAALAAUA4A8FAEISAQBrEwEAvRMAANwTAADjAISgMAAAD1iFAAI7MAAAAQAACwAFAH8FAgCSBgQACgwBAAsRAABTEgAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/37ae2f2cc265.js b/pr/561/docs/search.index/37ae2f2cc265.js deleted file mode 100644 index 7e096b382..000000000 --- a/pr/561/docs/search.index/37ae2f2cc265.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYECsDAPwwABsBATJAABc3QBAwDzOxIAAAEAAQAjgAKwABE4AAFoaQEAADswAAABAAATAAEAWAcTACOAAqAwAAAMh2Fl84ACcnTzAAJhbDswAAABAAAoAAMAlAATAJ8BAACpDxMA") \ No newline at end of file diff --git a/pr/561/docs/search.index/386568ad30d5.js b/pr/561/docs/search.index/386568ad30d5.js new file mode 100644 index 000000000..3a5a2f2ad --- /dev/null +++ b/pr/561/docs/search.index/386568ad30d5.js @@ -0,0 +1 @@ +rn_("AYACsHARVwABsCAPcQDraHkBBQD0sQwAAAEAHQMBAAEAAPQTDAAAAQABAGoAAQIAOjAAAAEAAAAAAAkAEAAAAGYPZw9XEBIRYRJiElsT3RMOFA8UAQMA8+oIAAABAAEA1wMAAIagQAAAEXIYQAc6MAAAAQAAAAAAFwAQAAAAOgc7B8kH9wgrCSwJsAxTD1QPdA8aECEQIhAjECQQYRBiEJgQmRAIElkTWhOFE4YT") \ No newline at end of file diff --git a/pr/561/docs/search.index/3874f15e7771.js b/pr/561/docs/search.index/3874f15e7771.js deleted file mode 100644 index 2592ec0a1..000000000 --- a/pr/561/docs/search.index/3874f15e7771.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMA9qwMAADFAloAAQC4AgEAAQQAOzAAAAEAAAoABAAPEAUAQBIBAJ4SAQC6EwAAAYYCoAAAABLAoAAAABLBZHLzAgF2AewSAADzgAJlbycBAADHoDAAAA9woHAAABIRoIAAABONoNAAABMwoLAAABONQEUICTswAAABAAAJAAMAmQUCAPIGBAANDAEAI4ACU5KIn+d+ZHIBAAA6MAAAAQAAAAAACgAQAAAAIAkhCaYP2hLbEgoTCxOuEwIUGBQZFBOAAqAwAAAQJWx0w4AEoAAAABAVoAAAABAWNDZhZQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/38b236771a65.js b/pr/561/docs/search.index/38b236771a65.js deleted file mode 100644 index 9354b1f19..000000000 --- a/pr/561/docs/search.index/38b236771a65.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQA9NUTAAAMAB4ADwABAgGwQBItAAFlAVQPAAABgAKgkAAAE5ugkAAAE5wyM5cCAADGoCAAAAwnoGAAABDAsGAMswABAWQAAzswAAABAAAKAAMA7AYFAPMLAADjEgMA") \ No newline at end of file diff --git a/pr/561/docs/search.index/38e853561a8a.js b/pr/561/docs/search.index/38e853561a8a.js deleted file mode 100644 index a52df7590..000000000 --- a/pr/561/docs/search.index/38e853561a8a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBsEATxwABZfWPEwAAAQABAAEAAQABAgA7MAAAAQAACwACADoTBQDvEwUA8wEBbTswAAABAAANAAQAfgwAAOkQAABWEgUArxMFAPMBAWXydREAAAEAM4CEsBAQDAABoCAAAAvOFEAE") \ No newline at end of file diff --git a/pr/561/docs/search.index/399903f0d770.js b/pr/561/docs/search.index/399903f0d770.js new file mode 100644 index 000000000..6077ea8b7 --- /dev/null +++ b/pr/561/docs/search.index/399903f0d770.js @@ -0,0 +1 @@ +rn_("AYACsIASeQABsKAS8QABaXQBgAKw4BPnAAGwQA/aAAFscgEGAPRpEAAAAQABAAEARwUAAIeg0AAAE8OwUA/YAAGgAAAAEvOw8BOhAAEFkQPyfA8AAKoA") \ No newline at end of file diff --git a/pr/561/docs/search.index/39a52dda198c.js b/pr/561/docs/search.index/39a52dda198c.js deleted file mode 100644 index 9ec0123fc..000000000 --- a/pr/561/docs/search.index/39a52dda198c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBsEATxwABZfWPEwAAAQABAAEAAQABAgA7MAAAAQAACwACADoTBQDvEwUA8wMBbTswAAABAAANAAQAfgwAAOkQAABWEgUArxMFAPOAAmNl") \ No newline at end of file diff --git a/pr/561/docs/search.index/3a0723146c92.js b/pr/561/docs/search.index/3a0723146c92.js deleted file mode 100644 index 62b7bb9f1..000000000 --- a/pr/561/docs/search.index/3a0723146c92.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYMCsCARAAEVoJAAABOObXABggKwoBOBAAGwoBODAAFjcgECAaBAAAAQ/2UBwA8AADOAhLAgEH0AAbAgD0EAAVAUAPOAAm9y") \ No newline at end of file diff --git a/pr/561/docs/search.index/3a553e47a07e.js b/pr/561/docs/search.index/3a553e47a07e.js new file mode 100644 index 000000000..bca010f13 --- /dev/null +++ b/pr/561/docs/search.index/3a553e47a07e.js @@ -0,0 +1 @@ +rn_("AQACoDAAABCboJAAABL/MGj1exEAAIwBAQABAAEAE4ACoDAAAA9XZHIjAISwEAjGAySwIAu7AP+gMAAAD3wSABj1dgUAAC4AAQABAAEAAQIA9BMUAAABAAoAAQABAgDz9g8AAAEAAQDzgAJpcgEBArBAEOEAAaBQAAAS5WVz9DEOAADGAgEAfgIBCwD2DhMAAAEAowBUABYAAQDzgAJsdNOAhKCQAAASvQFEBA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3b114748649d.js b/pr/561/docs/search.index/3b114748649d.js deleted file mode 100644 index f8c1badf1..000000000 --- a/pr/561/docs/search.index/3b114748649d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBoEAAABOJZfL5EwAAAQABAQA7MAAAAQAABgABABwUBgDzBgFl9NATAAABAC8AAQAzAQOwYBLwAIdhcnXz/w8AAGICAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3b4e28ed9312.js b/pr/561/docs/search.index/3b4e28ed9312.js deleted file mode 100644 index fbfe67c34..000000000 --- a/pr/561/docs/search.index/3b4e28ed9312.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsIASdQABsKAS7QABaXQBgAKw4BPjAAGwQA/YAAFscgEGAPRlEAAAAQABAAEARwUAAIeg0AAAE7+wUA/WAAGgAAAAEu+w8BOdAAEFkQPyeg8AAKoA") \ No newline at end of file diff --git a/pr/561/docs/search.index/3c0f5abd09f3.js b/pr/561/docs/search.index/3c0f5abd09f3.js deleted file mode 100644 index dc41dcf6f..000000000 --- a/pr/561/docs/search.index/3c0f5abd09f3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9A0HAAABAAEAAQABhQKwcBN+AAGwMBLUAAFlcxMAA7BAD10AAaBgAAARCGJlczswAAABAAASAAQAgwUBAJwGCgDWDwEAKRADAAECAPOPBQAA8wkBAAEDAPVVDwAAnQABAAQAAQABCgGgQAAAE8Zl8uYTAAABACMABKAwAAAQl6CQAAAS+7BgEikAATBjaGn1dxEAAIwBAQABAAEA84ACZHLnBAAAh7AQCMYDJLAgC7sA/6AwAAAPehJBODswAAABAAASAAYAhQACAHYFAACkBQMAbgcFALEHAwDGCwAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/3c695315dd8f.js b/pr/561/docs/search.index/3c695315dd8f.js new file mode 100644 index 000000000..2c301cf10 --- /dev/null +++ b/pr/561/docs/search.index/3c695315dd8f.js @@ -0,0 +1 @@ +rn_("AQUA9D0SAAABAKQAAQABCAD09xIAAAEAhQABADMBA7BAEsYAAWFiZTowAAABAAAAAAAJABAAAAAEBwUHnwygDFIPwA8MEA0QFhLlEgEAADswAAABAAAfAA4ApAQBAGMFCQD1CAEA4AsBAJAMAQA2DgAARQ8CAFoPAAB5DwEAZxABAHoQAAANEQAAYxEBAGgRAAABgQKwABD+AAGwABEAAAE0NiOAArCAE+8AAW9wAQABsEASwgABZfMJEQAASwEBALcBAICFoGAAABClEAEL") \ No newline at end of file diff --git a/pr/561/docs/search.index/3c8cfd8085a9.js b/pr/561/docs/search.index/3c8cfd8085a9.js new file mode 100644 index 000000000..a0f8fb57d --- /dev/null +++ b/pr/561/docs/search.index/3c8cfd8085a9.js @@ -0,0 +1 @@ +rn_("AQMBsEAQ4QABZQExDgAAAQUAOzAAAAEAAAYAAQDmDwYAAQMA9IMMAAABAAEAAQDzAAJwczowAAABAAAAAAAMABAAAACCBZcG4QgMDBkMhRCGECkSKhJ+En8SgBKBEjMAA7BQD1sAymRwcjswAAABAAAPAAYAggQAAEMFAwBIDwAAWxEDACQSAwBWEgEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/3c8f419d6519.js b/pr/561/docs/search.index/3c8f419d6519.js deleted file mode 100644 index 69ea2bae2..000000000 --- a/pr/561/docs/search.index/3c8f419d6519.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQACoCAAABL6sDARXwABaXTyYxIAAAEAAQMAOzAAAAEAAAYAAQDgEAYAAQgA9GITAAABAIIABQATAQOwkBPEAAGwUBKqAVlnbHA7MAAAAQAAEgAJAO4PAgBiEQEAmRIBALoSAQDxEgEAUxMBAIoTAQCZEwEA1hMBAAGAArAwEVsAAbAwEV0AAXJ2AQQBsAASJQABZDswAAABAAAFAAIAVxEDAFISAQC3BQABh7BQEicBDrBgEqgAAZQJAzowAAABAAAAAAALABAAAACJDIoMiww3DjgOhxAKEQsRDBENEaAS2RIjgAKgEAAADIhubwEDAPPrDwAAAQABACOAAqAAAAALx2RyYwGEoFAAABEHoDAAABAkFAEQ8mwHAAABABOAA7BgEkcAAbAADzgAAWNnchOAA6CwAAATgKBAAAAONmVvcw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3ca8a83bf993.js b/pr/561/docs/search.index/3ca8a83bf993.js new file mode 100644 index 000000000..907c90fe4 --- /dev/null +++ b/pr/561/docs/search.index/3ca8a83bf993.js @@ -0,0 +1 @@ +rn_("AQEAOzAAAAEAAAYAAQDkEAYAAQAA9+4IAAABABQHAQBtAAEADgEBggKgIAAAEKagMAAAEQ1pdPOAA2FncwEBAaBAAAATo2XyzRMAAAEAI4ACsFATWQABZnPzgAJpbw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3ccd0c7a2788.js b/pr/561/docs/search.index/3ccd0c7a2788.js deleted file mode 100644 index 37bd94be5..000000000 --- a/pr/561/docs/search.index/3ccd0c7a2788.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQAOjAAAAEAAAAAAAcAEAAAAGEPYg8mECcQjhKPEh4THxMBAAD0zggAAAEAdArgACcAAACIoRAAABPboEAAABCQsGATywABoBAAAAw2sFATaQABsDAQ8wABsSAT6wABOcECOjAAAAEAAAAAABAAEAAAAOQI5Qj4CPkIwAvBC8ILygvNC4cMEBLzEvQSCBMJE3kTehMzgAOggAAAE3Jlb3k=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3cdc21a06932.js b/pr/561/docs/search.index/3cdc21a06932.js new file mode 100644 index 000000000..bf6f47b0f --- /dev/null +++ b/pr/561/docs/search.index/3cdc21a06932.js @@ -0,0 +1 @@ +rn_("AQQBsAASmAABczswAAABAAALAAIAEhMHAP8TAwBHAAAFhqCAAAAS87EAFAwAAbBAElQAAbCAFBoAAbBQEpoAARUAFvQyDgAAAQABAAEAQwCEoCAAAAj6oNAAABL+oDAAAAjaFQAE8/IBAAABAFMF") \ No newline at end of file diff --git a/pr/561/docs/search.index/3cf645f9badf.js b/pr/561/docs/search.index/3cf645f9badf.js new file mode 100644 index 000000000..9eb98e8ab --- /dev/null +++ b/pr/561/docs/search.index/3cf645f9badf.js @@ -0,0 +1 @@ +rn_("AQMA9N8IAAABADYDAQABAwDzEwwAAAEAAQDzgAJpbwEBAbBQEIwAAWP0LwcAAAEAAQAEAiOBAqBQAAAQUGNuAQQAOzAAAAEAAAcAAwBDEQIA6xIBAH8TAgABAQA6MAAAAQAAAAAABwAQAAAAZhFnEZ0SnhL1EvYSnROeE/MJAWkBixAAANcCAACHsMAS4AABoFAAAA9CoRAAABPDFAEXOzAAAAEAACQAAQCqASQA") \ No newline at end of file diff --git a/pr/561/docs/search.index/3cfe28653ea2.js b/pr/561/docs/search.index/3cfe28653ea2.js new file mode 100644 index 000000000..46d224197 --- /dev/null +++ b/pr/561/docs/search.index/3cfe28653ea2.js @@ -0,0 +1 @@ +rn_("AYACsHAQ9wABsCATwQABYWQBBQD0txIAAAEAlQABAPMAAWMBIxIAAEOAA7AwEwwAAbCgE6cAAWFzeQEGAPSVEAAAAQC4AAEAk4CEoAAAABDesSAUBAABCSAB84ACZWk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3d0e6f6e78d8.js b/pr/561/docs/search.index/3d0e6f6e78d8.js new file mode 100644 index 000000000..daeeda38a --- /dev/null +++ b/pr/561/docs/search.index/3d0e6f6e78d8.js @@ -0,0 +1 @@ +rn_("AQAAOjAAAAEAAAAAAAoAEAAAAG0Pbg9YEFkQ4xBtEW4RghKDEgwUDRQBBADzaA8AANwAAQDzAAFx97UMAAABABsDAQDFAGIAAQDzAAJleTowAAABAAAAAAAOABAAAADYCAYMBwz+Dw4QDxChEKIQoxBmE2cTdxN4E+kT7hM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3d5f153390be.js b/pr/561/docs/search.index/3d5f153390be.js deleted file mode 100644 index 81a24667c..000000000 --- a/pr/561/docs/search.index/3d5f153390be.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAAAcAAwA/EQIA5xIBAHsTAgABBwD2ChMAAAEAowBUABYAAQABBADzQhEAAAEAAQAjAAKgYAAAEmlhcvNrEAAAAQC8AQGAAqEQAAAT/7CAE/cAAWl1dwgAAIixUBQaAAGgAAAAEEywcBNEAAGhMAAAFA4KQRvyKgkAAPsGAYECoFAAABCPoKAAABK5a3ABAwA7MAAAAQAA9wACAI4MAQA5DvUA84ACbHTzgAJhZQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3e10313c5965.js b/pr/561/docs/search.index/3e10313c5965.js deleted file mode 100644 index 044978936..000000000 --- a/pr/561/docs/search.index/3e10313c5965.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYA9FETAAABAFMAAQAjgAKhEAAAFANjchOAAqAgAAAI2mh5AQEBoGAAABP2c/JQEQAAAQAjgAKwIAk/AAFldQGAArAgD6cAAaCQAAATrGFlAQcBsEATxwABZfWPEwAAAQABAAEAAQABBAGwABKUAAFzOzAAAAEAAAsAAgAOEwcA+xMDAEcAAASGoIAAABLvsQAUCAABsEASUAABsIAUFgABsFASlgABFQAW9DIOAAABAAEAAQCDAISwQBQMAAGwMBKGAAGwMBMiAAHAAAM6MAAAAQAAAAAACQAQAAAAmgSMEI0QMBExETYRNxFvE3AT2xMBAwGwQBPdAAF08kETAAABACOFAqBAAAATcWJzAYACoAAAAAj6oCAAABB/Z3ABAQD0TBEAAAEAAQABAPOAAmRst+gAAIyg0AAAEvqgUAAAEOygkAAAExawUBJ1AAGgMAAADB63mAc7MAAAAQAAYQATAPIBAQD4AQEASAQDAKAFAACYBgEAMwcBAEYHAADWCAEA4wgAAO0IAAAfCQAANww+AIgMAABzDwEARhABAGEQAQCmEAEAJxEEACsSAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3e3cbb04f471.js b/pr/561/docs/search.index/3e3cbb04f471.js deleted file mode 100644 index 27f235dfb..000000000 --- a/pr/561/docs/search.index/3e3cbb04f471.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9KQSAAABAJEAAQDzAAFj9dsPAAABALwAAQABAAEJAPPfEwAAAQA1AAENAaCgAAAUI3fyExQAAAEAAYECsIAT7QABoGAAABQRZHM3AQCEhaBAAAATwrBgE5YATAKQCiOAAqBwAAAQ22RyAQsBoEAAABPGZfLmEwAAAQATgAKwMA/3AAFkcvMCAWX0sQcAAAEAAQABACOAArAgC74AAWV5AQoA8y8SAAABAAEAAQsAOzAAAAEAAAcAAQAOEwcAAQIA9GsTAAABAEkAAQC3AACAhbBwEmMAAbDQFAgAAWAgBgEGAPM7EgAAAQABAAEDAbBAE90AAXTyQRMAAAEAI4UCoEAAABNxYnMjAgOgQAAAEH+gUAAAEOxhYmb31ggAAAEASAAnBwEAXwABAPOAAmlwAQQA8/QPAAABAAEA8wABcDswAAABAAAMAAEAtQYMACOAA6AwAAALzbBwEyIAAWFlafOAA2RtbgEAADowAAABAAAAAAAHABAAAADhCBkMJRImEnoSexJ8En0S8wIBZDswAAABAAAJAAMAVxEDACASAwBSEgEAI4ACoJAAABO5aW8BgAOwMBLWAAGAExgAEAGwUBCbAAFjc3jzAAFlAasEAADnFQAAiaAAAAAMKqBAAAAMf7BADIAAAZBIXQH/AQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/3e7278429f07.js b/pr/561/docs/search.index/3e7278429f07.js new file mode 100644 index 000000000..8ec215fd7 --- /dev/null +++ b/pr/561/docs/search.index/3e7278429f07.js @@ -0,0 +1 @@ +rn_("AYkCsCAT1gABoDAAABPgaXATAAOgIAAAEpyggAAAEq9laXX1yQsAADQAAQABAAEAAYYCsJAT+wABoAAAABIsYmQBgAKwMBKQAAGgMAAAEHhydtcAAACFoDAAAA/zoDAAABLmEAETOjAAAAEAAAAAAAkAEAAAAMoIywjMCPwI/QgLEBAQyBDJEG0S") \ No newline at end of file diff --git a/pr/561/docs/search.index/3e98557ba4a3.js b/pr/561/docs/search.index/3e98557ba4a3.js deleted file mode 100644 index 49f684ba0..000000000 --- a/pr/561/docs/search.index/3e98557ba4a3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkA898TAAABADUAAYACoEAAABLGsCATgQABaGkBDAGgoAAAFCN38hMUAAABAAEBAPN/DwAAAQABAPOAAnR1AYECsIAT7QABoGAAABQRZHM3AwCAhqBAAAATwrBgE5YATAKQDgEAAbBQEIgAAWP0LwcAAAEAAQAEAsOAhKAQAAAMKqBQAAASEQxABA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3f243484e57a.js b/pr/561/docs/search.index/3f243484e57a.js deleted file mode 100644 index 51d7cfa7a..000000000 --- a/pr/561/docs/search.index/3f243484e57a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsHAT9wABoAAAAASGZmcBAQA7MAAAAQAABwABAPULBwABAQGgcAAAEg9hAeYGAAAjgAKhAAAAE/9kbnOAhKBgAAASDgBBSA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3f24cd5aa4fa.js b/pr/561/docs/search.index/3f24cd5aa4fa.js deleted file mode 100644 index ad2bb5df2..000000000 --- a/pr/561/docs/search.index/3f24cd5aa4fa.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYAOzAAAAEAAAUAAQDJEgUAg4YEsFASkgABsHAS+AABoNAAABPPYm5vdhOAArAQEmUAAXByAQABoDAAABFkdAEXEwAA8wIBc/IoEAAA8wITgAKgYAAAEBlldQECAPa1DAAAAQAZAwEAJQEBAAGAArAAElAAAYAONjKQAWVzAQEA8ykHAADECwEAY4ADsIATaQABYm5084ADYW9yARQA9PsTAAABAAEAAQABAAA7MAAAAQAABgACAPYSAABcEwUAI4gCsEATzQABZXMBBAGwMBLHAAFj8wIRAAABAAEAAQUAOzAAAAEAAAgAAwBxEQIAbhIEAI4TAADzAgNjZXDzeQwAAAEAAQBjgAOgYAAAD3llb3UBAAGwYBN1AAFlAawTAADzAgFz9vIIAAABAAEAzQc/ABUBAQgA8y8SAAABAAEAQ4ADoBAAABL6oOAAABOAZG9zAQIBoFAAABEBcgGhEAAAAYACoEAAABAloHAAABO6YWUBAAA7MAAAAQAACwACAMoGBQBJEgUA84ACdHYBAQD0wgcAAAEAAQABAPMAAm5y9ucIAABXAMcGAQCwAAEA8wCHMJEM96kEAADWC+QBAQCFAAEA8AA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3f46d68b60fc.js b/pr/561/docs/search.index/3f46d68b60fc.js new file mode 100644 index 000000000..f4d0b2d23 --- /dev/null +++ b/pr/561/docs/search.index/3f46d68b60fc.js @@ -0,0 +1 @@ +rn_("AQAAOjAAAAEAAAAAAAoAEAAAAG0Pbg9YEFkQ4xBtEW4RghKDEgwUDRTzAQF58ncTAAABACMAA6BAAAARAqBQAAATw2Vvc/JRDwAAwgI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/3f718fad95a0.js b/pr/561/docs/search.index/3f718fad95a0.js new file mode 100644 index 000000000..d60a08234 --- /dev/null +++ b/pr/561/docs/search.index/3f718fad95a0.js @@ -0,0 +1 @@ +rn_("AQMBsAAMngMhc/LeCwAAAQABAgDz3QsAAAQFAQAjAAKgQAAADJplcvKYBAAAAQABgAKgQAAAE0ewMBJpAAFhcwECAaBAAAATymXy6hMAAAEA84AEbG5ydg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/3f8645c00d7c.js b/pr/561/docs/search.index/3f8645c00d7c.js deleted file mode 100644 index f1fe4a621..000000000 --- a/pr/561/docs/search.index/3f8645c00d7c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9CwRAAABAAEAAQABCgDzKhMAAAEAAQDzgQJtdAEGAPPuEAAAAQABAAGCArBgErEAAbDQE8kAAWlyE4ACsBAMkwABZWkBBQD0axMAAAEASQABAPMEAWPycxIAAAEAI4ICsFASRQABZnQBAAGwABPAAAFk9LULAAABAAEAAQDzgQJlaTcGAACJsTAT5gABoGAAABDtoFAAABCAsJAShAABsEAQfQABtRAHAaATAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4031cc647b10.js b/pr/561/docs/search.index/4031cc647b10.js deleted file mode 100644 index 940904594..000000000 --- a/pr/561/docs/search.index/4031cc647b10.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAAPcAAgCODAEAOQ71AAEBAaAAAAAStnP1pgQAALEK1gMBAAMAAQECoGAAABM0oOAAABOOZXQ7MAAAAQAACAABAKwECAABgAOwIBIFAAGwsBI+AAGwsBJAAAFiY3PzgARjbHR2") \ No newline at end of file diff --git a/pr/561/docs/search.index/404afcce0ada.js b/pr/561/docs/search.index/404afcce0ada.js deleted file mode 100644 index c3c579fe4..000000000 --- a/pr/561/docs/search.index/404afcce0ada.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQgA9PoPAAABAKkAAQABAAGggAAAFBJm8skIAAA3CgEHAPXPEgAAAQABAAEAAQAjgAKgUAAAEN9hb/MCAmZzOzAAAAEAAAgABAAfBwAAUgcFAK8MAAAXEQAAM4ADoEAAAAvGYWVv") \ No newline at end of file diff --git a/pr/561/docs/search.index/40bea8c85bd4.js b/pr/561/docs/search.index/40bea8c85bd4.js new file mode 100644 index 000000000..308a278ab --- /dev/null +++ b/pr/561/docs/search.index/40bea8c85bd4.js @@ -0,0 +1 @@ +rn_("AQEBoEAAABPKZfLqEwAAAQABgAOgMAAAEhSw4BOpAAGwkBPsAAFhY22HAQCAhrAQEKwAAbAQEMwAAaCgAAAT2KDwAAAT+TFJAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4100782a5d31.js b/pr/561/docs/search.index/4100782a5d31.js deleted file mode 100644 index 9bb908fa5..000000000 --- a/pr/561/docs/search.index/4100782a5d31.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAAUAAQDvEwUA8w0BbTswAAABAAAFAAEArxMFAEcAAACFsAATwAABsEASMgABoQAAABP1sAAS8ACHOAgCOzAAAAEAABgABgC1CwMArhAHAFQSAQDPEgQApxMEABIUAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4124f291b841.js b/pr/561/docs/search.index/4124f291b841.js new file mode 100644 index 000000000..78888d58c --- /dev/null +++ b/pr/561/docs/search.index/4124f291b841.js @@ -0,0 +1 @@ +rn_("AQgA9asTAAABAAEAAQABAPMAAWY7MAAAAQAABQACAOQBAAAcEAQAAQIAOzAAAAEAAAsAAgA+EwUA8xMFAPMGAW07MAAAAQAADQAEAH4MAADtEAAAWhIFALMTBQBjgAOwAAjwAAFlbXM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/41466e74fbf7.js b/pr/561/docs/search.index/41466e74fbf7.js new file mode 100644 index 000000000..8ff9c7a37 --- /dev/null +++ b/pr/561/docs/search.index/41466e74fbf7.js @@ -0,0 +1 @@ +rn_("AQUAOzAAAAEAAAcAAwBDEQIA6xIBAH8TAgABBwD2DhMAAAEAowBUABYAAQABBADzRhEAAAEAAQAjAAKgYAAAEm1hcvNvEAAAAQC8AQGAAqEQAAAUA7CAE/sAAWl1dwgAAIixUBQeAAGgAAAAEFCwcBNIAAGhMAAAFBIKQRvyKgkAAP0GAYECoFAAABCToKAAABK9a3ABAwA7MAAAAQAA9wACAI4MAQA5DvUA84ACbHTzgAJhZQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4159f6c35981.js b/pr/561/docs/search.index/4159f6c35981.js deleted file mode 100644 index 9ee2a28d9..000000000 --- a/pr/561/docs/search.index/4159f6c35981.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYICsCAQwgABsDAROAABZXABBQD0aw8AAAEA6AABAFOAA7CQEWkAAWFpcgGBArCgE4EAAbCgE4MAAWNyxwAAAIWwUAyhAAGgIAAACT2gIAAAC9U8AAE6MAAAAQAAAAAACgAQAAAApgGnAVsE0AbuCO8IARACEG0QbhB8EQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4231d46acc3c.js b/pr/561/docs/search.index/4231d46acc3c.js new file mode 100644 index 000000000..6da94b22a --- /dev/null +++ b/pr/561/docs/search.index/4231d46acc3c.js @@ -0,0 +1 @@ +rn_("AQ8A9I4TAAABAEsAAQABBAD0BxAAAAEAsgABAAECADowAAABAAAAAAAJABAAAABXEVgRaxJsElUTVhOpE6oTGhQbFPMAAW/yQQkAAAEAU4ADsQAT7AABaG9ww4CEoBAAABLKsIATDAABBQAG") \ No newline at end of file diff --git a/pr/561/docs/search.index/4351feb790fe.js b/pr/561/docs/search.index/4351feb790fe.js deleted file mode 100644 index 683f19891..000000000 --- a/pr/561/docs/search.index/4351feb790fe.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYA9JEQAAABALgAAQATgQOgAAAAENqxIBQAAAFhZG4BFAD1HhQAAAEAAQABAAEAAQUBsIATwAABdjswAAABAAAHAAIARREEACoTAgAjgAKwcBFrAAFiZFcAAAGGoMAAABL1oKAAABMXoJAAABLhsFAQCgABBeAC9ekGAAABAAEAnAhuBAEGAPNCEgAAAQCoAAEAAaBgAAAPcnIBcAQAANcBAIDFoDAAAAvGAACKCg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/436e158b126a.js b/pr/561/docs/search.index/436e158b126a.js deleted file mode 100644 index fb740fc36..000000000 --- a/pr/561/docs/search.index/436e158b126a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsHASBwABsCAUDAABaW8BAAGw8BQMAAFr9oATAAAFAAEAAQABACUA8wUBZPJHEgAAAQABAgDzWRAAAAEAAQDzAAFpOjAAAAEAAAAAAAcAEAAAADYQXBJEE0UTdRN2E5QTlRMjgwKwsBPrAAFhcwGBAqCgAAASsKBAAAAP+W9284CEAVAB") \ No newline at end of file diff --git a/pr/561/docs/search.index/4393045f068c.js b/pr/561/docs/search.index/4393045f068c.js new file mode 100644 index 000000000..1d629e164 --- /dev/null +++ b/pr/561/docs/search.index/4393045f068c.js @@ -0,0 +1 @@ +rn_("AYACsEAS3gABoMAAABOYZW8BAgD0UBEAAAEAAQABABMAA7AgEVQAAbCAE6kAAWFzdAGIDAAAAQQA84YPAAABAAEAs4CEsEAS8QABQQAG") \ No newline at end of file diff --git a/pr/561/docs/search.index/441e425635ce.js b/pr/561/docs/search.index/441e425635ce.js deleted file mode 100644 index 78b84ee21..000000000 --- a/pr/561/docs/search.index/441e425635ce.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsRAT+QABsBAMBgABZW8BBQA7MAAAAQAADQABABgRDQABAgDzjA8AAAEAAQABAgD0iA8AAAEAAQABAAEDADswAAABAAAIAAEAORAIAIcHAACHsKATLQABsNATvQABoFAAABOMjBQROzAAAAEAAAYAAwAoBwAAZRADACkSAQDzgAJsdBOAA6AgAAAMfLCgE6UAAWFkbg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/448966b9b58b.js b/pr/561/docs/search.index/448966b9b58b.js new file mode 100644 index 000000000..3c4e26be4 --- /dev/null +++ b/pr/561/docs/search.index/448966b9b58b.js @@ -0,0 +1 @@ +rn_("ARMA9SIUAAABAAEAAQABABOAAqDAAAASuWFvAQICoLAAABO9oLAAABO+Y3PzURAAAAEAXAABgQKwUBFrAAGgwAAAE5BoafOAAmVpI4ACoLAAABL5aXQBBQGwgBPEAAF2OzAAAAEAAAcAAgBJEQQALhMCACOAArBwEW8AAWJkdwAAAIagoAAAExugkAAAEuWwUBAMAAEF4AL16QYAAAEAAQCeCHAE") \ No newline at end of file diff --git a/pr/561/docs/search.index/4503392a666e.js b/pr/561/docs/search.index/4503392a666e.js new file mode 100644 index 000000000..65abf9ae3 --- /dev/null +++ b/pr/561/docs/search.index/4503392a666e.js @@ -0,0 +1 @@ +rn_("AQQBsEATywABZfWTEwAAAQABAAEAAQABAgA7MAAAAQAACwACAD4TBQDzEwUA8wEBbTswAAABAAANAAQAfgwAAO0QAABaEgUAsxMFAPMBAWXyeREAAAEAM4CEsBAQDgABoCAAAAvOFEAE") \ No newline at end of file diff --git a/pr/561/docs/search.index/450719784301.js b/pr/561/docs/search.index/450719784301.js deleted file mode 100644 index 6b700b79a..000000000 --- a/pr/561/docs/search.index/450719784301.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAAAcAAwA/EQIA5xIBAHsTAgABBADzQhEAAAEAAQAjAAKgYAAAEmlhcvNrEAAAAQC8AQGAAqEQAAAT/7CAE/cAAWl1NwQAgoexUBQaAAGgAAAAEEywcBNEAAGhMAAAFA4KQBsTgAKwEBJ1AAFpcg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/45c7f13213d0.js b/pr/561/docs/search.index/45c7f13213d0.js deleted file mode 100644 index d211fd540..000000000 --- a/pr/561/docs/search.index/45c7f13213d0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQcAOzAAAAEAAIcAAgBzEAAAfRGGAAEDADswAAABAACGAAEAqg2GAAECADswAAABAAAHAAEA9QsHAPMAA2JpdDswAAABAACHAAIAgQQAALwEhgA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/45cefb4b1fe7.js b/pr/561/docs/search.index/45cefb4b1fe7.js deleted file mode 100644 index 337471401..000000000 --- a/pr/561/docs/search.index/45cefb4b1fe7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9OMSAAABAAEAAQATAAKwgBK3AAFzdvQ7CQAAAQApCgEAE4ACsDAQiAABbG4BgAKgAAAAEBWgAAAAEBY0NvMDAXYBrQwAABMAAqBAAAARBWFz9+gLAACVA14BPQEBAAEApQEBAgD0kBIAAAEAjwABAAEDAPTEEgAAAQCVAAEA8wACYnU6MAAAAQAAAAAAEwAQAAAAHAcdBx4HYQ9iDwcQCBAmECcQuBC5EGURZhGOEo8SmxKcEqsSHhMfE/OAAmR0E4ACoCAAAAy3ZXIBBwGgQAAAE59l8skTAAABAAEAAPUtCQAAAQABAAEAAQAjgAKgoAAAE/VmcEcAAACFsDAPPAABoFAAAA/9sHAQgQABsUAUHAABgSkA8lEFAAABAPOAAmx0lwEAgIaxMBOhAAGxEBPLAAGgsAAAEsYRRQg=") \ No newline at end of file diff --git a/pr/561/docs/search.index/461a4022ffba.js b/pr/561/docs/search.index/461a4022ffba.js new file mode 100644 index 000000000..36a7c18ca --- /dev/null +++ b/pr/561/docs/search.index/461a4022ffba.js @@ -0,0 +1 @@ +rn_("AQMBgBLtABDwczswAAABAAAFAAEAzRIFACOCAqCQAAATx2lzBwEAhMWwUBKWAAGgoAAAEzWwcBL8AAGg0AAAE9OAARgI") \ No newline at end of file diff --git a/pr/561/docs/search.index/46615455c43f.js b/pr/561/docs/search.index/46615455c43f.js deleted file mode 100644 index 10648baa7..000000000 --- a/pr/561/docs/search.index/46615455c43f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAAkABAArCQEAHxADAF0QAQBVEwEAAQIBsEAT3QABdDswAAABAAANAAYAahIDANQSAQBBEwEAWBMBANITAQD3EwEAE4ACsDASnQE/aXABiAKwABNMAAGwABNOAAE0NhOBAqAwAAARAWRzAYACoCAAAAwqsGATfgABbngBBQDzGBMAAAEAAQATgAKgMAAAE3FlefMAhBIAA/LFDwAA3ADzgAJydA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4663a4e119e7.js b/pr/561/docs/search.index/4663a4e119e7.js deleted file mode 100644 index 07b00ae8e..000000000 --- a/pr/561/docs/search.index/4663a4e119e7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUBsEASMgABZfJUEgAAAQABggKgkAAAE5ugkAAAE5wyMwEAAqAgAAASDqAgAAAIx2ltOzAAAAEAAAwABgB+BAAAtQQFADcJAAA+DwEAcRMAAIMTAQDzAAFzAa0QAAABBQD0/BIAAAEAAQABAAEAAPUtDAAAAQABAAEAAQDzgAJna3OAhLCwE1UAARFIAAEFAaBAAAARbmXzsAwAAOQDAQATgAKgMAAAC+ZlcgGAA7BQE5QAAaAQAAALtKBwAAAS7GduckcBAACFoGAAABNyoFAAABPDoKAAABNkFQEEOzAAAAEAABEABADwAQEAORAIADIRAwAvEgIAAYUCsHATfgABsDAS1AABZXMTAAOwQA9dAAGgYAAAEQhiZXM7MAAAAQAAEgAEAIMFAQCcBgoA1g8BACkQAwABAwD08g8AAAEABAABAAEKAaBAAAATxmXy5hMAAAEAE4ACsGASKQABY2nzgAJkcvMAAmVvOzAAAAEAAAkAAgBuBwUAsQcDAAECAbAwENQAAW47MAAAAQAACQABAKoLCQABAAD0LhAAAAEAAQABAAEBADswAAABAADnAAIAoQUAANcH5gBjAAOwEBKSAAFlaXM6MAAAAQAAAAAADgAQAAAA2ggVCRYJFwkYCdAL0Qs2DzcPXA9vD1gQfBD4EvkS44CEsCAHKgABEUAEAQGEsDALvgABoEAAAAx/oIAAABDbsEAMgAABAAAdAf8BAAABBQD1RhMAAAEAAQBzAAEAE4ACoAAAAAbQYWcBAwD0BxIAAAEAZQEBAPOAAmlvAQEAOzAAAAEAAOcAAgBIBwAAwwrmAAEIAbBAE8cAAWX1jxMAAAEAAQABAAEA84ECZ3QBAQGgcAAAEXRpOzAAAAEAAPkAAgBHBwAAygn4AAEFAPNIEAAAAQABAPOAAmFvE4ACoEAAAAvlcnUBgAKgAAAAByygEAAACNlkeBMAArAgDKcAAWVy8qAPAAABABOAArCwFAwAAXJ4AQoA9AMTAAABAAEAAQATgAKwEBCPAiphZQEEAPQpEAAAAQABAAEAAQQAOjAAAAEAAAAAAAcAEAAAAKQSpRKzErQSNhM3E0kTShMBAwDzQhIAAAEAqADTgISwQBCBAAEBSAHHvwMAj6CAAAASRLBgDJYAAbBADA8AAbEwE+MAAT+pHzswAAABAABLACIAcAAAAHUAAACfBAEAqgQAAF0FAQASBwEAIgcAACYHAQAOCQAAIgkHADkJAQC9CwAA0wsBANoLAQDrCwcADwwBACsMAQB2DAEAaw8BANsPAQBUEAEAXxABAHcQAACYEAIAqBABALoQBADfEAAALBEDAGkRAQAfEgAAfhIBAIISAQCvEgAACBQBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/46c6c8bbd9a2.js b/pr/561/docs/search.index/46c6c8bbd9a2.js new file mode 100644 index 000000000..35d4fa227 --- /dev/null +++ b/pr/561/docs/search.index/46c6c8bbd9a2.js @@ -0,0 +1 @@ +rn_("AQcAOzAAAAEAAIcAAgB3EAAAgRGGAAEDADswAAABAACGAAEAqg2GAAECADswAAABAAAHAAEA9QsHAPMAA2JpdDswAAABAACHAAIAgQQAALwEhgA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/46d02c2cf6f3.js b/pr/561/docs/search.index/46d02c2cf6f3.js deleted file mode 100644 index a4bf8ae1c..000000000 --- a/pr/561/docs/search.index/46d02c2cf6f3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9ScRAAABAAEAAQABAAGAArBgEoIAAaAgAAAQfG95AQABoMAAABOgafTYEgAACAAbABsAAQYA9AQUAAABAAEAAQABAgD0ehAAAAEAmgABAAECAaBAAAASr3I7MAAAAQAABwACAHgQAQAPEQUA84ACYW9nAwAAhrCAEq4AWbCgEyQAAQwwBjswAAABAAAIAAMA0gsAADoRAwAbEgMA84ACZWk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/470732838eeb.js b/pr/561/docs/search.index/470732838eeb.js deleted file mode 100644 index 95e7818d5..000000000 --- a/pr/561/docs/search.index/470732838eeb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkA898TAAABADUAAQ0BoKAAABQjd/ITFAAAAQABgQKwgBPtAAGgYAAAFBFkczcBAIWFoEAAABPCsGATlgBMApAK") \ No newline at end of file diff --git a/pr/561/docs/search.index/474b31e6c524.js b/pr/561/docs/search.index/474b31e6c524.js deleted file mode 100644 index 5f815b2ce..000000000 --- a/pr/561/docs/search.index/474b31e6c524.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQwA8yoTAAABAAEAAQYA8+4QAAABAAEAAYICsGASsQABsNATyQABaXITgAKwEAyTAAFlaRcDAIOIsTAT5gABoGAAABDtoFAAABCAsJAShAABsEAQfQABtBAH8wABYfQMCQAAAQC1BwEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/4794fdee0479.js b/pr/561/docs/search.index/4794fdee0479.js new file mode 100644 index 000000000..96f926269 --- /dev/null +++ b/pr/561/docs/search.index/4794fdee0479.js @@ -0,0 +1 @@ +rn_("AQUA9D0SAAABAKQAAQABCAD09xIAAAEAhQABADMBA7BAEsYAAWFiZfWfDAAAAQAgA1YCzwABAAD14AsAAAEAZAMBAAEA84ACc3UjgQKwgBLxAAFydAEGAPQJEAAAAQCyAAEAUwCEsIASeQABoKAAABQnAgEU9VUFAAABAHAOUQABAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/47bd772cc928.js b/pr/561/docs/search.index/47bd772cc928.js new file mode 100644 index 000000000..fcf37519c --- /dev/null +++ b/pr/561/docs/search.index/47bd772cc928.js @@ -0,0 +1 @@ +rn_("AQQA9uMTAAABAA0AAQAjAAQAAQMA8zMSAAABAAEAI4ECsSAUGgABY2sTgAKgMAAAE6NuclMAA6BAAAAL1WVvcvSnEAAAdAGyAQEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/47c53d0d17f8.js b/pr/561/docs/search.index/47c53d0d17f8.js new file mode 100644 index 000000000..8f804edb8 --- /dev/null +++ b/pr/561/docs/search.index/47c53d0d17f8.js @@ -0,0 +1 @@ +rn_("AQEBsIAS2gABdfITCQAAAQAjgAKwEAkRAAEzNgEGAPNxEAAAAQAOAROAArAAD0MAAW91AQIA8yMHAADsAQEAAQMA8z8SAAABAAEAI4ACsAARPAABaGkBAAA7MAAAAQAAEwABAFgHEwAjgAKgMAAADIdhZfOAAnJ0E4ACsDATKAABYWwBAAGggAAAFBZm8skIAAA7CgEHAPXTEgAAAQABAAEAAQAjgAKgUAAAEONhb/MCAmZzOzAAAAEAAAgABAAfBwAAUgcFAK8MAAAbEQAAE4ACoEAAAAvGYW8BAwGwQBPhAAF08kUTAAABACOFAqBAAAATdWJzIwADoEAAABCDoFAAABDwYWJm99YIAAABAEgAKwcBAF8AAQATgQKgUAAAEXhndAGAAqBAAAARZaAgAAATVGFpAQIA9AwJAAABALkHAQABAgDzAwwAAAEAAQATgAOwEAkKAAGwMBOHAAFpdXkBAgA7MAAAAQAACwACAD4TBQDzEwUA8wgBbTswAAABAAAMAAMA7RAAAFoSBQCzEwUAAYECoIAAABJIoHAAABOYYXPzgAJucrfbAQCNoUAAABPuoCAAAAkOoFAAAA+JN5UPOzAAAAEAACcCBQDtAQAAEwIrAd4GAABHBwAAygn4AA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4805b324248d.js b/pr/561/docs/search.index/4805b324248d.js deleted file mode 100644 index 50ce1fac8..000000000 --- a/pr/561/docs/search.index/4805b324248d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA9RkJAAABAAEAAQABAPMAAWnzmAwAAHQHAQABAQGgQAAAE4ll8vkTAAABAAEEAqAgAAARUqAwAAASF2JoAVMPAADnAACAxaAQAAAMmaAwAAAQAAQQKAE=") \ No newline at end of file diff --git a/pr/561/docs/search.index/48304814d044.js b/pr/561/docs/search.index/48304814d044.js new file mode 100644 index 000000000..cb58334da --- /dev/null +++ b/pr/561/docs/search.index/48304814d044.js @@ -0,0 +1 @@ +rn_("AQgA9FUTAAABAFMAAQABAgGgYAAAE/pz8lQRAAABAAGAArAgD6kAAaCQAAATsGFlAQcBsEATywABZfWTEwAAAQABAAEAAQABAwGwQBPhAAF08kUTAAABACOFAqBAAAATdWJzAQEA9FARAAABAAEAAQATgAKgMAAAEINkbDd0AACLsEATJgABoFAAABDwoJAAABMasFASeQABoDAAAAwes5gHOzAAAAEAAF4AEQD4AQEASAQDAKAFAACYBgEAMwcBANYIAQDjCAAA7QgAAB8JAAA3DD4AiAwAAHUPAQBKEAEAZRABAKoQAQArEQQALxIBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/48b261dc474a.js b/pr/561/docs/search.index/48b261dc474a.js new file mode 100644 index 000000000..957f91bb7 --- /dev/null +++ b/pr/561/docs/search.index/48b261dc474a.js @@ -0,0 +1 @@ +rn_("AQIAOzAAAAEAABEABQCGBQAA5QsAAJIMAACRDw0A8BAAAAGEArAAEP4AAbAAEQAAATQ2FwgAAIigIAAAEVagMAAAEMSg4AAAExqgMAAAEhuwcA9pAAGgIAAABZDLwAg7MAAAAQAACwEVAKkBAAB9BQAAkAUAAMcIAADNCAAA6ggCAMULAAABDAEAKAwBAJUMAADDDOYAVQ8AAGYPAQBXEAAAEhEAAGESAQA+EwUAWxMAAN0TAADzEwUADhQBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/48b5785d1dd0.js b/pr/561/docs/search.index/48b5785d1dd0.js new file mode 100644 index 000000000..d71fd3562 --- /dev/null +++ b/pr/561/docs/search.index/48b5785d1dd0.js @@ -0,0 +1 @@ +rn_("AQEA9b4QAAABAAEAAQABACOBArCQE3EAAWF0Q4ADsRAT6gABoIAAABM0Y290EwACsAATwQABbnL2/QEAAAEAawIBAJ4C9gs=") \ No newline at end of file diff --git a/pr/561/docs/search.index/48c04f57be0a.js b/pr/561/docs/search.index/48c04f57be0a.js new file mode 100644 index 000000000..8e9befd60 --- /dev/null +++ b/pr/561/docs/search.index/48c04f57be0a.js @@ -0,0 +1 @@ +rn_("AQEAOjAAAAEAAAAAAAgAEAAAANgI/g+hEKIQoxBmE2cT6RPuEwECAPQ0EAAAAQABAAEAE4ACoNAAABPYY3NTgAOgcAAAE9NlaW+DgISwIBMMAAGgIAAAD3KwAAckAAEKCAQ=") \ No newline at end of file diff --git a/pr/561/docs/search.index/48f29265e82a.js b/pr/561/docs/search.index/48f29265e82a.js new file mode 100644 index 000000000..7b17ded69 --- /dev/null +++ b/pr/561/docs/search.index/48f29265e82a.js @@ -0,0 +1 @@ +rn_("AQAA9DAQAAABAAEAAQDzAgFz9RUJAAABAAEAAQBGBgEGAPR8EQAAAQABAAEAAQQBoEAAABONZfL9EwAAAQABAQA7MAAAAQAABgABACAUBgDzBgFl9NQTAAABAC8AAQAzBgOwYBL0AIdhcnXzARAAAGQCAQDzgAJhZQEDAPQ2EQAAAQABAAEAAQIA9FMPAAABADEEAQABggKgEAAAEsqwQBJrAAFhcwGAA7AAB0oAAaAAAAALzrBwEA4AAW5yc+cHAACHoHAAABF7kQVBOjAAAAEAAAAAAAwAEAAAANkB2gHbAdwBTAe1B7YHHgkIDI4Pjw+QD5sQ") \ No newline at end of file diff --git a/pr/561/docs/search.index/49511b6f2403.js b/pr/561/docs/search.index/49511b6f2403.js new file mode 100644 index 000000000..2312ea2eb --- /dev/null +++ b/pr/561/docs/search.index/49511b6f2403.js @@ -0,0 +1 @@ +rn_("AQEA9XsFAADCDAEApAABAAEAADswAAABAAAHAAMAAgIBABwMAQCkDwMAAYMCsHATBQABsIATPAABY3MBBQD0qBIAAAEAkQABAPMIAWP13Q8AAAEAvgABAAEAAQABoDAAABEJdPRGEAAAAQABAAEAAYACoAAAABAXoAAAABAYNDbzAwF2Aa0MAACXAAAAhbCgEowAAbAgC9oAAbCAEmsAAQkEBjowAAABAAAAAAAJABAAAADbBtwG3QboC38P3xAcEh0SHhLDEwECAPSUEgAAAQCPAAEAAQMA9MgSAAABAJUAAQDzAAJidTowAAABAAAAAAAVABAAAAAcBx0HHgdjD2QPCRAKECgQKRC8EL0QaRFqEZISkxKfEqASrxLaEtsSIhMjEwEBAPR3BQAAAQAkBwEAtwAAgIWxABOpAAGwAAcmAAEMCEQBCAA7MAAAAQAABQABAE0SBQDXDQAAiLBAEKwAAaAgAAAMt7kACzswAAABAAAPAAUAcgABANMGBwA1BwEA/A8BAKgQAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4aa7b4743afe.js b/pr/561/docs/search.index/4aa7b4743afe.js deleted file mode 100644 index 9f79cee80..000000000 --- a/pr/561/docs/search.index/4aa7b4743afe.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQA9t8TAAABAA0AAQAjAAQAAQMA8y8SAAABAAEAI4ECsSAUFgABY2sTgAKgMAAAE59uclMAA6BAAAAL1WVvcvSjEAAAdAGyAQEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/4ac35e09797c.js b/pr/561/docs/search.index/4ac35e09797c.js new file mode 100644 index 000000000..77ed50978 --- /dev/null +++ b/pr/561/docs/search.index/4ac35e09797c.js @@ -0,0 +1 @@ +rn_("AQYA9IISAAABAIkBAQATAgKwYBKEAAFmbfKMDAAAAQAjggKwQBKwAAFlbAEFAPRvEwAAAQBJAAEA8wMBY/J3EgAAAQABgQKgAAAACPugMAAAD15zdBOAAqAQAAAHIG5404CEsHAUGgABkEAB") \ No newline at end of file diff --git a/pr/561/docs/search.index/4ad5a9111943.js b/pr/561/docs/search.index/4ad5a9111943.js new file mode 100644 index 000000000..ba8d2de37 --- /dev/null +++ b/pr/561/docs/search.index/4ad5a9111943.js @@ -0,0 +1 @@ +rn_("AYACsRAT/QABsBAMBgABZW8BBQA7MAAAAQAADQABABwRDQABAgDzjg8AAAEAAQABAgD0ig8AAAEAAQABAAEDADswAAABAAAIAAEAOxAIAIcHAACHsKATMQABsNATwQABoFAAABOQjBQROzAAAAEAAAYAAwAoBwAAaRADAC0SAQDzgQJsdPMAAWk7MAAAAQAAiAADAHwEAAB3EAAAgRGGAAEFAPPjEwAAAQA1AAEAAaBAAAAQe2Xz1AgAAAEARQkTgAKgMAAAD2VkcvMAAWXzwgYAAAEAAQDzgAJodAEBADswAAABAACHAAIAdxAAAIERhgATgAKgUAAAD6hpdAEIAPRmEwAAAQCCAAUAEwCEsPAT5QAtsJATyAABsFASrgFZQIkAOzAAAAEAABIACQDwDwIAZhEBAJ0SAQC+EgEA9RIBAFcTAQCOEwEAnRMBANoTAQDXAQAAhrCAETQAAaBAAAAI9wgwJjowAAABAAAAAAANABAAAACKAIsAMgc4CbsLugyJEIoQEBIREpQSlRIkEyUT") \ No newline at end of file diff --git a/pr/561/docs/search.index/4ae74e81fda2.js b/pr/561/docs/search.index/4ae74e81fda2.js new file mode 100644 index 000000000..5a7b9834d --- /dev/null +++ b/pr/561/docs/search.index/4ae74e81fda2.js @@ -0,0 +1 @@ +rn_("AQAA9S0JAAABAAEAAQABACOAAqCgAAAT+WZwRwAAAIWwMA88AAGgUAAAD/+wcBCFAAGxQBQgAAGBKQDyUQUAAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/4b9521cde4c7.js b/pr/561/docs/search.index/4b9521cde4c7.js new file mode 100644 index 000000000..e63e7d56b --- /dev/null +++ b/pr/561/docs/search.index/4b9521cde4c7.js @@ -0,0 +1 @@ +rn_("AQoA9BATAAABAA8AAQABgwKgIAAAD9OgMAAAEGhpdAEAAPR+EgAAAQABAAEA8wQBZPQkEgAAAQABAAEAI4aEsKATuwABsEASfAABsHATaQABFYAAAQACsDAPxQABsBATKAABc3TycQUAAF4GAYACsMAT5wABoAAAAAcidHnzgIURwQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4bb2fff02e94.js b/pr/561/docs/search.index/4bb2fff02e94.js new file mode 100644 index 000000000..e06fc0758 --- /dev/null +++ b/pr/561/docs/search.index/4bb2fff02e94.js @@ -0,0 +1 @@ +rn_("AYICsEATyAABsGASpgABZXIBBQD0IRAAAAEAAQABAPOAAmZtAQYAOjAAAAEAAAAAAAgAEAAAAGYPZw8SEWESYhJbE90TDhQPFAEAArCwE3MAAaFAAAAUB2Vn9E0HAAABAAEAAQDDAISgsAAAE0SwQBA5AAEUIAT3xQYAALcFWgMBADMBIQEOAWOAA7AwD6IAAWFlaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4bdd71cc38d3.js b/pr/561/docs/search.index/4bdd71cc38d3.js new file mode 100644 index 000000000..557ca7d80 --- /dev/null +++ b/pr/561/docs/search.index/4bdd71cc38d3.js @@ -0,0 +1 @@ +rn_("AQQBsAASmAABczswAAABAAALAAIAEhMHAP8TAwBHAAAEhqCAAAAS87EAFAwAAbBAElQAAbCAFBoAAbBQEpoAARUAFvQyDgAAAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/4c05ce7be64f.js b/pr/561/docs/search.index/4c05ce7be64f.js deleted file mode 100644 index 9b545b5fc..000000000 --- a/pr/561/docs/search.index/4c05ce7be64f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQoA9AwTAAABAA8AAQABgwKgIAAAD9GgMAAAEGRpdAEAAPR6EgAAAQABAAEA8wQBZPQgEgAAAQABAAEAI4aEsKATtwABsEASeAABsHATZQABFYAAAQACsDAPwwABsBATJAABc3TycQUAAF4GAYACsMAT4wABoAAAAAcidHnzgIURwQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4c89ae5762cb.js b/pr/561/docs/search.index/4c89ae5762cb.js deleted file mode 100644 index f5adf7143..000000000 --- a/pr/561/docs/search.index/4c89ae5762cb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAABEABQCGBQAA5QsAAJIMAACPDw0A7BAAAAGEArAAEPoAAbAAEPwAATQ2FwgAAIigIAAAEVKgMAAAEMCg4AAAExagMAAAEhewcA9nAAGgIAAABZDLwAg7MAAAAQAACwEVAKkBAAB9BQAAkAUAAMcIAADNCAAA6ggCAMULAAABDAEAKAwBAJUMAADDDOYAUw8AAGQPAQBTEAAADhEAAF0SAQA6EwUAVxMAANkTAADvEwUAChQBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4c957e6f6269.js b/pr/561/docs/search.index/4c957e6f6269.js new file mode 100644 index 000000000..16eb3930a --- /dev/null +++ b/pr/561/docs/search.index/4c957e6f6269.js @@ -0,0 +1 @@ +rn_("AYECoCAAABP6sEAPhAABYnABBQD0txIAAAEAlQABAPMDAWMBIxIAAAEMAPT/EwAAAQABAAEA84ACbnYBgAKwMAwKAAGgMAAADAxpbwEDAaAAAAATx3MBcREAAMcDAICGsEALywABsAAFTwABkUgB") \ No newline at end of file diff --git a/pr/561/docs/search.index/4d88a08a2ae4.js b/pr/561/docs/search.index/4d88a08a2ae4.js deleted file mode 100644 index 1f3be335a..000000000 --- a/pr/561/docs/search.index/4d88a08a2ae4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQA80IRAAABAAEAAYICsEASNQABsEASNwABNDYBCwDzLxMAAGgAAQABBgD0DxQAAAEACgABAPMCAXIBeBMAAPMCAWX0AxAAAAEApwABABOAAqBQAAASaWR08wCEEQEB92sQAAABAG4AHQABAAEALwE=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4dcf807189f9.js b/pr/561/docs/search.index/4dcf807189f9.js new file mode 100644 index 000000000..c52281852 --- /dev/null +++ b/pr/561/docs/search.index/4dcf807189f9.js @@ -0,0 +1 @@ +rn_("AQQBoEAAABONZfL9EwAAAQABAQA7MAAAAQAABgABACAUBgDzBgFl9NQTAAABAC8AAQBTAISgIAAACSqwYBL0AIcBAQnzARAAAGQCAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4e0fe03427ba.js b/pr/561/docs/search.index/4e0fe03427ba.js deleted file mode 100644 index bc31630d9..000000000 --- a/pr/561/docs/search.index/4e0fe03427ba.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9OMSAAABAAEAAQATAgKwgBK3AAFzdvQ7CQAAAQApCgEA8wABYwEYDAAAAQICoLAAABO5oLAAABO6Y3PzTRAAAAEAXAABgQKwUBFnAAGgwAAAE4xoafOCAmVp84ACZW8=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4e371c98d463.js b/pr/561/docs/search.index/4e371c98d463.js new file mode 100644 index 000000000..03f5a8d12 --- /dev/null +++ b/pr/561/docs/search.index/4e371c98d463.js @@ -0,0 +1 @@ +rn_("AQEA96EQAAABAAEAwwIBAIIABQABAgD0NBAAAAEAAQABABOAAqDQAAAT2GNz84ACZW8jgQKwAAckAAFsdAEAAPSLBQAAAQABAAEAU4CEoFAAABQnsKATcwABCCAF") \ No newline at end of file diff --git a/pr/561/docs/search.index/4e3fc29e0437.js b/pr/561/docs/search.index/4e3fc29e0437.js new file mode 100644 index 000000000..56cc2003b --- /dev/null +++ b/pr/561/docs/search.index/4e3fc29e0437.js @@ -0,0 +1 @@ +rn_("AQEA9A0HAAABAAEAAQABAQGgQAAAEQlz9egLAAD3BD0BAQABABOCAqAgAAAMt2VyI4ADoEAAAAvnsDAI9QABZW90AQAA9AkHAAABAAEAAQABAgD0EBMAAAEADwABABOAArBAE8EAAWJ284ACb3gBCgD1ShMAAAEAAQBzAAEAAYECoCAAABB6sFASLwABYW8BBAGgAAAAE09zAXkQAABjAwOwUBDrAAFjZXP20QgAAAEAAQAsAAEAFQkBAQD0gwwAAAEAAQABACOAArAwEq4BWXJ08wCGAcAH8uMBAADeBQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4e66362aa7e4.js b/pr/561/docs/search.index/4e66362aa7e4.js new file mode 100644 index 000000000..e6a9175be --- /dev/null +++ b/pr/561/docs/search.index/4e66362aa7e4.js @@ -0,0 +1 @@ +rn_("AQQBoEAAABONZfL9EwAAAQABAQA7MAAAAQAABgABACAUBgDzBgFl9NQTAAABAC8AAQAzBQOwYBL0AIdhcnXzARAAAGQCAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4eac59928f18.js b/pr/561/docs/search.index/4eac59928f18.js deleted file mode 100644 index bc6c14aed..000000000 --- a/pr/561/docs/search.index/4eac59928f18.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBgBLpABDwczswAAABAAAFAAEAyRIFACOCAqCQAAATw2lzBwEAhMWwUBKSAAGgoAAAEzGwcBL4AAGg0AAAE8+AARgI") \ No newline at end of file diff --git a/pr/561/docs/search.index/4ebb1294fc20.js b/pr/561/docs/search.index/4ebb1294fc20.js new file mode 100644 index 000000000..a3f18bb36 --- /dev/null +++ b/pr/561/docs/search.index/4ebb1294fc20.js @@ -0,0 +1 @@ +rn_("AQADoKAAABO+oCAAABL+sDARYwABZWl08mcSAAABAAEDADswAAABAAAGAAEA5BAGAAEIAPRmEwAAAQCCAAUAEwEDsJATyAABsFASrgFZZ2xwOzAAAAEAABIACQDwDwIAZhEBAJ0SAQC+EgEA9RIBAFcTAQCOEwEAnRMBANoTAQABgAKwMBFfAAGwMBFhAAFydgECAbAAEikAAWQ7MAAAAQAABQACAFsRAwBWEgEAI4ECoJAAABO9aW8BBwD02RMAAAwAHgAPAHcLAAGIsFASKwEOsGASrAABlQkDOjAAAAEAAAAAAA4AEAAAAIkMigyLDDcOOA5REFIQixCuEA4RDxEQERERpBLdEiOAAqAQAAAMiG5v") \ No newline at end of file diff --git a/pr/561/docs/search.index/4eed4a0cfe1e.js b/pr/561/docs/search.index/4eed4a0cfe1e.js deleted file mode 100644 index 1d0c38cc8..000000000 --- a/pr/561/docs/search.index/4eed4a0cfe1e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsHAQ8wABsCATvQABYWQBBQD0sxIAAAEAlQABAPMAAWMBHxIAAEOAA7AwEwgAAbCgE6MAAWFzeQEGAPSREAAAAQC4AAEAk4CEoAAAABDasSAUAAABCSAB84ACZWk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4f373c1e1ac1.js b/pr/561/docs/search.index/4f373c1e1ac1.js new file mode 100644 index 000000000..e9ea63bf6 --- /dev/null +++ b/pr/561/docs/search.index/4f373c1e1ac1.js @@ -0,0 +1 @@ +rn_("AYMCsQAUHAABsNAUDgABa20BCgDzaxMAAAEAcAATgAKiEAAAFCdsbzMChKBgAAASCKEAAAAT3gSAAzswAAABAAA0AAIAIQcAAHQHMwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4f52df23d1fc.js b/pr/561/docs/search.index/4f52df23d1fc.js new file mode 100644 index 000000000..926150d45 --- /dev/null +++ b/pr/561/docs/search.index/4f52df23d1fc.js @@ -0,0 +1 @@ +rn_("AQUAOzAAAAEAAAcAAwBDEQIA6xIBAH8TAgABBADzRhEAAAEAAQAjAAKgYAAAEm1hcvNvEAAAAQC8AQGAAqEQAAAUA7CAE/sAAWl1NwQAgYexUBQeAAGgAAAAEFCwcBNIAAGhMAAAFBIKQBsjgAKgMAAAEg1udg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/4f61586f5849.js b/pr/561/docs/search.index/4f61586f5849.js new file mode 100644 index 000000000..c72caf254 --- /dev/null +++ b/pr/561/docs/search.index/4f61586f5849.js @@ -0,0 +1 @@ +rn_("AYACoIAAABJIsHATmAABYXMBAAGggAAAFBZm8skIAAA7CgEHAPXTEgAAAQABAAEAAQAjgAKgUAAAEONhb/MAAmZzOzAAAAEAAAgABAAfBwAAUgcFAK8MAAAbEQAA84ACZHk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/4f8eec0e4c5c.js b/pr/561/docs/search.index/4f8eec0e4c5c.js new file mode 100644 index 000000000..18eed2bcf --- /dev/null +++ b/pr/561/docs/search.index/4f8eec0e4c5c.js @@ -0,0 +1 @@ +rn_("AQcA9AATAAABAAEAAQDzBQF0OzAAAAEAAAgAAgC9CwAA6wsHAAEFAPMcEwAAAQABADcAAICFsDAP1AABoKAAABM4oDAAABN1EEFI") \ No newline at end of file diff --git a/pr/561/docs/search.index/4fae9a79a161.js b/pr/561/docs/search.index/4fae9a79a161.js deleted file mode 100644 index b16d153ce..000000000 --- a/pr/561/docs/search.index/4fae9a79a161.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9GsTAAABAEkAAQDzAwFj8nMSAAABACOAArBwFBYAAWhvAYICsAASUAABsAARXwABZXNDAAOgoAAAE7qgIAAAEvplaXT1YxIAAAEAhQABAPAAAYACsHASRwABoLAAABOAZW8BAgA7MAAAAQAABgABAOAQBgABAgGgQAAAE59l8skTAAABAPOAAmlvAQgA9GITAAABAIIABQATAQOwkBPEAAGwUBKqAVlnbHA7MAAAAQAAEgAJAO4PAgBiEQEAmRIBALoSAQDxEgEAUxMBAIoTAQCZEwEA1hMBAAGAArBAEicBDqAgAAAQo2FpAYECsDATcwABsDASRQABY2kBAwGwABKUAAFzOzAAAAEAAA0AAwBdEQEADhMHAPsTAwABAwD1WxEAAAEAHAEBAFYB84ACcnYBAAA7MAAAAQAABQACACUSAQB6EgMA8wIBZDswAAABAAAJAAMAVxEDACASAwBSEgEAI4ACoJAAABO5aW8TgAKw8BQIAAFsbwEFAPTVEwAADAAeAA8AI4ACoGAAABLvZ3MjgAKwkBO3AAFibPcXAwCPsHARdQABsGAT6wABsHATZQABsGASqAABsFASlgABtfkXOzAAAAEAADwAGACPBQAAPAcBAMAIBQDQCAAA/ggAAMgLAAARDAEAiQwCALMMAQAyDgMANw4BAIIPBABNEAEAhxAAAKoQAADKEAkACBEAAAoRAwBVEQAAoBIAALcSAQDJEgUA2RIAAI0TAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/50abe47e037f.js b/pr/561/docs/search.index/50abe47e037f.js deleted file mode 100644 index 29ecb46be..000000000 --- a/pr/561/docs/search.index/50abe47e037f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEAOjAAAAEAAAAAAAgAEAAAANgI/A+dEJ4QnxBiE2MT5RPqEwEBAqBAAAATz6AwAAAQo2Vo9dAIAAAuABMDAQBDBQECAPRMEQAAAQABAAEAE4ECsCARUAABYXPzgAJubwECAPQyEAAAAQABAAEAEwACoNAAABPUY3Pypw8AAAEA84ADZWlv") \ No newline at end of file diff --git a/pr/561/docs/search.index/50ea64435a08.js b/pr/561/docs/search.index/50ea64435a08.js new file mode 100644 index 000000000..9f59956ce --- /dev/null +++ b/pr/561/docs/search.index/50ea64435a08.js @@ -0,0 +1 @@ +rn_("AQMBoEAAABFyZfOwDAAA6AMBAAEGAPSVEAAAAQC4AAEAE4EDoAAAABDesSAUBAABYWRuARQA9SIUAAABAAEAAQABAAEFAbCAE8QAAXY7MAAAAQAABwACAEkRBAAuEwIAI4ACsHARbwABYmRXAAABhqDAAAAS+aCgAAATG6CQAAAS5bBQEAwAAQXgAvXpBgAAAQABAJ4IcAQBBgDzRhIAAAEAqADzgANydHYBAwA7MAAAAQAABwACACoTAwAIFAMA8wABcwHHEwAA8wABcwFxEQAAZwEAgIagMAAAC/SwABLgAAGgEAAADJUSQA4=") \ No newline at end of file diff --git a/pr/561/docs/search.index/521c1cdfffb6.js b/pr/561/docs/search.index/521c1cdfffb6.js deleted file mode 100644 index e6a406d0a..000000000 --- a/pr/561/docs/search.index/521c1cdfffb6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsAAQ+gABsAAQ/AABNDYBBAGgoAAAFCN38hMUAAABAAELAPSFEwAAAQABAAEAI4ACoIAAABOtZW9jAgOgYAAAE0NlbnAB2QsAAPMAAmF2AbQGAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/524ba66a7d9c.js b/pr/561/docs/search.index/524ba66a7d9c.js new file mode 100644 index 000000000..75ea378a1 --- /dev/null +++ b/pr/561/docs/search.index/524ba66a7d9c.js @@ -0,0 +1 @@ +rn_("AQsA9BATAAABAA8AAQABBAGwQBLGAAFlARYSAADzAAF0AcYTAAABDQDz3RMAADEAAQABEADzBhQAABYAAQDzgQNrbXMBAAA7MAAAAQAABgACAPoSAABgEwUAI4YCsEAT0QABZXMBBAD0RhAAAAEAAQABAPOAA2NydDOAhLBgEGMAAaAQAAAFkAEICQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/52b7dbce0a40.js b/pr/561/docs/search.index/52b7dbce0a40.js deleted file mode 100644 index 934c019b8..000000000 --- a/pr/561/docs/search.index/52b7dbce0a40.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYA9CYTAAABAAEAAQABDwD0BBQAAAEAAQABAPOHAmhtAQAA9HoSAAABAAEAAQDzBAFk9CASAAABAAEAAQAjh4SwoBO3AAGwQBJ4AAGwcBNlAAEVgAABAAGgQAAAEBdlOzAAAAEAAAcAAgA+BwUAzwcBABOAArBQD9IAAWRyAQkA9UYTAAABAAEAcwABALcCAICGsCASKwABTqxZko8YEUkB") \ No newline at end of file diff --git a/pr/561/docs/search.index/52e008104a8d.js b/pr/561/docs/search.index/52e008104a8d.js new file mode 100644 index 000000000..e3b3bc543 --- /dev/null +++ b/pr/561/docs/search.index/52e008104a8d.js @@ -0,0 +1 @@ +rn_("AQIA9XASAAABAOwAeQABABOAArAwEqEBP2lwAQYA8xwTAAABAAEA8wICYnMBxw8AAPMBAWbyOAcAAIsJAQIA9MgSAAABAJUAAQAzgAOwQBKWAAFpdXk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/52e323d7181b.js b/pr/561/docs/search.index/52e323d7181b.js new file mode 100644 index 000000000..e4ef5db26 --- /dev/null +++ b/pr/561/docs/search.index/52e323d7181b.js @@ -0,0 +1 @@ +rn_("AYICsCAQxgABsDARPAABZXABBQD0bQ8AAAEA6gABAFOAA7CQEW0AAWFpcgGBArCgE4UAAbCgE4cAAWNyxwAAAIWwUAyhAAGgIAAACT2gIAAAC9U8AAE6MAAAAQAAAAAACgAQAAAApgGnAVsE0AbuCO8IAxAEEHEQchCAEQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/52ecb858e1eb.js b/pr/561/docs/search.index/52ecb858e1eb.js new file mode 100644 index 000000000..0dd2ae2bf --- /dev/null +++ b/pr/561/docs/search.index/52ecb858e1eb.js @@ -0,0 +1 @@ +rn_("AYICsEASOQABsEASOwABNDYBCwDzMxMAAGgAAQABBgD0ExQAAAEACgABAPMCAXIBfBMAAPMDAWX0BRAAAAEAqQABAPOAA2FlaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/536f57712388.js b/pr/561/docs/search.index/536f57712388.js deleted file mode 100644 index e2510eeb0..000000000 --- a/pr/561/docs/search.index/536f57712388.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9ScRAAABAAEAAQABAAGAArBgEoIAAaAgAAAQfG95AQABoMAAABOgafTYEgAACAAbABsAAQYA9AQUAAABAAEAAQABAgD0ehAAAAEAmgABAAECAaBAAAASr3I7MAAAAQAABwACAHgQAQAPEQUA84ACYW9nAwAAhrCAEq4AWbCgEyQAAQwwBjswAAABAAAIAAMA0gsAADoRAwAbEgMA84ICZWkjAAKggAAAFBJmaPLJCAAANwoBAQD0uQsAAAEAsQUBABMAA7AwE7cAAbBQEooAAWVwcvRpDwAAAQDnAAEAAQADsEATgwABoUAAABPqoFAAABFhYmNmAd4GAADzgAJtbgEBhKCwAAATQLBAEDcAAbDAE28AAaBgAAARDhQgBPbFBgAADwkBADEBIQEOAQEFADswAAABAAAFAAEASRIFAAEHAPXPEgAAAQABAAEAAQAjgAKgUAAAEN9hb/MAhSBJAjswAAABAAAIAAQAHwcAAFIHBQCvDAAAFxEAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5372547b9446.js b/pr/561/docs/search.index/5372547b9446.js new file mode 100644 index 000000000..4cb59ef0b --- /dev/null +++ b/pr/561/docs/search.index/5372547b9446.js @@ -0,0 +1 @@ +rn_("AQMAOzAAAAEAAAUAAQBNEgUAAQQBoFAAABOQaPItEgAAAQABAAKwQBMmAAGgoAAAE7BlcjowAAABAAAAAAAHABAAAACYBpkGMwc0B3UPdg9lEGYQ84ADZ2lz") \ No newline at end of file diff --git a/pr/561/docs/search.index/538b5fc4e1ed.js b/pr/561/docs/search.index/538b5fc4e1ed.js deleted file mode 100644 index 5ba20b562..000000000 --- a/pr/561/docs/search.index/538b5fc4e1ed.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9CwRAAABAAEAAQABAQDzQhEAAAEAAQATgAIlFD3SUo9lcwEKAPMqEwAAAQABAAGAArAgE6MAAaBgAAAS9292AYACoDAAABI0oAAAABKwY2TzgIUFEAY=") \ No newline at end of file diff --git a/pr/561/docs/search.index/53915836831f.js b/pr/561/docs/search.index/53915836831f.js new file mode 100644 index 000000000..2f261897a --- /dev/null +++ b/pr/561/docs/search.index/53915836831f.js @@ -0,0 +1 @@ +rn_("AQkA8+MTAAABADUAAYACoEAAABLKsCAThQABaGkBDAGgoAAAFCd38hcUAAABAAEBAPOBDwAAAQABAPOAAnR1AYECsIAT8QABoGAAABQVZHM3AwCAhqBAAAATxrBgE5oATAKQDgEAAbBQEIwAAWP0LwcAAAEAAQAEAsOAhKAQAAAMKqBQAAASFQxABA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5392889fe77e.js b/pr/561/docs/search.index/5392889fe77e.js deleted file mode 100644 index b851be4e1..000000000 --- a/pr/561/docs/search.index/5392889fe77e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYICsEASNQABsEASNwABNDYBCwDzLxMAAGgAAQABBgD0DxQAAAEACgABAPMCAXIBeBMAAPMDAWX0AxAAAAEApwABAPOAA2FlaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/53d266f1bb24.js b/pr/561/docs/search.index/53d266f1bb24.js new file mode 100644 index 000000000..d01e997e8 --- /dev/null +++ b/pr/561/docs/search.index/53d266f1bb24.js @@ -0,0 +1 @@ +rn_("AQkA8+MTAAABADUAAYACoEAAABLKsCAThQABaGkBDAGgoAAAFCd38hcUAAABAAEBAPOBDwAAAQABAPOAAnR1AYECsIAT8QABoGAAABQVZHM3AwCDhqBAAAATxrBgE5oATAKQDgESAPT/EwAAAQABAAEAAQDGoFAAABJToAAAABAbsCAQzAABoFAAABFxoQAAABP6oEAAABOkAAMCCzswAAABAAAVAAcAhgUAAOULAACSDAAAkQ8NAPAQAABpEgEAnxMBAAEBAbCwE+wAAWw7MAAAAQAADAADAPgGCACxDAEAzw8BAAEBAaAwAAAQp2jz0AgAAC4AWwgBAgD0UBEAAAEAAQABABOBArAgEVQAAWFz84ICbm/3AQCAh6AgAAAFhaBAAAALzxUBBw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/53ffa8e8252a.js b/pr/561/docs/search.index/53ffa8e8252a.js deleted file mode 100644 index 12a588128..000000000 --- a/pr/561/docs/search.index/53ffa8e8252a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9M4IAAABAHQK4AAnAAAAyqEQAAAT26BAAAAQkLBgE8sAAaAQAAAMNrBQE2kAAbAwEPMAAaAAAAAL9LEgE+sAAbBAEI4CE0BOsAk6MAAAAQAAAAAAEwAQAAAA5AjlCPgI+QjAC8ELwgvKC80LhwwQEjsSPBI9EvMS9BIIEwkTeRN6Ew==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5478b18519c4.js b/pr/561/docs/search.index/5478b18519c4.js deleted file mode 100644 index b22d92500..000000000 --- a/pr/561/docs/search.index/5478b18519c4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOjAAAAEAAAAAAA4AEAAAALgMuQyQEG4RbxFwESQSLRIuEjISMxKIEokSvhK/EgEJAPP3EAAAAQABAAEKAPM7EgAAAQABAAEGAPW6EAAAAQABAAEAAQDzgAJkbnMAhLEgE6MAAQARA/KSEgAAAQABDQD2ChMAAAEAowBUABYAAQABgAKwoBMiAAGgEAAAC+ljdQEBAPQyEwAAAQBLAAEA8wABZfI/CQAAAQD3AACAxbAwEDcAAQACqAg=") \ No newline at end of file diff --git a/pr/561/docs/search.index/548eac6e4034.js b/pr/561/docs/search.index/548eac6e4034.js deleted file mode 100644 index 611bccd33..000000000 --- a/pr/561/docs/search.index/548eac6e4034.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQ0A9UYTAAABAAEAcwABAAEHAPMvEwAAaAABACOAAqEQAAATgG5yAQcA9DIRAAABAAEAAQAzAASgIAAACPew4BN1AAExZWlyOjAAAAEAAAAAAAkAEAAAAEAEQQQgB9kIHwwgDCEMIgzUENUQAQIA9IUQAAABAIYBAQABAwD08RAAAAEAbQEBAPMAAmJ1AZ8PAAABAwD0gxAAAAEAhgEBAPOEAmRzAQIA89sIAAABAFgA84ACaXQBGADzIBQAAAEAAQAjgQKwwBNEAAFjbQENAbBAE8cAAWX1jxMAAAEAAQABAAEAE4ICsAAQmwABa3MBBAD0LhAAAAEAAQABAAGBAqAgAAAQlrBAEtwAAWVp84ICZXQBBAGgYAAAEjRy9NcLAAABAMUDAQDzgANhZW8BCQD2XRIAAAEA+QCCADEAAQATgAKwYBBGAAFkbgEGAPVvEAAAAQABAAEAgwIBAwGgcAAAEphn9C0HAAABAAQCAQABCQDz3xMAAAEANQABgQKwgBPtAAGgYAAAFBFkcxcBAIiFsNAUEwABoEAAABPCsGATlgBMApAKAQQA9DITAAABAEsAAQBTgAOwkBQMAAFlaG8BAAGgQAAAEP5lAU8PAAAjgQKwUBCoAAFrdHf8AQCNoZAAABQDsLASpgABoKAAABJc/YEPOzAAAAEAACEACAB6AAAAgAADAE0FAQAJBwcAAgkHAPULBwDYDwEACRIAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/549a18f8219c.js b/pr/561/docs/search.index/549a18f8219c.js deleted file mode 100644 index cef0ef2de..000000000 --- a/pr/561/docs/search.index/549a18f8219c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBsIATUQABdAHjCAAAAYECoBAAABKwoHAAABL3YWPzAQFy8iYRAAAYAPOAAmVpI4ACsAALywABZHLzAAFl9IgAAAATDAgHAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/54b11bc65c3c.js b/pr/561/docs/search.index/54b11bc65c3c.js new file mode 100644 index 000000000..99a6061a8 --- /dev/null +++ b/pr/561/docs/search.index/54b11bc65c3c.js @@ -0,0 +1 @@ +rn_("AYkCsCAT1gABoDAAABPgaXATAAOgIAAAEpyggAAAEq9laXX1yQsAADQAAQABAAEAAYYCsJAT+wABoAAAABIsYmQBgAKwMBKQAAGgMAAAEHhydtcAAAKFoDAAAA/zoDAAABLmEAETOjAAAAEAAAAAAAkAEAAAAMoIywjMCPwI/QgLEBAQyBDJEG0SAQMBsDASqgABc/NMEAAAAQABAAEAADswAAABAAAKAAMA8hACACoTAwAIFAMAlwEAAIWgIAAABYmwIAfVAAFQGAH1LQwAAAEAAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/5535b627edd5.js b/pr/561/docs/search.index/5535b627edd5.js deleted file mode 100644 index ee1fe0d0e..000000000 --- a/pr/561/docs/search.index/5535b627edd5.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYA9AoRAAABAAEAAQABAgA7MAAAAQAADAAFAMMLAQAPEAUAQBIBAJ4SAQC6EwAA84ACZm4BAQA7MAAAAQAACAACAC8PBgDHEgEA84ACZG4BAQDzAQcAAAEAAQABhgKgAAAAEsCgAAAAEsFkcvMBAXYB7BIAAEMAA7CAElQAAbCwE+gAAWtscjswAAABAAAMAAMA+AYIALEMAQDNDwEAAQIA9coHAAABAAEAAQABAPMAhBRBAAF2AAAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/5589851be98b.js b/pr/561/docs/search.index/5589851be98b.js new file mode 100644 index 000000000..e26539fc6 --- /dev/null +++ b/pr/561/docs/search.index/5589851be98b.js @@ -0,0 +1 @@ +rn_("AQMBoEAAABOjZfLNEwAAAQABAAD0fhIAAAEAAQABAPMEAWT0JBIAAAEAAQABAKcAAAKFsKATuwABsEASfAABsHATaQABFYgAAZETAAABAAGwgBOlAAFw8qETAAABAEMAA6AgAAAQ4KBAAAASKGRlc/OADwAANQMBAPOAAmVp") \ No newline at end of file diff --git a/pr/561/docs/search.index/55c676c21acb.js b/pr/561/docs/search.index/55c676c21acb.js new file mode 100644 index 000000000..e747ca936 --- /dev/null +++ b/pr/561/docs/search.index/55c676c21acb.js @@ -0,0 +1 @@ +rn_("AQUA9D0SAAABAKQAAQABCAD09xIAAAEAhQABADMAA7BAEsYAAWFiZTowAAABAAAAAAAJABAAAAAEBwUHnwygDFIPwA8MEA0QFhLlEg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/55e23764ad73.js b/pr/561/docs/search.index/55e23764ad73.js new file mode 100644 index 000000000..ee6601756 --- /dev/null +++ b/pr/561/docs/search.index/55e23764ad73.js @@ -0,0 +1 @@ +rn_("AQEAOzAAAAEAAAcAAQAiCQcAAQIA99MPAADTAKQCAQABAHMAAQATgAKwMBBoAKVpdPMAAXPy7xMAAAEAM4ADsRATaQABZG5w") \ No newline at end of file diff --git a/pr/561/docs/search.index/561dd337b7bc.js b/pr/561/docs/search.index/561dd337b7bc.js new file mode 100644 index 000000000..a917417c6 --- /dev/null +++ b/pr/561/docs/search.index/561dd337b7bc.js @@ -0,0 +1 @@ +rn_("AQABoEAAABAvdPWeDAAAIQPZAgEAtgDzAAFzOzAAAAEAABgACACUBAIA3gsBAHcPAQA5EAEAeBABAGERAQASEwcA/xMDACOAArEQFAQAAWF0") \ No newline at end of file diff --git a/pr/561/docs/search.index/5626b261d60f.js b/pr/561/docs/search.index/5626b261d60f.js new file mode 100644 index 000000000..4a855c85e --- /dev/null +++ b/pr/561/docs/search.index/5626b261d60f.js @@ -0,0 +1 @@ +rn_("AQEA9DkHAAAvCNwAAQABBQD0qBIAAAEAkQABAPMCAWP13Q8AAAEAvgABAAEAYwAEoDAAAAvpoHAAABFaZW5zdvP7DwAAlwATAg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/566cafdb4fd7.js b/pr/561/docs/search.index/566cafdb4fd7.js new file mode 100644 index 000000000..5dcf22e5b --- /dev/null +++ b/pr/561/docs/search.index/566cafdb4fd7.js @@ -0,0 +1 @@ +rn_("AQUA9D0SAAABAKQAAQABCAD09xIAAAEAhQABADMBA7BAEsYAAWFiZfWfDAAAAQAgA1YCzwABAAD14AsAAAEAZAMBAAEA84ACc3UjgQKwgBLxAAFydAGAArBwEnkAAaAQAAAMgm56AQYA9AkQAAABALIAAQBzAISgoAAAFCcCART1VQUAAAEAcA5RAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/571482a0f60a.js b/pr/561/docs/search.index/571482a0f60a.js deleted file mode 100644 index fa4510055..000000000 --- a/pr/561/docs/search.index/571482a0f60a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQcA9PwSAAABAAEAAQDzBQF0OzAAAAEAAAgAAgC9CwAA6wsHAAEFAPMYEwAAAQABADcAAICFsDAP0gABoKAAABM0oDAAABNxEEFI") \ No newline at end of file diff --git a/pr/561/docs/search.index/579677a41519.js b/pr/561/docs/search.index/579677a41519.js deleted file mode 100644 index e7b677928..000000000 --- a/pr/561/docs/search.index/579677a41519.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9DkSAAABAKQAAQABCAD08xIAAAEAhQABADMBA7BAEsIAAWFiZfWfDAAAAQAeA1QCzwABAAD14AsAAAEAYgMBAAEA84ACc3UjgQKwgBLtAAFydAGAArBwEnUAAaAQAAAMgm56AQYA9AcQAAABALAAAQBzAISgoAAAFCMCART1VQUAAAEAbA5RAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/5802da10e9df.js b/pr/561/docs/search.index/5802da10e9df.js deleted file mode 100644 index 2eef7d2b0..000000000 --- a/pr/561/docs/search.index/5802da10e9df.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEAOzAAAAEAAAcAAQAiCQcAAQIA99EPAADRAKQCAQABAHMAAQATgAKwMBBkAKVpdPMAAXPy6xMAAAEAM4ADsRATZQABZG5w") \ No newline at end of file diff --git a/pr/561/docs/search.index/58045aae0759.js b/pr/561/docs/search.index/58045aae0759.js deleted file mode 100644 index 402d9900b..000000000 --- a/pr/561/docs/search.index/58045aae0759.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYECoCAAABP2sEAPggABYnABBQD0sxIAAAEAlQABAPMDAWMBHxIAAAEMAPT7EwAAAQABAAEA84ACbnYBgAKwMAwKAAGgMAAADAxpbwEDAaAAAAATw3MBbREAAMcDAICGsEALywABsAAFTwABkUgB") \ No newline at end of file diff --git a/pr/561/docs/search.index/5869f9d7bbdd.js b/pr/561/docs/search.index/5869f9d7bbdd.js new file mode 100644 index 000000000..8b6db71b9 --- /dev/null +++ b/pr/561/docs/search.index/5869f9d7bbdd.js @@ -0,0 +1 @@ +rn_("AQQA9NkTAAAMAB4ADwABAgGwQBIxAAFlAVYPAAABgAKgkAAAE5+gkAAAE6AyM5cCAADGoCAAAAwnoGAAABDEsGAMswABAWQAAzswAAABAAAKAAMA7AYFAPMLAADnEgMA") \ No newline at end of file diff --git a/pr/561/docs/search.index/59440e7d39eb.js b/pr/561/docs/search.index/59440e7d39eb.js new file mode 100644 index 000000000..9b1dcc5b5 --- /dev/null +++ b/pr/561/docs/search.index/59440e7d39eb.js @@ -0,0 +1 @@ +rn_("AYACsHAT+wABoAAAAASGZmcBAQA7MAAAAQAABwABAPULBwABAQGgcAAAEhNhAeYGAAAjgAKhAAAAFANkbnOAhKBgAAASEgBBSA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/597d8ff485a5.js b/pr/561/docs/search.index/597d8ff485a5.js new file mode 100644 index 000000000..da158231e --- /dev/null +++ b/pr/561/docs/search.index/597d8ff485a5.js @@ -0,0 +1 @@ +rn_("AQAA9IkQAAABAIYBAQAjgQKgYAAAEq9iaQEAAPR5DwAAAQDtAAEBI4ECsFASwgABZXMTgAKAByMewAFhcgGJArAgE9YAAaAwAAAT4GlwAQIA9JQSAAABAI8AAQABAwD0yBIAAAEAlQABAPOFAmJ1AQIA9PUQAAABAG0BAQDzgAJpbLcBAACFoCAAABKcEgEMOjAAAAEAAAAAABYAEAAAAEQH0QfSB9MH1AfJC/0L/gv/CwAMoQ9gEOAS4RIbE5oT4xPkE+YT8RPyExUUGRQ=") \ No newline at end of file diff --git a/pr/561/docs/search.index/59adb8e83cc6.js b/pr/561/docs/search.index/59adb8e83cc6.js new file mode 100644 index 000000000..cbcfe86f0 --- /dev/null +++ b/pr/561/docs/search.index/59adb8e83cc6.js @@ -0,0 +1 @@ +rn_("AYADsAATUAABsAATUgABsHATxAABNDZhAQQA9BMUAAABAAoAAQAjgQKgQAAAEN5tcAEBADswAAABAAAIAAMASBIAALkSAAAgFAYAxwEAAMWgQAAAD9+ggAAAEiNABoAIOzAAAAEAABYACAB9DwEAlRABANoQAwBJEQYALhMCAHwTAADUEwEABBQBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/59be03fa81eb.js b/pr/561/docs/search.index/59be03fa81eb.js deleted file mode 100644 index 012493ef2..000000000 --- a/pr/561/docs/search.index/59be03fa81eb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQsA9AwTAAABAA8AAQABBAGwQBLCAAFlARISAADzAAF0AcITAAABDQDz2RMAADEAAQABEADzAhQAABYAAQDzgQNrbXMBAAA7MAAAAQAABgACAPYSAABcEwUAI4YCsEATzQABZXNjgAOwQBBEAAFjcnQzgISwYBBfAAGgEAAABZABCAk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/59c3149c098e.js b/pr/561/docs/search.index/59c3149c098e.js new file mode 100644 index 000000000..9b68c03a6 --- /dev/null +++ b/pr/561/docs/search.index/59c3149c098e.js @@ -0,0 +1 @@ +rn_("AQIA9SsRAAABAAEAAQABAAGAArBgEoYAAaAgAAAQgG95AQABoMAAABOkafTcEgAACAAbABsAAQYA9AgUAAABAAEAAQABAgD0fhAAAAEAmgABAAECAaBAAAASs3I7MAAAAQAABwACAHwQAQATEQUA84ACYW9nAwAAhrCAErIAWbCgEygAAQwwBjswAAABAAAIAAMA0gsAAD4RAwAfEgMA84ICZWkjAAKggAAAFBZmaPLJCAAAOwoBAQD0uQsAAAEAtQUBABMAA7AwE7sAAbBQEo4AAWVwcvRrDwAAAQDpAAEAAQADsEAThwABoUAAABPuoFAAABFlYmNmAd4GAADzgAJtbgEBhKCwAAATRLBAEDkAAbDAE3MAAaBgAAAREhQgBPbFBgAAEQkBADMBIQEOAQEFADswAAABAAAFAAEATRIFAAEHAPXTEgAAAQABAAEAAQAjgAKgUAAAEONhb/MAhSBJAjswAAABAAAIAAQAHwcAAFIHBQCvDAAAGxEAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/59c5b0e1f8ad.js b/pr/561/docs/search.index/59c5b0e1f8ad.js deleted file mode 100644 index a10b55957..000000000 --- a/pr/561/docs/search.index/59c5b0e1f8ad.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYICsEATxAABsGASogABZXIBBQD0HxAAAAEAAQABAPOAAmZtAQYAOjAAAAEAAAAAAAgAEAAAAGQPZQ8OEV0SXhJXE9kTChQLFAEAArCwE28AAaFAAAAUA2Vn9E0HAAABAAEAAQDDAISgsAAAE0CwQBA3AAEUIAT3xQYAALcFWAMBADEBIQEOAWOAA7AwD6AAAWFlaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/59fb890d29b8.js b/pr/561/docs/search.index/59fb890d29b8.js deleted file mode 100644 index a1fae09c6..000000000 --- a/pr/561/docs/search.index/59fb890d29b8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsPAUDAABa/aAEwAABQABAAEAAQAlABMAArEAE/kAAWRu8kcSAAABABOAArAQDAYAAWVvAQUAOzAAAAEAAA0AAQAYEQ0AAQIA84wPAAABAAEAAQIA9IgPAAABAAEAAQABAwA7MAAAAQAACAABADkQCAABgAKgQAAAEIuwwBO9AAFlcwEBADswAAABAAATAAEAqQ8TACOAArCQEy0AAWltNzYAAIqgEAAAC9ygUAAAE4ywcBNtAAGgIAAADJucVRE7MAAAAQAABgADACgHAABlEAMAKRIBAPOAAmx0") \ No newline at end of file diff --git a/pr/561/docs/search.index/5a22fd2fcd2b.js b/pr/561/docs/search.index/5a22fd2fcd2b.js deleted file mode 100644 index fa1d07e65..000000000 --- a/pr/561/docs/search.index/5a22fd2fcd2b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYQCsAAQ+gABsAAQ/AABNDbzAAFh8igMAAABACOAArCQEQABFWx0AYACsHATAQABsIATOAABY3MBAAA6MAAAAQAAAAAACQAQAAAAUxFUEWcSaBJRE1ITpROmExYUFxTzgAJkZScBAICFoNAAABN4sBAEoQABoDAAAA/9AggL") \ No newline at end of file diff --git a/pr/561/docs/search.index/5a8f753530fc.js b/pr/561/docs/search.index/5a8f753530fc.js new file mode 100644 index 000000000..a98e87f44 --- /dev/null +++ b/pr/561/docs/search.index/5a8f753530fc.js @@ -0,0 +1 @@ +rn_("AQEAOjAAAAEAAAAAAAkAEAAAAGYPZw9XEBIRYRJiElsT3RMOFA8UAYACsOATVQABsDATbQABZHDDgISxQBQeAAGgkAAAExsCgAk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5b62c7da471c.js b/pr/561/docs/search.index/5b62c7da471c.js deleted file mode 100644 index 95a617a99..000000000 --- a/pr/561/docs/search.index/5b62c7da471c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBoEAAABFuZfOwDAAA5AMBAAEGAPSREAAAAQC4AAEAE4EDoAAAABDasSAUAAABYWRuARQA9R4UAAABAAEAAQABAAEFAbCAE8AAAXY7MAAAAQAABwACAEURBAAqEwIAI4ACsHARawABYmRXAAABhqDAAAAS9aCgAAATF6CQAAAS4bBQEAoAAQXgAvXpBgAAAQABAJwIbgQBBgDzQhIAAAEAqADzgANydHYBAwA7MAAAAQAABwACACYTAwAEFAMA8wABcwHDEwAA8wABcwFtEQAAZwEAgIagMAAAC/SwABLcAAGgEAAADJUSQA4=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5b67f142f4f7.js b/pr/561/docs/search.index/5b67f142f4f7.js new file mode 100644 index 000000000..e84b0f61c --- /dev/null +++ b/pr/561/docs/search.index/5b67f142f4f7.js @@ -0,0 +1 @@ +rn_("AQAAOzAAAAEAAAYAAgD6EgAAYBMFACOIArBAE9EAAWVzAQQBsDASywABY/MGEQAAAQABAAEFADswAAABAAAIAAMAdRECAHISBACSEwAA8wEDY2Vw83kMAAABAAEAAQIA9ucIAABXAMkGAQCyAAEA84ACbnI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5b76bc2d520b.js b/pr/561/docs/search.index/5b76bc2d520b.js new file mode 100644 index 000000000..d1768c5ce --- /dev/null +++ b/pr/561/docs/search.index/5b76bc2d520b.js @@ -0,0 +1 @@ +rn_("AQEA9RkJAAABAAEAAQABAPMAAWnzmAwAAHgHAQABAQGgQAAAE41l8v0TAAABAAEEAqAgAAARVqAwAAASG2JoAVUPAADnAACAxaAQAAAMmaAwAAAQAgQQKAE=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5bd4900427a6.js b/pr/561/docs/search.index/5bd4900427a6.js deleted file mode 100644 index e5b4a6710..000000000 --- a/pr/561/docs/search.index/5bd4900427a6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkA898TAAABADUAAYADoEAAABLGsCATgQABoCAAAA9caGl5AQkBoIAAABQSZgEAEwAAAQMBsAATlgBMc/ItEAAAEwNDgAOwIA9YAR6wUBIrAAFhb3IBAgD1WRAAAAEAAQBLAgEA8wADaXR1OjAAAAEAAAAAAA8AEAAAAFEH+wieDL0PNhBWEVwSlBKVEkQTRRNLE3UTdhOUE5UTAQYA9H4SAAABAIkBAQATAgKwYBKAAAFmbfKMDAAAAQAjggKwQBKsAAFlbAGAAqAwAAATwrCwExwAAWFsAQYA82YPAADcAAEAAQUA9GsTAAABAEkAAQDzAgFj8nMSAAABAAECAaAwAAAP/GEBCQwAAAGAArBQEKYAAbAgDzgAAWNu84ACbnQBBQA7MAAAAQAADgACAJIMAACPDw0AAQIAOzAAAAEAAAcAAQAiCQcA5wUAAAmgMAAADAigsAAAE5SggAAAESaw0BOjAAEwYWZpa21ydXY7MAAAAQAAVgIFAO8BAABUA+YASAcAAMMK5gCqDYYAAQwBoKAAABQjd/ITFAAAAQABAQDzfw8AAAEAAQDzgAJ0dQEDAPMvEgAAAQABAAEBAPW6EAAAAQABAAEAAQABAQGwMA9vAOl09joHAAABAI4AqQemAOwBY4ADsJATbQABYW10AQMBoEAAABPGZfLmEwAAAQATgAKwYBQWAAFlcgEDAaAAAAATS3MBdRAAAAECADowAAABAAAAAAAKABAAAAAgCSEJpg/aEtsSChMLE64TAhQYFBkUgwAEoIAAABIJsHAQ6gABsCAQigDqZm5ydgHIBwAAAYECoAAAAAj7oDAAAA9cc3THAQCAxrAAE6EAAbCQEgcAAaAQAAAHIAASiCgBAgA7MAAAAQAADQAGAN4PBQDnEAEAPhIBAGcTAQC5EwAA2BMAABOCArDwFBYAAWZnAYACsIAT7QABoGAAABQRZHMTgAKwwBMyAAFpbwEIAPWnEwAAAQABAAEAAQDzAgFm9RoQAAABAAEAAQABACOAA6AgAAAPVrCgE+sAAWRydPf7BwCPoDAAAA9Ml9cPOzAAAAEAAD0BHQBnBAEAlAQCAFcFAgB/BQIAogUBAJIGBAARBwAAKQcAAMIHAwDRCAIA/wgBAN4LAQAKDAEAMgwDAI4MAQA5DvUAdQ8BAPQPAgA3EAEASBACAHQQAQAHEQAAXREBABESAABPEgAAhhIBAO0SAQAOEwcA+xMDAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5bf126ddcd97.js b/pr/561/docs/search.index/5bf126ddcd97.js deleted file mode 100644 index bfe32641a..000000000 --- a/pr/561/docs/search.index/5bf126ddcd97.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBsAASlAABczswAAABAAALAAIADhMHAPsTAwBHAAAEhqCAAAAS77EAFAgAAbBAElAAAbCAFBYAAbBQEpYAARUAFvQyDgAAAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/5c10fab3c92f.js b/pr/561/docs/search.index/5c10fab3c92f.js new file mode 100644 index 000000000..97d42e46f --- /dev/null +++ b/pr/561/docs/search.index/5c10fab3c92f.js @@ -0,0 +1 @@ +rn_("AQgA9GYTAAABAIIABQATAAOwkBPIAAGwUBKuAVlnbHA7MAAAAQAAEgAJAPAPAgBmEQEAnRIBAL4SAQD1EgEAVxMBAI4TAQCdEwEA2hMBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5ccc63e2df25.js b/pr/561/docs/search.index/5ccc63e2df25.js deleted file mode 100644 index d3483aeff..000000000 --- a/pr/561/docs/search.index/5ccc63e2df25.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAOcAAgDFCwAAwwzmAPMAAW07MAAAAQAA5wACAHwFAACoBeYAAQMAOzAAAAEAAAgAAgAvDwYAxxIBAPMAAWM7MAAAAQAAVgAnAIgECwBKBQAA3QgBAN0LAADiCwIAmgwAAKYMAgC4DAEAVQ8AAFoPAQBdDwEAYw8AAOsPAgDyDwEA9w8BABcQAACKEAAAkBAAAN0QAQDqEAEA/hABAAIRAgBbEQEAbhECAHQRAAAkEgAALRIBADISAQB4EgEAiBIBAIwSAQCsEgEAvBIDAMISAQAiEwEANBMAAJ8TAADEEwQAzRMCAPOAAnJ3AQkA898TAAABADUAAYACoEAAABLGsCATgQABaGkBDAGgoAAAFCN38hMUAAABAAEBAPN/DwAAAQABAPOAAnR1AYECsIAT7QABoGAAABQRZHM3AwCBhqBAAAATwrBgE5YATAKQDgGIArAAE0wAAbAAE04AATQ2M4ADoDAAABEBZG5zYwADoBAAAASqYWVvAX8AAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5d3a2c95f56b.js b/pr/561/docs/search.index/5d3a2c95f56b.js new file mode 100644 index 000000000..c81b447bc --- /dev/null +++ b/pr/561/docs/search.index/5d3a2c95f56b.js @@ -0,0 +1 @@ +rn_("AQwBoKAAABQnd/IXFAAAAQABAQDzgQ8AAAEAAQABiYSggAAAFBWgQAAAE8agYAAAE+agkAAAFBkCgAoTgYSgoAAAE1uxoBQlAAGw0BO/AAEEAQnzgANhdHU=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5d3eeff63149.js b/pr/561/docs/search.index/5d3eeff63149.js new file mode 100644 index 000000000..9c011b457 --- /dev/null +++ b/pr/561/docs/search.index/5d3eeff63149.js @@ -0,0 +1 @@ +rn_("AQIAOzAAAAEAAAUAAQDzEwUA8w0BbTswAAABAAAFAAEAsxMFAEcAAACFsAATxAABsEASNgABoQAAABP5sAAS9ACHOAgCOzAAAAEAABgABgC1CwMAshAHAFgSAQDTEgQAqxMEABYUAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5d45dfdef8cc.js b/pr/561/docs/search.index/5d45dfdef8cc.js deleted file mode 100644 index cec8a307d..000000000 --- a/pr/561/docs/search.index/5d45dfdef8cc.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQACoCAAABL6sDARXwABaXTyYxIAAAEAAQMAOzAAAAEAAAYAAQDgEAYAAQgA9GITAAABAIIABQATAQOwkBPEAAGwUBKqAVlnbHA7MAAAAQAAEgAJAO4PAgBiEQEAmRIBALoSAQDxEgEAUxMBAIoTAQCZEwEA1hMBAAGAArAwEVsAAbAwEV0AAXJ2AQQBsAASJQABZDswAAABAAAFAAIAVxEDAFISAQC3BQABh7BQEicBDrBgEqgAAZQJAzowAAABAAAAAAALABAAAACJDIoMiww3DjgOhxAKEQsRDBENEaAS2RIjgAKgEAAADIhubwEDAPPrDwAAAQABACOAAqAAAAALx2RyYwCEoFAAABEHoDAAABAkFAEQ8mwHAAABAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5d5b1b8d153b.js b/pr/561/docs/search.index/5d5b1b8d153b.js deleted file mode 100644 index 4dc4d979a..000000000 --- a/pr/561/docs/search.index/5d5b1b8d153b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAAUAAgAyDAMAhhIBAAECAPP3EAAAAQABAAEGAPQEFAAAAQABAAEA8wYBbfQbEgAAAQABAAEA84ACbnbzgAJhaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5dbdf61761a4.js b/pr/561/docs/search.index/5dbdf61761a4.js deleted file mode 100644 index 26687ad77..000000000 --- a/pr/561/docs/search.index/5dbdf61761a4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQgA9GITAAABAIIABQATAAOwkBPEAAGwUBKqAVlnbHA7MAAAAQAAEgAJAO4PAgBiEQEAmRIBALoSAQDxEgEAUxMBAIoTAQCZEwEA1hMBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5de5f51edcc6.js b/pr/561/docs/search.index/5de5f51edcc6.js new file mode 100644 index 000000000..785a33e0a --- /dev/null +++ b/pr/561/docs/search.index/5de5f51edcc6.js @@ -0,0 +1 @@ +rn_("AQMA8+0PAAABAAEAAYACoLAAABOQsDAS4AABbnRDAAOgIAAAEJqwUBFrAAFlaGk7MAAAAQAABgADAMcLAAB8EQMAPBMBAPOAAmRy") \ No newline at end of file diff --git a/pr/561/docs/search.index/5e0b0166de52.js b/pr/561/docs/search.index/5e0b0166de52.js new file mode 100644 index 000000000..56c7bf042 --- /dev/null +++ b/pr/561/docs/search.index/5e0b0166de52.js @@ -0,0 +1 @@ +rn_("AQQA80YRAAABAAEAAYICsEASOQABsEASOwABNDYBCwDzMxMAAGgAAQABBgD0ExQAAAEACgABAPMCAXIBfBMAAPMCAWX0BRAAAAEAqQABABOAAqBQAAASbWR08wCEEQEB928QAAABAG4AHQABAAEALwE=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5ec77c098172.js b/pr/561/docs/search.index/5ec77c098172.js new file mode 100644 index 000000000..2cf579939 --- /dev/null +++ b/pr/561/docs/search.index/5ec77c098172.js @@ -0,0 +1 @@ +rn_("AQIAOjAAAAEAAAAAAAgAEAAAANAL0Qs2DzcPcQ9cEIAQ/BL9EgEAAPQGCQAAAQABAAEAAQUBsDASigABaPNzEwAAAQBrABODAqAwAAAQT2NwAQMA9G8PAAABAOoAAQABgQKgAAAAEQmgEAAAD1JldfOAAmFyAYECoJAAABNdsFASFwABYncTgAKwkBKiAAFucvMAAmV09EYQAAABAAEAAQABAQD1LQwAAAEAAQABAAEAE4ACsLATWQABYW8jAAKwQAynAAFldDswAAABAAAJAAQAnwQBAF0FAQAPDAEAMBEDAAECADswAAABAAAJAAIAtwcHAIQSAQABgAKwkBLrAAGgoAAAE1xldhOAArGAFCIAAWNtAYICsEAThwABoFAAABFlYmYTgAKgQAAAE7BkcyOAAqDQAAAT+mNu84CEEQFAAQUBsEASxgABZQEWEgAAQ4IDoQAAABQGoNAAABPda21zE4ACsGAQYwABYXIBBQA7MAAAAQAAhwACAHcQAACBEYYAAYIDsCAShgABsCAQAwABsEAQ+QABa2xzU4ADsCAT4QABa3R1AYmEoIAAABQVoEAAABPGoGAAABPmoJAAABQZAoAKE4KEoKAAABNbsaAUJQABsNATvwABBAEJAYACsXAUIAABoNAAABOZY28jgAKwYBBhAAFpbwEAAPTaCwAAAQBQAAEAI4ECoOAAABOyZXkBDQA6MAAAAQAAAAAABwAQAAAAvhK/ElcTWBOOE48T2hPbEwGBArBAEt4AAaDAAAATmGVvAQIAOjAAAAEAAAAAAAgAEAAAAGYPZw8SEWESYhJbE90TDhQPFPMBAW87MAAAAQAACQAEACsJAQAhEAMAYRABAFkTAQDzgANtbnIBAAA7MAAAAQAABgACAPoSAABgEwUAQ4ADsEAT0QABoCAAAAymZXJzIwACsDATPAABY3LyKBMAAAEAAYECsIASjAABoQAAABPcY2YBCwD05xIAAAEAAQABAAGAAqAAAAAQF6AAAAAQGDQ28wIBdgGtDAAA8wACZGwB5ggAANf+OQCSsKAThQABsHARVwABsIASawABoLAAABKknd1/OzAAAAEAABcACwCcAQEAmwQDAFoFAgDRBgEA2wYCAOgLAAB/DwAA3xAAAEYRAgAcEgIAwxMAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/5ed9ecced0b1.js b/pr/561/docs/search.index/5ed9ecced0b1.js deleted file mode 100644 index 3e89ec63f..000000000 --- a/pr/561/docs/search.index/5ed9ecced0b1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYQCsAAQ+gABsAAQ/AABNDbzAgFh8igMAAABAAEAAPU0EgAAbgABAEUBAQDzAAFk80ISAAABAKgAY4ADoCAAAAjIYWVv") \ No newline at end of file diff --git a/pr/561/docs/search.index/5f6b26235e7e.js b/pr/561/docs/search.index/5f6b26235e7e.js new file mode 100644 index 000000000..1fe04a340 --- /dev/null +++ b/pr/561/docs/search.index/5f6b26235e7e.js @@ -0,0 +1 @@ +rn_("AQIBsEAT4QABdDswAAABAAANAAYAbhIDANgSAQBFEwEAXBMBANYTAQD7EwEAE4ACsDASoQE/aXABBQDzHBMAAAEAAQATgAKgMAAAE3VleVMCA7BwE4IAAWJlcwHHDwAAEwACoCAAAAV9Zm32ewAAALwGAQDSAQEAuAc=") \ No newline at end of file diff --git a/pr/561/docs/search.index/5f940ff8b47f.js b/pr/561/docs/search.index/5f940ff8b47f.js deleted file mode 100644 index 10b11a5de..000000000 --- a/pr/561/docs/search.index/5f940ff8b47f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYMCsQAUGAABsNAUCgABa20BBAGgoAAAFCN38hMUAAABAAELAPSFEwAAAQABAAEAI4ACoIAAABOtZW9jBAOgYAAAE0NlbnAB2QsAAAEKAPNnEwAAAQBwABOAAqIQAAAUI2xvdwAAAIWgYAAAEgShAAAAE9oEgQM7MAAAAQAAOwAEAJMFBQAhBwAAdAczAAERAABDgAOwgBEAARWgAAAAAgdka3Q=") \ No newline at end of file diff --git a/pr/561/docs/search.index/600cd1d2735b.js b/pr/561/docs/search.index/600cd1d2735b.js new file mode 100644 index 000000000..1d9912de4 --- /dev/null +++ b/pr/561/docs/search.index/600cd1d2735b.js @@ -0,0 +1 @@ +rn_("AQQA9rUMAAABABsDAQAnAQEAAQoA80YSAAABAKgAAQEA9+4IAAABABQHAQBtAAEADgEjgAKwYBNZAAFpbwECAPR2DAAAAQAPBgEAAQUA9G8TAAABAEkAAQD3CAAAiLCQEygAAaAgAAAMeLCQEXMAAQTcAzowAAABAAAAAAAIABAAAABvBd8I4AgWDBcMgRCCEHcSeBI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/602fcfceec3f.js b/pr/561/docs/search.index/602fcfceec3f.js new file mode 100644 index 000000000..3c41e124e --- /dev/null +++ b/pr/561/docs/search.index/602fcfceec3f.js @@ -0,0 +1 @@ +rn_("AQkA8+MTAAABADUAAQ0BoKAAABQnd/IXFAAAAQABgQKwgBPxAAGgYAAAFBVkczcBAIaFoEAAABPGsGATmgBMApAK") \ No newline at end of file diff --git a/pr/561/docs/search.index/6116dfbf3fee.js b/pr/561/docs/search.index/6116dfbf3fee.js new file mode 100644 index 000000000..7e36dd6b2 --- /dev/null +++ b/pr/561/docs/search.index/6116dfbf3fee.js @@ -0,0 +1 @@ +rn_("AYYCoAAAABLEoAAAABLFZHIBgAKgcAAAE1SgMAAAEJdmdAELAaBAAAATo2XyzRMAAAEAI4ECsFAQbwABY3YBAAGwgBOlAAFw8qETAAABAEMGA6AgAAAQ4KBAAAASKGRlc/OADwAANQMBAPMABGlyc3Y7MAAAAQAADwAFAMoGBQBNEgUAeRIBAPASAADYEwAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/616317d0b360.js b/pr/561/docs/search.index/616317d0b360.js new file mode 100644 index 000000000..de3505e2c --- /dev/null +++ b/pr/561/docs/search.index/616317d0b360.js @@ -0,0 +1 @@ +rn_("AYQCoCAAABCmoDAAABENaXQBAQA7MAAAAQAAhwACAEUHAABDCYYAYwADsAACCQABZGVsOjAAAAEAAAAAAAcAEAAAAJcEYAVhBWIFSQfEEAUTBhM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/61cf61f4090d.js b/pr/561/docs/search.index/61cf61f4090d.js new file mode 100644 index 000000000..1a3e96733 --- /dev/null +++ b/pr/561/docs/search.index/61cf61f4090d.js @@ -0,0 +1 @@ +rn_("AQIA9SsRAAABAAEAAQABAAGAArBgEoYAAaAgAAAQgG95AQABoMAAABOkafTcEgAACAAbABsAAQYA9AgUAAABAAEAAQABAgD0fhAAAAEAmgABAAECAaBAAAASs3I7MAAAAQAABwACAHwQAQATEQUA84ACYW9nAwAAhrCAErIAWbCgEygAAQwwBjswAAABAAAIAAMA0gsAAD4RAwAfEgMA84ACZWk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/624a2471dcc3.js b/pr/561/docs/search.index/624a2471dcc3.js deleted file mode 100644 index 4cfcd8c61..000000000 --- a/pr/561/docs/search.index/624a2471dcc3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9PwSAAABAAEAAQABAAD1LQwAAAEAAQABAAEA84ACZ2sTgAKwsBNVAAFhbwGAAqAgAAALtKBAAAAL5mV0AYUCsHATfgABsDAS1AABZXMTAAOwQA9dAAGgYAAAEQhiZXM7MAAAAQAAEgAEAIMFAQCcBgoA1g8BACkQAwABAwD08g8AAAEABAABAAEKAaBAAAATxmXy5hMAAAEAE4ACsGASKQABY2nzgAJkcvMAAmVvOzAAAAEAAAkAAgBuBwUAsQcDAAECAbAwENQAAW47MAAAAQAACQABAKoLCQDzgAJvdAEDADswAAABAADnAAIASAcAAMMK5gABAgGgcAAAEXRpOzAAAAEAAPkAAgBHBwAAygn4ABOAAqBAAAAL5XJ1AQQA9LMSAAABAJUAAQABAwDzQhIAAAEAqADzgAJhb9cHAACIsEAMpwABsTAT4wABNIEWOzAAAAEAAB4ADQCfBAEAXQUBAL0LAADrCwcADwwBAGsPAQBUEAEA3xAAACwRAwBpEQEAHxIAAH4SAQAIFAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/6282c0b1a5f5.js b/pr/561/docs/search.index/6282c0b1a5f5.js new file mode 100644 index 000000000..cc0311c34 --- /dev/null +++ b/pr/561/docs/search.index/6282c0b1a5f5.js @@ -0,0 +1 @@ +rn_("AQkA8+MTAAABADUAAQ0BoKAAABQnd/IXFAAAAQABgQKwgBPxAAGgYAAAFBVkczcBAIWFoEAAABPGsGATmgBMApAK") \ No newline at end of file diff --git a/pr/561/docs/search.index/62bb0fe614ca.js b/pr/561/docs/search.index/62bb0fe614ca.js deleted file mode 100644 index 9392d5001..000000000 --- a/pr/561/docs/search.index/62bb0fe614ca.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQA9C4QAAABAAEAAQABAAA6MAAAAQAAAAAACgAQAAAAaw9sD1QQVRDfEGkRahF+En8SCBQJFPMBAXnycxMAAAEAAQADoKAAABO6oCAAABL6sDARXwABZWl08mMSAAABAAEDADswAAABAAAGAAEA4BAGAAEIAPRiEwAAAQCCAAUAEwEDsJATxAABsFASqgFZZ2xwOzAAAAEAABIACQDuDwIAYhEBAJkSAQC6EgEA8RIBAFMTAQCKEwEAmRMBANYTAQABgAKwMBFbAAGwMBFdAAFydgECAbAAEiUAAWQ7MAAAAQAABQACAFcRAwBSEgEAI4ECoJAAABO5aW8BBwD01RMAAAwAHgAPAHcWAAGJsFATcwABsFASJwEOsGASqAABtQkDOjAAAAEAAAAAAA4AEAAAAIkMigyLDDcOOA5NEE4QhxCqEAoRCxEMEQ0RoBLZEkOAA6AgAAAMf6AQAAAMiG1ubwEDAPTrDwAAAQABABEBAYACoLAAABOMsDAS3AABbnRDAAOgIAAAEJawUBFnAAFlaGk7MAAAAQAABgADAMcLAAB4EQMAOBMBAPOAAmRyhwsAAAqAAecAEAGAAeoAEAGgUAAAEQegUAAAE7+gMAAAEBmgMAAAECQwMWNlaW9zdHV39WwHAAABAOIHwAJVAQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/62ce08268925.js b/pr/561/docs/search.index/62ce08268925.js deleted file mode 100644 index 86a152354..000000000 --- a/pr/561/docs/search.index/62ce08268925.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQwBoKAAABQjd/ITFAAAAQABAQDzfw8AAAEAAQABiYSggAAAFBGgQAAAE8KgYAAAE+KgkAAAFBUCgAoTgYSgoAAAE1exoBQhAAGw0BO7AAEEAQnzgANhdHU=") \ No newline at end of file diff --git a/pr/561/docs/search.index/6314fc2a70f4.js b/pr/561/docs/search.index/6314fc2a70f4.js new file mode 100644 index 000000000..49f6b0239 --- /dev/null +++ b/pr/561/docs/search.index/6314fc2a70f4.js @@ -0,0 +1 @@ +rn_("AYQCoCAAABCmoDAAABENaXQBAQA7MAAAAQAAhwACAEUHAABDCYYA8wACZWz1lwQAALICewlBAgEAAQIAOzAAAAEAAOcAAgDFCwAAwwzmAMcAAACFsLASsAABoBAAABM0sDAMwQABFDACOzAAAAEAABMBCwDSAQYAfAUAAKgF5gAUBwcAyg8CABwRDQBDEQIAFxIBAJoSAQDrEgEAfxMCAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/63263a26070c.js b/pr/561/docs/search.index/63263a26070c.js new file mode 100644 index 000000000..ad890b831 --- /dev/null +++ b/pr/561/docs/search.index/63263a26070c.js @@ -0,0 +1 @@ +rn_("AQAA9PwPAAABAKsAAQABhAKwABD+AAGwABEAAAE0NvMCAWHyKAwAAAEAAQEA9TgSAABuAAEARQEBAPOAAmVv84ACaGs=") \ No newline at end of file diff --git a/pr/561/docs/search.index/635558f41241.js b/pr/561/docs/search.index/635558f41241.js deleted file mode 100644 index 25d15c547..000000000 --- a/pr/561/docs/search.index/635558f41241.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoJAAABLgaPKoEgAAAQDzAgFk8ucGAAABAAECADswAAABAAAFAAEA7xMFAPMLAW07MAAAAQAABQABAK8TBQAjgAKwIAyWAAFhbwECAPPNCAAANAMBAAGKArAAE0wAAbAAE04AATQ2I4ECoDAAAAwqZXIBgAKwQBFpAAEb8AtPDERjdbcGAACHsBAP2AABsFATywABEVEJ9X0EAAAKAMEAAQBuBw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/63d5d6c31ff0.js b/pr/561/docs/search.index/63d5d6c31ff0.js deleted file mode 100644 index e7bb838f0..000000000 --- a/pr/561/docs/search.index/63d5d6c31ff0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQ8A9IoTAAABAEsAAQABBAD0BRAAAAEAsAABAAECADowAAABAAAAAAAJABAAAABTEVQRZxJoElETUhOlE6YTFhQXFPMAAW/yQQkAAAEAU4ADsQAT6AABaG9ww4CEoBAAABLGsIATCAABBQAG") \ No newline at end of file diff --git a/pr/561/docs/search.index/647c300dd98f.js b/pr/561/docs/search.index/647c300dd98f.js new file mode 100644 index 000000000..43213d884 --- /dev/null +++ b/pr/561/docs/search.index/647c300dd98f.js @@ -0,0 +1 @@ +rn_("AQMA9qwMAADHAloAAQC6AgEAAQQAOzAAAAEAAAoABAAREAUARBIBAKISAQC+EwAAAYYCoAAAABLEoAAAABLFZHLzAgF2AfASAADzgAJlbycBAADHoDAAAA9yoHAAABIVoIAAABORoNAAABM0oLAAABORQEUICTswAAABAAAJAAMAmQUCAPIGBAANDAEAI4ACUuy4WOHrZHIBAAA6MAAAAQAAAAAACgAQAAAAIAkhCagP3hLfEg4TDxOyEwYUHBQdFBOAAqAwAAAQJ2x0w4AEoAAAABAXoAAAABAYNDZhZQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/64e8e6aa2299.js b/pr/561/docs/search.index/64e8e6aa2299.js new file mode 100644 index 000000000..10516d8eb --- /dev/null +++ b/pr/561/docs/search.index/64e8e6aa2299.js @@ -0,0 +1 @@ +rn_("AQABoDAAABEJdPRGEAAAAQABAAEAAYACoAAAABAXoAAAABAYNDbzAwF2Aa0MAAAXAQAAh7CgEowAAbAgC9oAAbBgEoYAAbCAEmsAAaAgAAAQgAlERjowAAABAAAAAAAJABAAAADbBtwG3QboC38P3xAcEh0SHhLDEw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/64ec27cd0928.js b/pr/561/docs/search.index/64ec27cd0928.js new file mode 100644 index 000000000..e800ecf34 --- /dev/null +++ b/pr/561/docs/search.index/64ec27cd0928.js @@ -0,0 +1 @@ +rn_("AQUBsEASNgABZfJYEgAAAQABggKgkAAAE5+gkAAAE6AyMwEAAqAgAAASEqAgAAAIx2ltOzAAAAEAAA4ABgB+BAAAtQQFADcJAAA+DwMAdRMAAIcTAQDzAAFzAbEQAAABBQD0ABMAAAEAAQABAAEAAPUtDAAAAQABAAEAAQDzgAJna3OAhLCwE1kAARFIAAEFAaBAAAARcmXzsAwAAOgDAQATgAKgMAAAC+ZlcgGAA7BQE5gAAaAQAAALtKBwAAAS8GduckcBAACFoGAAABN2oFAAABPHoKAAABNoFQEEOzAAAAEAABEABADwAQEAOxAIADYRAwAzEgIAAYUCsHATggABsDAS2AABZXMTAAOwQA9fAAGgYAAAEQxiZXM7MAAAAQAAEgAEAIMFAQCcBgoA2A8BACsQAwABAwD09A8AAAEABAABAAEKAaBAAAATymXy6hMAAAEAE4ACsGASLQABY2nzgAJkcvMAAmVvOzAAAAEAAAkAAgBuBwUAsQcDAAECAbAwENgAAW47MAAAAQAACQABAKoLCQABAAD0MBAAAAEAAQABAAEBADswAAABAADnAAIAoQUAANcH5gBjAAOwEBKWAAFlaXM6MAAAAQAAAAAADgAQAAAA2ggVCRYJFwkYCdAL0Qs2DzcPXg9xD1wQgBD8Ev0S44CEsCAHKgABEUAEAQGEsDALvgABoEAAAAx/oIAAABDfsEAMgAABAAAdAf8BAAABBQD1ShMAAAEAAQBzAAEAE4ACoAAAAAbQYWcBAwD0CxIAAAEAZQEBAPOAAmlvAQEAOzAAAAEAAOcAAgBIBwAAwwrmAAEIAbBAE8sAAWX1kxMAAAEAAQABAAEA84ECZ3QBAQGgcAAAEXhpOzAAAAEAAPkAAgBHBwAAygn4AAEFAPNMEAAAAQABAPOAAmFvE4ACoEAAAAvlcnUBgAKgAAAAByygEAAACNlkeBMAArAgDKcAAWVy8qIPAAABABOAArCwFBAAAXJ4AQoA9AcTAAABAAEAAQATgAKwEBCTAiphZQEEAPQrEAAAAQABAAEAAQQAOjAAAAEAAAAAAAcAEAAAAKgSqRK3ErgSOhM7E00TThMBAwDzRhIAAAEAqADTgISwQBCFAAEBSAHHvwMAj6CAAAASSLBgDJYAAbBADA8AAbEwE+cAAT+pHzswAAABAABLACIAcAAAAHUAAACfBAEAqgQAAF0FAQASBwEAIgcAACYHAQAOCQAAIgkHADkJAQC9CwAA0wsBANoLAQDrCwcADwwBACsMAQB2DAEAbQ8BAN0PAQBYEAEAYxABAHsQAACcEAIArBABAL4QBADjEAAAMBEDAG0RAQAjEgAAghIBAIYSAQCzEgAADBQBAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/64f401d0105c.js b/pr/561/docs/search.index/64f401d0105c.js deleted file mode 100644 index c44133ce1..000000000 --- a/pr/561/docs/search.index/64f401d0105c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9IUQAAABAIYBAQAjgQKgYAAAEqtiaQEAAPR3DwAAAQDrAAEBI4ECsFASvgABZXMTgAKAByMewAFhcgGJArAgE9IAAaAwAAAT3GlwAQIA9JASAAABAI8AAQABAwD0xBIAAAEAlQABAPOFAmJ1AQIA9PEQAAABAG0BAQDzgAJpbLcBAACFoCAAABKYEgEMOjAAAAEAAAAAABYAEAAAAEQH0QfSB9MH1AfJC/0L/gv/CwAMnw9cENwS3RIXE5YT3xPgE+IT7RPuExEUFRQ=") \ No newline at end of file diff --git a/pr/561/docs/search.index/655cb440fbba.js b/pr/561/docs/search.index/655cb440fbba.js deleted file mode 100644 index 01baf5ae0..000000000 --- a/pr/561/docs/search.index/655cb440fbba.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBsIAS1gABdfITCQAAAQAjgAKwEAkRAAEzNgEGAPNtEAAAAQAOAROAArAAD0EAAW91AQIA8yMHAADsAQEAAQMA8zsSAAABAAEAI4ACsAAROAABaGkBAAA7MAAAAQAAEwABAFgHEwAjgAKgMAAADIdhZfOAAnJ0E4ACsDATJAABYWwBAAGggAAAFBJm8skIAAA3CgEHAPXPEgAAAQABAAEAAQAjgAKgUAAAEN9hb/MCAmZzOzAAAAEAAAgABAAfBwAAUgcFAK8MAAAXEQAAE4ACoEAAAAvGYW8BAwGwQBPdAAF08kETAAABACOFAqBAAAATcWJzIwADoEAAABB/oFAAABDsYWJm99YIAAABAEgAJwcBAF8AAQATgQKgUAAAEXRndAGAAqBAAAARYaAgAAATUGFpAQIA9AwJAAABALUHAQABAgDzAwwAAAEAAQATgAOwEAkKAAGwMBODAAFpdXkBAgA7MAAAAQAACwACADoTBQDvEwUA8wgBbTswAAABAAAMAAMA6RAAAFYSBQCvEwUAAYECoIAAABJEoHAAABOUYXPzgAJucrfbAQCNoUAAABPqoCAAAAkOoFAAAA+HN5UPOzAAAAEAACcCBQDtAQAAEwIrAd4GAABHBwAAygn4AA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6572656d5491.js b/pr/561/docs/search.index/6572656d5491.js new file mode 100644 index 000000000..80c4f198c --- /dev/null +++ b/pr/561/docs/search.index/6572656d5491.js @@ -0,0 +1 @@ +rn_("AQMAOzAAAAEAAAkABAArCQEAIRADAGEQAQBZEwEAAQIBsEAT4QABdDswAAABAAANAAYAbhIDANgSAQBFEwEAXBMBANYTAQD7EwEAE4ACsDASoQE/aXABiAKwABNQAAGwABNSAAE0NhOBAqAwAAARBWRzAYACoCAAAAwqsGATggABbngBBQDzHBMAAAEAAQATgAKgMAAAE3VlefMAhBIAA/LHDwAA3gDzgAJydA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/65778eba0eb8.js b/pr/561/docs/search.index/65778eba0eb8.js new file mode 100644 index 000000000..438ec671e --- /dev/null +++ b/pr/561/docs/search.index/65778eba0eb8.js @@ -0,0 +1 @@ +rn_("AQUBsEASNgABZfJYEgAAAQABAAA7MAAAAQAAEQAEAPABAQA7EAgANhEDADMSAgABCgGwQBPLAAFl9ZMTAAABAAEAAQABAEcGAACHsCAQkwIqsMAUEAABoCAAAAbQsDAHKgABGIkKOjAAAAEAAAAAAAwAEAAAACYHJwcOCdML1AvaC9sLKwwsDHYMdwyGEocS") \ No newline at end of file diff --git a/pr/561/docs/search.index/657959d9dfd0.js b/pr/561/docs/search.index/657959d9dfd0.js deleted file mode 100644 index 505d334ea..000000000 --- a/pr/561/docs/search.index/657959d9dfd0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBsAAMngMfc/LeCwAAAQABAgDz3QsAAAAFAQAjAAKgQAAADJplcvKYBAAAAQABgAKgQAAAE0OwMBJlAAFhcwECAaBAAAATxmXy5hMAAAEA84AEbG5ydg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/65a163d17275.js b/pr/561/docs/search.index/65a163d17275.js new file mode 100644 index 000000000..b630e1b9d --- /dev/null +++ b/pr/561/docs/search.index/65a163d17275.js @@ -0,0 +1 @@ +rn_("AQkBoEAAABPKZfLqEwAAAQABgAKwAAyTAAGggAAAEzVkcAEDAaAAAAAPwXPyTw8AAAEAAQIDsGAStQABsNATzQABoIAAABNUaXJzAdgTAAD3AACAhaEwAAAT6ZBJAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/663d2872c782.js b/pr/561/docs/search.index/663d2872c782.js new file mode 100644 index 000000000..7bc2a8936 --- /dev/null +++ b/pr/561/docs/search.index/663d2872c782.js @@ -0,0 +1 @@ +rn_("AQ0A9UoTAAABAAEAcwABAAECAPSJEAAAAQCGAQEAAQMA9PUQAAABAG0BAQDzAAJidQGhDwAAAQMA9IcQAAABAIYBAQDzhAJkcwECAPPbCAAAAQBYAPOAAml0ARgA8yQUAAABAAEAI4ECsMATSAABY20BBQGgYAAAEjhy9NcLAAABAMcDAQABCQD2YRIAAAEA+QCCADEAAQATgAKwYBBKAAFkbgEDAaBwAAASnGf0LQcAAAEABAIBAAEJAPPjEwAAAQA1AAGBArCAE/EAAaBgAAAUFWRzFwEAiYWw0BQXAAGgQAAAE8awYBOaAEwCkApnXgAAi7BwEKwAAbCwEqoAAaCgAAASYLDwE3kAAW2BD/SAAAAAAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/6673efda2f92.js b/pr/561/docs/search.index/6673efda2f92.js new file mode 100644 index 000000000..226fb5b19 --- /dev/null +++ b/pr/561/docs/search.index/6673efda2f92.js @@ -0,0 +1 @@ +rn_("AYkCsCAT1gABoDAAABPgaXATAAOgIAAAEpyggAAAEq9laXX1yQsAADQAAQABAAEAAYYCsJAT+wABoAAAABIsYmQBAgD00AsAAAEAZQMBAAEAAPQGCQAAAQABAAEAAQAAOzAAAAEAAAYAAgD6EgAAYBMFACOBArBAE9EAAWVz84ADZXh5AQAA9AIJAAABAAEAAQAjgAKwIBKQAAFyeEcBAADGsMATJgABoBAAABDxsEAMkAABoDAAABB4AESAC/RLBQAAAQBKBwEA1wAAAIWgMAAAD/OgMAAAEuYQARM6MAAAAQAAAAAACgAQAAAAygjLCMwI/Aj9CNULCxAQEMgQyRBtEg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/667f942da920.js b/pr/561/docs/search.index/667f942da920.js deleted file mode 100644 index a4d3e2664..000000000 --- a/pr/561/docs/search.index/667f942da920.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsGATdQABZQGsEwAAAQYA9KISAAABAEUBAQABBAD0vBIAAAEABwEBAPMAA2VyczowAAABAAAAAAAJABAAAADyCPMI9AjBEAARBxIIEhUSbRNuEw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/66e0002203c5.js b/pr/561/docs/search.index/66e0002203c5.js new file mode 100644 index 000000000..bf25f6497 --- /dev/null +++ b/pr/561/docs/search.index/66e0002203c5.js @@ -0,0 +1 @@ +rn_("AQcA9HwRAAABAAEAAQAjAQKgcAAAEXthcgFMBwAAAQMAOzAAAAEAAAgAAgAvDwYAyxIBAPMAAmN0OzAAAAEAAFYAJwCIBAsASgUAAN0IAQDdCwAA4gsCAJoMAACmDAIAuAwBAFcPAABcDwEAXw8BAGUPAADtDwIA9A8BAPkPAQAZEAAAjhAAAJQQAADhEAEA7hABAAIRAQAGEQIAXxEBAHIRAgB4EQAAKBIAADESAQA2EgEAfBIBAIwSAQCQEgEAsBIBAMASAwDGEgEAJhMBADgTAACjEwAAyBMEANETAgA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/67cbe6f7fe57.js b/pr/561/docs/search.index/67cbe6f7fe57.js new file mode 100644 index 000000000..ab34181eb --- /dev/null +++ b/pr/561/docs/search.index/67cbe6f7fe57.js @@ -0,0 +1 @@ +rn_("AQ0A9UoTAAABAAEAcwABAAEHAPMzEwAAaAABACOAAqEQAAAThG5yAQcA9DYRAAABAAEAAQAzAASgIAAACPew4BN5AAExZWlyOjAAAAEAAAAAAAkAEAAAAEAEQQQgB9kIHwwgDCEMIgzYENkQAQIA9IkQAAABAIYBAQABAwD09RAAAAEAbQEBAPMAAmJ1AaEPAAABAwD0hxAAAAEAhgEBAPOEAmRzAQIA89sIAAABAFgA84ACaXQBGADzJBQAAAEAAQAjgQKwwBNIAAFjbQENAbBAE8sAAWX1kxMAAAEAAQABAAEAE4ICsAAQnwABa3MBBAD0MBAAAAEAAQABAAGBAqAgAAAQmrBAEuAAAWVp84ICZXQBBAGgYAAAEjhy9NcLAAABAMcDAQDzgANhZW8BCQD2YRIAAAEA+QCCADEAAQATgAKwYBBKAAFkbgEGAPVzEAAAAQABAAEAgwIBAwGgcAAAEpxn9C0HAAABAAQCAQABCQDz4xMAAAEANQABgQKwgBPxAAGgYAAAFBVkcxcBAIiFsNAUFwABoEAAABPGsGATmgBMApAKAQQA9DYTAAABAEsAAQBTgAOwkBQQAAFlaG8BAAGgQAAAEQJlAVEPAAAjgQKwUBCsAAFrdHf8AQCNoZAAABQHsLASqgABoKAAABJg/YEPOzAAAAEAACEACAB6AAAAgAADAE0FAQAJBwcAAgkHAPULBwDaDwEADRIAAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/680921c7e0dc.js b/pr/561/docs/search.index/680921c7e0dc.js deleted file mode 100644 index 102a5159b..000000000 --- a/pr/561/docs/search.index/680921c7e0dc.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsEAS2gABoMAAABOUZW8BAgD0TBEAAAEAAQABABMAA7AgEVAAAbCAE6UAAWFzdAGIDAAAAQQA84QPAAABAAEAs4CEsEAS7QABQQAG") \ No newline at end of file diff --git a/pr/561/docs/search.index/68e07ac36fec.js b/pr/561/docs/search.index/68e07ac36fec.js new file mode 100644 index 000000000..7d6b2fa77 --- /dev/null +++ b/pr/561/docs/search.index/68e07ac36fec.js @@ -0,0 +1 @@ +rn_("AQYA9FUTAAABAFMAAQAjgAKhEAAAFAdjchOAAqAgAAAI2mh5AQEBoGAAABP6c/JUEQAAAQAjgAKwIAk/AAFldQGAArAgD6kAAaCQAAATsGFlAQcBsEATywABZfWTEwAAAQABAAEAAQABBAGwABKYAAFzOzAAAAEAAAsAAgASEwcA/xMDAEcAAASGoIAAABLzsQAUDAABsEASVAABsIAUGgABsFASmgABFQAW9DIOAAABAAEAAQCDAISwQBQQAAGwMBKKAAGwMBMmAAHAAAM6MAAAAQAAAAAACQAQAAAAmgSQEJEQNBE1EToROxFzE3QT3xMBAwGwQBPhAAF08kUTAAABACOFAqBAAAATdWJzAYACoAAAAAj6oCAAABCDZ3ABAQD0UBEAAAEAAQABAPOAAmRst+gAAIyg0AAAEv6gUAAAEPCgkAAAExqwUBJ5AAGgMAAADB63mAc7MAAAAQAAYQATAPIBAQD4AQEASAQDAKAFAACYBgEAMwcBAEYHAADWCAEA4wgAAO0IAAAfCQAANww+AIgMAAB1DwEAShABAGUQAQCqEAEAKxEEAC8SAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/690e03933450.js b/pr/561/docs/search.index/690e03933450.js deleted file mode 100644 index ceac190b6..000000000 --- a/pr/561/docs/search.index/690e03933450.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAEoAAAABAZsCAQyAABoFAAABFtoEAAABOgZGxzdjswAAABAAATAAYAhgUAAOULAACSDAAAjw8NAOwQAACbEwEAAQIA9EwRAAABAAEAAQAThAKwIBFQAAFhc/OAAmFl") \ No newline at end of file diff --git a/pr/561/docs/search.index/694efa293f2d.js b/pr/561/docs/search.index/694efa293f2d.js deleted file mode 100644 index 57f6b6772..000000000 --- a/pr/561/docs/search.index/694efa293f2d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9DkSAAABAKQAAQABCAD08xIAAAEAhQABADMBA7BAEsIAAWFiZfWfDAAAAQAeA1QCzwABAAD14AsAAAEAYgMBAAEA84ACc3UjgQKwgBLtAAFydAEGAPQHEAAAAQCwAAEAUwCEsIASdQABoKAAABQjAgEU9VUFAAABAGwOUQABAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/69ca62b1ffb3.js b/pr/561/docs/search.index/69ca62b1ffb3.js new file mode 100644 index 000000000..57209ac82 --- /dev/null +++ b/pr/561/docs/search.index/69ca62b1ffb3.js @@ -0,0 +1 @@ +rn_("AQACoCAAABL+sDARYwABaXTyZxIAAAEAAQMAOzAAAAEAAAYAAQDkEAYAAQgA9GYTAAABAIIABQATAQOwkBPIAAGwUBKuAVlnbHA7MAAAAQAAEgAJAPAPAgBmEQEAnRIBAL4SAQD1EgEAVxMBAI4TAQCdEwEA2hMBAAGAArAwEV8AAbAwEWEAAXJ2AQQBsAASKQABZDswAAABAAAFAAIAWxEDAFYSAQC3BQABh7BQEisBDrBgEqwAAZQJAzowAAABAAAAAAALABAAAACJDIoMiww3DjgOixAOEQ8REBEREaQS3RIjgAKgEAAADIhubwEDAPPtDwAAAQABACOAAqAAAAALx2RyYwCEoFAAABELoDAAABAmFAEQ8mwHAAABAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6a152aadbb4b.js b/pr/561/docs/search.index/6a152aadbb4b.js deleted file mode 100644 index 2b346bbd2..000000000 --- a/pr/561/docs/search.index/6a152aadbb4b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9JASAAABAI8AAQABAwD0xBIAAAEAlQABAPMCAmJ1OjAAAAEAAAAAABMAEAAAABwHHQceB2EPYg8HEAgQJhAnELgQuRBlEWYRjhKPEpsSnBKrEh4THxM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/6a2ff05481fe.js b/pr/561/docs/search.index/6a2ff05481fe.js new file mode 100644 index 000000000..d018f7caa --- /dev/null +++ b/pr/561/docs/search.index/6a2ff05481fe.js @@ -0,0 +1 @@ +rn_("AQEAOjAAAAEAAAAAAAgAEAAAANgI/g+hEKIQoxBmE2cT6RPuEwEBAqBAAAAT06AwAAAQp2Vo9dAIAAAuABMDAQBHBQECAPRQEQAAAQABAAEAE4ECsCARVAABYXPzgAJubwECAPQ0EAAAAQABAAEAEwACoNAAABPYY3PyqQ8AAAEA84ADZWlv") \ No newline at end of file diff --git a/pr/561/docs/search.index/6a4e9b07d877.js b/pr/561/docs/search.index/6a4e9b07d877.js deleted file mode 100644 index 5ec50ab37..000000000 --- a/pr/561/docs/search.index/6a4e9b07d877.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsHASRwABoLAAABOAZW8jAQOwcBF1AAGAEukAEPBtbnM7MAAAAQAAGgAGADwHAQDACAUAswwBAMoQCQAIEQAAyRIFAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6a5bdf242f8f.js b/pr/561/docs/search.index/6a5bdf242f8f.js new file mode 100644 index 000000000..99a406668 --- /dev/null +++ b/pr/561/docs/search.index/6a5bdf242f8f.js @@ -0,0 +1 @@ +rn_("AQACoDAAABCboJAAABL/MGj1exEAAIwBAQABAAEAE4ACoDAAAA9XZHIjAYSwEAjGAySwIAu7AP+gMAAAD3wSABj1dgUAAC4AAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/6a81a15ea6e9.js b/pr/561/docs/search.index/6a81a15ea6e9.js deleted file mode 100644 index a35fc8dc3..000000000 --- a/pr/561/docs/search.index/6a81a15ea6e9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOzAAAAEAAAYAAgAyEQMALxICAAEKAbBAE8cAAWX1jxMAAAEAAQABAAEA8wACaXP02gsAAAEAUAABACOBAqDgAAATrmV5") \ No newline at end of file diff --git a/pr/561/docs/search.index/6a8dac8a9d9b.js b/pr/561/docs/search.index/6a8dac8a9d9b.js new file mode 100644 index 000000000..c92edab9e --- /dev/null +++ b/pr/561/docs/search.index/6a8dac8a9d9b.js @@ -0,0 +1 @@ +rn_("AYACsHASCwABsCAUEAABaW8BAAGw8BQQAAFr9oQTAAAFAAEAAQABACUA8wUBZPJLEgAAAQABAgDzXRAAAAEAAQDzAAFpOjAAAAEAAAAAAAcAEAAAADgQYBJIE0kTeRN6E5gTmRMjgwKwsBPvAAFhcwGBAqCgAAAStKBAAAAP+29284CEAVAB") \ No newline at end of file diff --git a/pr/561/docs/search.index/6ab71af3e20b.js b/pr/561/docs/search.index/6ab71af3e20b.js deleted file mode 100644 index d796e6255..000000000 --- a/pr/561/docs/search.index/6ab71af3e20b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9VsRAAABABwBAQBWAQEBAPedEAAAAQABAMMCAQCCAAUAAQIA9DIQAAABAAEAAQATgAKg0AAAE9Rjc/OAAmVvI4ACsAAHJAABbHTzAAJhcvI4DwAAAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/6ae55cc10661.js b/pr/561/docs/search.index/6ae55cc10661.js new file mode 100644 index 000000000..5cb4ddd82 --- /dev/null +++ b/pr/561/docs/search.index/6ae55cc10661.js @@ -0,0 +1 @@ +rn_("AQcA9UoTAAABAAEAcwABAAEHAPNMEAAAAQABAAGAAqAAAAAHLKAQAAAI2WR48wEBZfKiDwAAAQDnAAAAhbBgDJYAAbBADA8AATIIAfSqBAAAeAKKCQEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/6af36f232884.js b/pr/561/docs/search.index/6af36f232884.js new file mode 100644 index 000000000..9fd9ccf22 --- /dev/null +++ b/pr/561/docs/search.index/6af36f232884.js @@ -0,0 +1 @@ +rn_("AQUAOzAAAAEAAAcAAwBDEQIA6xIBAH8TAgABBADzRhEAAAEAAQAjAAKgYAAAEm1hcvNvEAAAAQC8AQGAAqEQAAAUA7CAE/sAAWl1NwQAgoexUBQeAAGgAAAAEFCwcBNIAAGhMAAAFBIKQBsTgAKwEBJ5AAFpcg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6b3d293deee6.js b/pr/561/docs/search.index/6b3d293deee6.js new file mode 100644 index 000000000..e76e667cc --- /dev/null +++ b/pr/561/docs/search.index/6b3d293deee6.js @@ -0,0 +1 @@ +rn_("AQMAOzAAAAEAAIcAAgBFBwAAQwmGAAGEArBwE6EAAaBAAAAQl2lzAQcA83EQAAABAA4BI4ACoLAAABJIYXQBAAOwMAjwAAGwMBMFAAGgIAAAB0ZhZG8BBgIAADcDAICGoMAAABOZsAATbQABAJgV") \ No newline at end of file diff --git a/pr/561/docs/search.index/6c127a50b2cc.js b/pr/561/docs/search.index/6c127a50b2cc.js new file mode 100644 index 000000000..4f9e5bb4f --- /dev/null +++ b/pr/561/docs/search.index/6c127a50b2cc.js @@ -0,0 +1 @@ +rn_("AQAAOzAAAAEAAAYAAgD6EgAAYBMFACOIArBAE9EAAWVzAQQBsDASywABY/MGEQAAAQABAAEFADswAAABAAAIAAMAdRECAHISBACSEwAA8wMDY2Vw83kMAAABAAEAAQABsGATeQABZQGwEwAA8wIBc/byCAAAAQABANEHPwAVAQECAaBQAAARBXIBpRAAAPOAA2ZtcA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6c530d02ab41.js b/pr/561/docs/search.index/6c530d02ab41.js deleted file mode 100644 index c2f73879e..000000000 --- a/pr/561/docs/search.index/6c530d02ab41.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsFATfgABoAAAAAjZY3QBAQD0/BIAAAEAAQABAAEDAPSaDAAAmgaZAAEAAYACoBAAAAwqoFAAABIRY2QBAgDzzQgAADQDAQDzAAFt84cEAADBAAEAAYECoBAAABKwoHAAABL3YWPzAAFy8ywHAAD6CRgAZw8AgIiwMA9ZAMqgMAAAE/UpMCM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/6c8b565dd978.js b/pr/561/docs/search.index/6c8b565dd978.js deleted file mode 100644 index 8047c7b30..000000000 --- a/pr/561/docs/search.index/6c8b565dd978.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9S0JAAABAAEAAQABACOAAqCgAAAT9WZwRwAAAIWwMA88AAGgUAAAD/2wcBCBAAGxQBQcAAGBKQDyUQUAAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/6d8cc2ed1313.js b/pr/561/docs/search.index/6d8cc2ed1313.js deleted file mode 100644 index cfef3db39..000000000 --- a/pr/561/docs/search.index/6d8cc2ed1313.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQADoKAAABO6oCAAABL6sDARXwABZWl08mMSAAABAAEDADswAAABAAAGAAEA4BAGAAEIAPRiEwAAAQCCAAUAEwEDsJATxAABsFASqgFZZ2xwOzAAAAEAABIACQDuDwIAYhEBAJkSAQC6EgEA8RIBAFMTAQCKEwEAmRMBANYTAQABgAKwMBFbAAGwMBFdAAFydgECAbAAEiUAAWQ7MAAAAQAABQACAFcRAwBSEgEAI4ECoJAAABO5aW8BBwD01RMAAAwAHgAPAHcLAAGIsFASJwEOsGASqAABlQkDOjAAAAEAAAAAAA4AEAAAAIkMigyLDDcOOA5NEE4QhxCqEAoRCxEMEQ0RoBLZEiOAAqAQAAAMiG5v") \ No newline at end of file diff --git a/pr/561/docs/search.index/6dfbbd7cf8df.js b/pr/561/docs/search.index/6dfbbd7cf8df.js deleted file mode 100644 index f6531ae59..000000000 --- a/pr/561/docs/search.index/6dfbbd7cf8df.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoDAAABEFdPJEEAAAAQABgAKgAAAAEBWgAAAAEBY0NvMDAXYBrQwAABcBAACHsKASiAABsCAL2gABsGASggABsIASZwABoCAAABB8CURGOjAAAAEAAAAAAAkAEAAAANsG3AbdBugLfQ/bEBgSGRIaEr8T") \ No newline at end of file diff --git a/pr/561/docs/search.index/6e4c3193eddd.js b/pr/561/docs/search.index/6e4c3193eddd.js deleted file mode 100644 index f33a6610b..000000000 --- a/pr/561/docs/search.index/6e4c3193eddd.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOjAAAAEAAAAAAAgAEAAAANAL0Qs2DzcPbw9YEHwQ+BL5EgEAAPQGCQAAAQABAAEAAQUBsDAShgABaPNvEwAAAQBrABODAqAwAAAQS2NwAQMA9G0PAAABAOgAAQABgQKgAAAAEQWgEAAAD1BldfOAAmFyAYECoJAAABNZsFASEwABYncTgAKwkBKeAAFucvMAAmV08kQQAAABAAEBAPUtDAAAAQABAAEAAQATgAKwsBNVAAFhbyMAArBADKcAAWV0OzAAAAEAAAkABACfBAEAXQUBAA8MAQAsEQMAAQIAOzAAAAEAAAkAAgC3BwcAgBIBAAGAArCQEucAAaCgAAATWGV2E4ACsYAUHgABY20BggKwQBODAAGgUAAAEWFiZhOAAqBAAAATrGRzI4ACoNAAABP2Y27zgIQRAUABBQGwQBLCAAFlARISAABDggOhAAAAFAKg0AAAE9lrbXMTgAKwYBBfAAFhcgEFADswAAABAACHAAIAcxAAAH0RhgABggOwIBKCAAGwIBABAAGwQBD1AAFrbHNTgAOwIBPdAAFrdHUBiYSggAAAFBGgQAAAE8KgYAAAE+KgkAAAFBUCgAoTgoSgoAAAE1exoBQhAAGw0BO7AAEEAQkBgAKxcBQcAAGg0AAAE5VjbyOAArBgEF0AAWlvAQAA9NoLAAABAFAAAQAjgQKg4AAAE65leQENADowAAABAAAAAAAHABAAAAC6ErsSUxNUE4oTixPWE9cTAYECsEAS2gABoMAAABOUZW8BAgA6MAAAAQAAAAAACAAQAAAAZA9lDw4RXRJeElcT2RMKFAsU8wEBbzswAAABAAAJAAQAKwkBAB8QAwBdEAEAVRMBAPOAA21ucgEAADswAAABAAAGAAIA9hIAAFwTBQBDgAOwQBPNAAGgIAAADKZlcnMjAAKwMBM4AAFjcvIkEwAAAQABgQKwgBKIAAGhAAAAE9hjZgELAPTjEgAAAQABAAEAAYACoAAAABAVoAAAABAWNDbzAgF2Aa0MAADzAAJkbAHmCAAA1/45AJKwoBOBAAGwcBFTAAGwgBJnAAGgsAAAEqCd3X87MAAAAQAAFwALAJwBAQCbBAMAWgUCANEGAQDbBgIA6AsAAH0PAADbEAAAQhECABgSAgC/EwAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/6e7e72e7f0eb.js b/pr/561/docs/search.index/6e7e72e7f0eb.js deleted file mode 100644 index 3848409ec..000000000 --- a/pr/561/docs/search.index/6e7e72e7f0eb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9PoPAAABAKkAAQABhAKwABD6AAGwABD8AAE0NvMCAWHyKAwAAAEAAQEA9TQSAABuAAEARQEBAPOAAmVv84ACaGs=") \ No newline at end of file diff --git a/pr/561/docs/search.index/6e98d18aefa1.js b/pr/561/docs/search.index/6e98d18aefa1.js deleted file mode 100644 index 59bed4121..000000000 --- a/pr/561/docs/search.index/6e98d18aefa1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYkCsCAT0gABoDAAABPcaXATAAOgIAAAEpiggAAAEqtlaXX1yQsAADQAAQABAAEAAYYCsJAT9wABoAAAABIoYmQBAgD00AsAAAEAZQMBAAEAAPQGCQAAAQABAAEAAQAAOzAAAAEAAAYAAgD2EgAAXBMFACOBArBAE80AAWVz84ADZXh5AQAA9AIJAAABAAEAAQAjgAKwIBKMAAFyeEcBAADGsMATIgABoBAAABDtsEAMkAABoDAAABB0AESAC/RLBQAAAQBKBwEA1wAAAIWgMAAAD/GgMAAAEuIQARM6MAAAAQAAAAAACgAQAAAAygjLCMwI/Aj9CNULCRAOEMQQxRBpEg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6ede7ccd0b48.js b/pr/561/docs/search.index/6ede7ccd0b48.js deleted file mode 100644 index 62f2e1e94..000000000 --- a/pr/561/docs/search.index/6ede7ccd0b48.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMA9DIMAAABAAEAAQABAAGwUBOjAAFyAaMEAABTAYSwQBItAAGwQBPdAAGYAAQ6MAAAAQAAAAAAKAAQAAAAbQRuBG8EcgXbCNwIAQk0CYIMVA/DD8QP0Q8AEFkQWhBbEKIQDhJqEmsSbBJtEpgSphKnEtQS1RJBE0ITRhNHE0gTWBNZE7sTvBPSE9MT9xP4Ew==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6f1ace4f0243.js b/pr/561/docs/search.index/6f1ace4f0243.js deleted file mode 100644 index ff2209179..000000000 --- a/pr/561/docs/search.index/6f1ace4f0243.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQACoCAAABL6sDARXwABaXTyYxIAAAEAAQMAOzAAAAEAAAYAAQDgEAYAAQgA9GITAAABAIIABQATAQOwkBPEAAGwUBKqAVlnbHA7MAAAAQAAEgAJAO4PAgBiEQEAmRIBALoSAQDxEgEAUxMBAIoTAQCZEwEA1hMBAAGAArAwEVsAAbAwEV0AAXJ2AQQBsAASJQABZDswAAABAAAFAAIAVxEDAFISAQC3BQABh7BQEicBDrBgEqgAAZQJAzowAAABAAAAAAALABAAAACJDIoMiww3DjgOhxAKEQsRDBENEaAS2RIjgAKgEAAADIhubwEDAPPrDwAAAQABACOAAqAAAAALx2RyYwGEoFAAABEHoDAAABAkFAEQ8mwHAAABABOAArBgEkcAAWNnE4ADoLAAABOAoEAAAA42ZW9z") \ No newline at end of file diff --git a/pr/561/docs/search.index/6f35e75853c4.js b/pr/561/docs/search.index/6f35e75853c4.js new file mode 100644 index 000000000..929197937 --- /dev/null +++ b/pr/561/docs/search.index/6f35e75853c4.js @@ -0,0 +1 @@ +rn_("AYACsHASSwABoLAAABOEZW8jAQOwcBF5AAGAEu0AEPBtbnM7MAAAAQAAGgAGADwHAQDACAUAswwBAM4QCQAMEQAAzRIFAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/6f3b4b773035.js b/pr/561/docs/search.index/6f3b4b773035.js deleted file mode 100644 index 513a9dc5a..000000000 --- a/pr/561/docs/search.index/6f3b4b773035.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkBoIAAABQSZgEAEwAAAQIA9VkQAAABAAEASwIBAPMAAml1OjAAAAEAAAAAAAcAEAAAADYQXBJEE0UTdRN2E5QTlRMBCAD1pxMAAAEAAQABAAEA8wIBZvUaEAAAAQABAAEAAQATgAKwoBPrAAFydPMCAmFz80gQAAABAAEAAYABOaUt2hmMdPOAAmFl") \ No newline at end of file diff --git a/pr/561/docs/search.index/6fa3f569eb52.js b/pr/561/docs/search.index/6fa3f569eb52.js deleted file mode 100644 index f93017e86..000000000 --- a/pr/561/docs/search.index/6fa3f569eb52.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQoBoIAAABQSZgEAEwAAAQgA9acTAAABAAEAAQABAPMDAWb1GhAAAAEAAQABAAEA84MCYXMBAgKgIAAAEVKgMAAAEhdiaAFTDwAAI4ACoIAAABK1YXDzAAJobQGGBAAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/6fa75f89f072.js b/pr/561/docs/search.index/6fa75f89f072.js new file mode 100644 index 000000000..c4b8561da --- /dev/null +++ b/pr/561/docs/search.index/6fa75f89f072.js @@ -0,0 +1 @@ +rn_("AQMA9qwMAADHAloAAQC6AgEAAQQAOzAAAAEAAAoABAAREAUARBIBAKISAQC+EwAAAYYCoAAAABLEoAAAABLFZHLzAgF2AfASAADzgAJlbycBAADHoDAAAA9yoHAAABIVoIAAABORoNAAABM0oLAAABORQEUICTswAAABAAAJAAMAmQUCAPIGBAANDAEAI4ACUuy4WOHrZHIBAAA6MAAAAQAAAAAACgAQAAAAIAkhCagP3hLfEg4TDxOyEwYUHBQdFBOAAqAwAAAQJ2x084ACYWU=") \ No newline at end of file diff --git a/pr/561/docs/search.index/6fdf2b584d10.js b/pr/561/docs/search.index/6fdf2b584d10.js new file mode 100644 index 000000000..97a34387c --- /dev/null +++ b/pr/561/docs/search.index/6fdf2b584d10.js @@ -0,0 +1 @@ +rn_("AQIBsEAT4QABdDswAAABAAANAAYAbhIDANgSAQBFEwEAXBMBANYTAQD7EwEAE4ACsDASoQE/aXABBQDzHBMAAAEAAQATgAKgMAAAE3VleVMBA7BwE4IAAWJlcwHHDwAAE4ADsDAT7wABsCAG0QABZWxz") \ No newline at end of file diff --git a/pr/561/docs/search.index/6ffa824fa9c9.js b/pr/561/docs/search.index/6ffa824fa9c9.js deleted file mode 100644 index 3cd8948ba..000000000 --- a/pr/561/docs/search.index/6ffa824fa9c9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAABYACQDeDwUA5xABAHERAgA+EgEAbhIEAGcTAQCOEwAAuRMAANgTAAAjgAOh8AAAFCOw8BQWAAFjZmcjgAKwUBMkAAFtbgEFAPNnEwAAAQBwAPMEAWMBBxEAAAEBAbBwE70AAXA7MAAAAQAACQACAKkHBwBPEAEAAQIAOzAAAAEAAAsAAgA6EwUA7xMFAPMBAW07MAAAAQAADQAEAH4MAADpEAAAVhIFAK8TBQATAAKgMAAADIJlc/J1EQAAAQABggKwcBOdAAGgQAAAEJNpc/cBAICGsJATgQABkEkI") \ No newline at end of file diff --git a/pr/561/docs/search.index/701e18490106.js b/pr/561/docs/search.index/701e18490106.js new file mode 100644 index 000000000..ab4ad4a7b --- /dev/null +++ b/pr/561/docs/search.index/701e18490106.js @@ -0,0 +1 @@ +rn_("AQwA8y4TAAABAAEAAQYA8/IQAAABAAEAAYICsGAStQABsNATzQABaXITgAKwEAyTAAFlaRcDAIOIsTAT6gABoGAAABDxoFAAABCEsJASiAABsEAQgQABtBAH8wABYfQMCQAAAQC5BwEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/70287420808a.js b/pr/561/docs/search.index/70287420808a.js new file mode 100644 index 000000000..9292f6afc --- /dev/null +++ b/pr/561/docs/search.index/70287420808a.js @@ -0,0 +1 @@ +rn_("AYACsAAQ/gABsAARAAABNDYBBAGgoAAAFCd38hcUAAABAAELAPSJEwAAAQABAAEAI4ACoIAAABOxZW9jAgOgYAAAE0dlbnAB2QsAAPMAAmF2AbQGAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/704d757f67fa.js b/pr/561/docs/search.index/704d757f67fa.js new file mode 100644 index 000000000..b9adb3e99 --- /dev/null +++ b/pr/561/docs/search.index/704d757f67fa.js @@ -0,0 +1 @@ +rn_("AYACsFAQhQABoLAAABNoY3MBBADzSw8AAAEAAQABgAKgUAAAEFegYAAAEMVpcgGAAqAgAAAMJ6BgAAAQxGVoAQEBoCAAABDDYvMjDAAAAQABABOBAqAQAAAMJmFjAYACoBAAABM0sDAMwQABZXMjAAKgQAAAE8pld/LqEwAAAQABAwA7MAAAAQAABQACAB8MAwDYEAEAAQYA9IISAAABAIkBAQATAAKwYBKEAAFmbfKMDAAAAQABAQD0kBAAAAEAqQABACOAAqCwAAATT2RnAYICoKAAABK0oEAAAA/7b3bzgANnbnIBgAKgQAAAEnugMAAAD0hobLc/AACKsEAPSQABNGBXOzAAAAEAABoABAD6AQAATAQOAKoLCQB9DAAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/708b0febc9a1.js b/pr/561/docs/search.index/708b0febc9a1.js new file mode 100644 index 000000000..b9609fd8e --- /dev/null +++ b/pr/561/docs/search.index/708b0febc9a1.js @@ -0,0 +1 @@ +rn_("AQMBoAAAABK6c/RZDwAA2AMBAAMAAQECsGATpwABsEAT4QABZHQ7MAAAAQAADQAGAG4SAwDYEgEARRMBAFwTAQDWEwEA+xMBAAEBA7BwEXkAAbCAEksAAYAS7QAQ8G1uczswAAABAAALAAIAwAgFAM0SBQCjgISgsAAAEzSxcBQaAAEIQIIBAISgcAAAEhKgcAAAEI6xABOnAAGwABKuAVkCIQHyUwUAAAEAZwQAAIcru1pUJHmgEAAABYWwMBKhAT+gQAAAELERwQw7MAAAAQAABgACAPoSAABgEwUA") \ No newline at end of file diff --git a/pr/561/docs/search.index/711105b55fc6.js b/pr/561/docs/search.index/711105b55fc6.js deleted file mode 100644 index a4d5bf986..000000000 --- a/pr/561/docs/search.index/711105b55fc6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQACoDAAABCXoJAAABL7MGj1dxEAAIwBAQABAAEAE4ACoDAAAA9VZHIjAYSwEAjGAySwIAu7AP+gMAAAD3oSABj1dgUAAC4AAQABAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/715f6cda5699.js b/pr/561/docs/search.index/715f6cda5699.js deleted file mode 100644 index cc481f37a..000000000 --- a/pr/561/docs/search.index/715f6cda5699.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQYAOzAAAAEAAAkAAQDKEAkAI4ADsGAS7QABsDAPUQABaXN0AQgA9acTAAABAAEAAQABAPMBAWb1GhAAAAEAAQABAAEAY4ADoDAAABKvZWd0") \ No newline at end of file diff --git a/pr/561/docs/search.index/71bcd3cb0085.js b/pr/561/docs/search.index/71bcd3cb0085.js new file mode 100644 index 000000000..0287d82b2 --- /dev/null +++ b/pr/561/docs/search.index/71bcd3cb0085.js @@ -0,0 +1 @@ +rn_("AQIBsEAT4QABdDswAAABAAANAAYAbhIDANgSAQBFEwEAXBMBANYTAQD7EwEAE4ACsDASoQE/aXABBQDzHBMAAAEAAQATgAKgMAAAE3VleVMAA7BwE4IAAWJlcwHHDwAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/71f423a61c5f.js b/pr/561/docs/search.index/71f423a61c5f.js deleted file mode 100644 index 576e1236a..000000000 --- a/pr/561/docs/search.index/71f423a61c5f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQgA9acTAAABAAEAAQABAPMAAWY7MAAAAQAABQACAOQBAAAaEAQAAQIAOzAAAAEAAAsAAgA6EwUA7xMFAPMGAW07MAAAAQAADQAEAH4MAADpEAAAVhIFAK8TBQBjgAOwAAjwAAFlbXM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/731cfc3d033b.js b/pr/561/docs/search.index/731cfc3d033b.js deleted file mode 100644 index a6c4c5cd1..000000000 --- a/pr/561/docs/search.index/731cfc3d033b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACoAAAABAVoAAAABAWNDYBgAOwABNMAAGwABNOAAGwcBPAAAE0NmEBBAD0DxQAAAEACgABACOBAqBAAAAQ2m1wAQEAOzAAAAEAAAgAAwBEEgAAtRIAABwUBgDHAQACxaBAAAAP3aCAAAASH0AGgAg7MAAAAQAAFgAIAHsPAQCREAEA1hADAEURBgAqEwIAeBMAANATAQAAFAEA8wACZXY6MAAAAQAAAAAAEgAQAAAABAIFAogFrQw8Dz0PVg9wDwMQBBCrEKwQNRI2EjcSOBIvE5cTmBMBgQKwcBDWAAGwcBDYAAE0NiOAArAQBzMAAW5wAQMCsEASjAABoDAAABLiZXf0CRAAAAUAtgABABOBAqBwAAATG2dvAQQAOzAAAAEAAAYAAgC8CwAAuwwFAGOAA7BQD3sAAWRzdFcBAACFoBAAAA/dsSAT0AABESEBOzAAAAEAAAoAAwB0AAAAjQAFAEwRAwA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/735698ad2cbf.js b/pr/561/docs/search.index/735698ad2cbf.js deleted file mode 100644 index 3b0c9a7d9..000000000 --- a/pr/561/docs/search.index/735698ad2cbf.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoLAAABM0YvPBEgAAIgEBAAGAAqAgAAAPWKAwAAATQGFy8wABdAFRBwAAAQQBoEAAABPGZfLmEwAAAQABBQA7MAAAAQAACwAFAN4PBQA+EgEAZxMBALkTAADYEwAA4wGEoDAAAA9WhQACOzAAAAEAAAsABQB/BQIAkgYEAAoMAQAHEQAATxIAAGOAA7AAD3kDR2Rucg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/7359d03f24c8.js b/pr/561/docs/search.index/7359d03f24c8.js deleted file mode 100644 index 39bb80bb4..000000000 --- a/pr/561/docs/search.index/7359d03f24c8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAAUAAQBJEgUAAQQBoFAAABOMaPIpEgAAAQABAAKwQBMiAAGgoAAAE6xlcjowAAABAAAAAAAHABAAAACYBpkGMwc0B3MPdA9hEGIQ84ADZ2lz") \ No newline at end of file diff --git a/pr/561/docs/search.index/73772e5a75b7.js b/pr/561/docs/search.index/73772e5a75b7.js deleted file mode 100644 index 42b149371..000000000 --- a/pr/561/docs/search.index/73772e5a75b7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBsAASlAABczswAAABAAALAAIADhMHAPsTAwBHAAABhqCAAAAS77EAFAgAAbBAElAAAbCAFBYAAbBQEpYAARUAFvQyDgAAAQABAAEAAQUA84QPAAABAAEAY4CEsEAQDAABoAAAAAa0APAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/73b0aa288e56.js b/pr/561/docs/search.index/73b0aa288e56.js new file mode 100644 index 000000000..ca107f3de --- /dev/null +++ b/pr/561/docs/search.index/73b0aa288e56.js @@ -0,0 +1 @@ +rn_("AQQBsAASmAABczswAAABAAALAAIAEhMHAP8TAwBHAAABhqCAAAAS87EAFAwAAbBAElQAAbCAFBoAAbBQEpoAARUAFvQyDgAAAQABAAEAAQUA84YPAAABAAEAY4CEsEAQDgABoAAAAAa0APAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/73e05ea17e51.js b/pr/561/docs/search.index/73e05ea17e51.js deleted file mode 100644 index 31fa802f0..000000000 --- a/pr/561/docs/search.index/73e05ea17e51.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAAUAAQDvEwUA8w0BbTswAAABAAAFAAEArxMFACMDhLBAEjIAAaEAAAAT9bAAEvAAhzAIAjswAAABAAAUAAUArhAHAFQSAQDPEgQApxMEABIUAAA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/745f19b6d4cd.js b/pr/561/docs/search.index/745f19b6d4cd.js new file mode 100644 index 000000000..764464c4b --- /dev/null +++ b/pr/561/docs/search.index/745f19b6d4cd.js @@ -0,0 +1 @@ +rn_("AQMBoAAAABK6c/RZDwAA2AMBAAMAAQECsGATpwABsEAT4QABZHQ7MAAAAQAADQAGAG4SAwDYEgEARRMBAFwTAQDWEwEA+xMBAAEBA7BwEXkAAbCAEksAAYAS7QAQ8G1uczswAAABAAALAAIAwAgFAM0SBQCjgISgsAAAEzSxcBQaAAEIQIJHAQAAhSu7WlQkebEQE6cAAbAwEqEBPxGBCDswAAABAAAGAAIA+hIAAGATBQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/74cc3e63f115.js b/pr/561/docs/search.index/74cc3e63f115.js deleted file mode 100644 index 15577ccb5..000000000 --- a/pr/561/docs/search.index/74cc3e63f115.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9IUQAAABAIYBAQABAAD0dw8AAAEA6wABASOCArBQEr4AAWVzAQIA9JASAAABAI8AAQABAwD0xBIAAAEAlQABAPOFAmJ1AQIA9PEQAAABAG0BAQDzgAJpbPMAA2J0dTowAAABAAAAAAAPABAAAABEB9EH0gfTB9QHnw9cEBcTlhPfE+AT4hPtE+4TERQVFAEMAPN7EwAAAQABAAGAArAACOgAAaAgAAAMrmRuAQYA9I4SAAABAI8AAQDzAwFi9IMQAAABAIYBAQCXBgAAh7BAD3UAAaBwAAASFrCQErwAATgJAzowAAABAAAAAAAkABAAAACcBZ0FngWfBQYHBwfmC6MMpAylDKkMqgyrDG0Pbg/BD8IPxg/HD+QP5Q/mD+cP6A/pD+oPKBAtEFYQVxD3EhsTQBPVE+ET/xMOFA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/74f48960313e.js b/pr/561/docs/search.index/74f48960313e.js new file mode 100644 index 000000000..649fc699e --- /dev/null +++ b/pr/561/docs/search.index/74f48960313e.js @@ -0,0 +1 @@ +rn_("AQUA9G8TAAABAEkAAQDzBAFj8ncSAAABACOCArBQEkkAAWZ0AQABsAATxAABZPS1CwAAAQABAAEA84ACZWkTgAKw4BPPAAF0dg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/756f1270b77c.js b/pr/561/docs/search.index/756f1270b77c.js new file mode 100644 index 000000000..a05158f43 --- /dev/null +++ b/pr/561/docs/search.index/756f1270b77c.js @@ -0,0 +1 @@ +rn_("AYACsFATggABoAAAAAjZY3QBAQD0ABMAAAEAAQABAAEDAPSaDAAAngaZAAEAAYACoBAAAAwqoFAAABIVY2QBAgDzzQgAADQDAQDzAAFt84cEAADBAAEAAYECoBAAABK0oHAAABL7YWPzAAFy8ywHAAD+CRgAZw8AgIiwMA9bAMqgMAAAE/kpMCM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/75c980278c5a.js b/pr/561/docs/search.index/75c980278c5a.js new file mode 100644 index 000000000..ff2664614 --- /dev/null +++ b/pr/561/docs/search.index/75c980278c5a.js @@ -0,0 +1 @@ +rn_("AQMA9DIMAAABAAEAAQABAAGwUBOnAAFyAaMEAABTAYSwQBIxAAGwQBPhAAGYAAQ6MAAAAQAAAAAAKAAQAAAAbQRuBG8EcgXbCNwIAQk0CYIMVg/FD8YP0w8CEF0QXhBfEKYQEhJuEm8ScBJxEpwSqhKrEtgS2RJFE0YTShNLE0wTXBNdE78TwBPWE9cT+xP8Ew==") \ No newline at end of file diff --git a/pr/561/docs/search.index/765cffa6a271.js b/pr/561/docs/search.index/765cffa6a271.js deleted file mode 100644 index 13f37077f..000000000 --- a/pr/561/docs/search.index/765cffa6a271.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAA9OMSAAABAAEAAQABBADzSQ8AAAEAAQABgAKgUAAAEFOgYAAAEMFpcgGAAqAgAAAMJ6BgAAAQwGVoAQEBoCAAABC/YvMjDAAAAQABABOBAqAQAAAMJmFjAQMAOzAAAAEAAAUAAgAfDAMA1BABAAEGAPR+EgAAAQCJAQEAEwACsGASgAABZm3yjAwAAAEAI4ACoMAAABNLbnKnDwAAiKBAAAAPRrBAD0cAATQgFzswAAABAAAZAAMA+gEAAEwEDgCqCwkAAYADsHATAQABsDASrAABsIATOAABY3JzAQABsCATAQABbzowAAABAAAAAAAJABAAAABTEVQRZxJoElETUhOlE6YTFhQXFAGAArAgCPAAAbAwErcAAXJ09wQAAMigIAAAB0agYAAAD3KwgBK3AAFABpIJ9gYCAABqAssEAQApCgEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/766d90f1d785.js b/pr/561/docs/search.index/766d90f1d785.js deleted file mode 100644 index 699962e9e..000000000 --- a/pr/561/docs/search.index/766d90f1d785.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9JASAAABAI8AAQABAgD0ehAAAAEAmgABAAEDAPTEEgAAAQCVAAEAAQIBoEAAABKvcjswAAABAAAHAAIAeBABAA8RBQDzAIQDQAg6MAAAAQAAAAAAFQAQAAAAHAcdBx4HYQ9iDwcQCBAmECcQuBC5EGURZhGOEo8SmxKcEqsS1hLXEh4THxM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/76f64917cd8e.js b/pr/561/docs/search.index/76f64917cd8e.js new file mode 100644 index 000000000..79479ef7d --- /dev/null +++ b/pr/561/docs/search.index/76f64917cd8e.js @@ -0,0 +1 @@ +rn_("AQABsPAUEAABa/aEEwAABQABAAEAAQAlABMAArEAE/0AAWRu8ksSAAABABOAArAQDAYAAWVvAQUAOzAAAAEAAA0AAQAcEQ0AAQIA844PAAABAAEAAQIA9IoPAAABAAEAAQABAwA7MAAAAQAACAABADsQCAABgAKgQAAAEI+wwBPBAAFlcwEBADswAAABAAATAAEAqw8TACOAArCQEzEAAWltNzYAAIqgEAAAC9ygUAAAE5CwcBNxAAGgIAAADJucVRE7MAAAAQAABgADACgHAABpEAMALRIBAPOAAmx0") \ No newline at end of file diff --git a/pr/561/docs/search.index/76f703a56322.js b/pr/561/docs/search.index/76f703a56322.js deleted file mode 100644 index ab6bd2ee0..000000000 --- a/pr/561/docs/search.index/76f703a56322.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACoIAAABJEsHATlAABYXMBAAGggAAAFBJm8skIAAA3CgEHAPXPEgAAAQABAAEAAQAjgAKgUAAAEN9hb/MAAmZzOzAAAAEAAAgABAAfBwAAUgcFAK8MAAAXEQAA84ACZHk=") \ No newline at end of file diff --git a/pr/561/docs/search.index/76f9546c20f7.js b/pr/561/docs/search.index/76f9546c20f7.js new file mode 100644 index 000000000..0cd15ffc9 --- /dev/null +++ b/pr/561/docs/search.index/76f9546c20f7.js @@ -0,0 +1 @@ +rn_("AQIAOzAAAAEAAAUAAgAyDAMAihIBAAECAPP7EAAAAQABAAEGAPQIFAAAAQABAAEA8wYBbfQfEgAAAQABAAEA84ACbnbzgAJhaQ==") \ No newline at end of file diff --git a/pr/561/docs/search.index/771f0ba905a1.js b/pr/561/docs/search.index/771f0ba905a1.js deleted file mode 100644 index be1e870ad..000000000 --- a/pr/561/docs/search.index/771f0ba905a1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQcA9HgRAAABAAEAAQAjAAKgcAAAEXdhcgFMBwAAAQAA9psQAAABAHMDAQAKAAEAAQAAOzAAAAEAAAYAAgD2EgAAXBMFACOIArBAE80AAWVzAQ0BsEATxwABZfWPEwAAAQABAAEAAQABBQA7MAAAAQAACAADAHERAgBuEgQAjhMAANcDAACGHYyPbzNAFIQG9aEEAAABANcHAQABAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/77be044378b5.js b/pr/561/docs/search.index/77be044378b5.js deleted file mode 100644 index 070edfc34..000000000 --- a/pr/561/docs/search.index/77be044378b5.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEA84wPAAABAAEAAQMBoEAAABOJZfL5EwAAAQABAQGgIAAAEL9i8yMMAAABAAEAE4ACoBAAAAwmYWNzgISgUAAAD3IQQAw=") \ No newline at end of file diff --git a/pr/561/docs/search.index/77bf703f157b.js b/pr/561/docs/search.index/77bf703f157b.js deleted file mode 100644 index 20adbccd7..000000000 --- a/pr/561/docs/search.index/77bf703f157b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBoEAAABOJZfL5EwAAAQABAQA7MAAAAQAABgABABwUBgDzBgFl9NATAAABAC8AAQAzAwOwYBLwAIdhcnXz/w8AAGICAQAjgAKAEPcAEAFkcg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/781f99b9d65a.js b/pr/561/docs/search.index/781f99b9d65a.js deleted file mode 100644 index bb96d917e..000000000 --- a/pr/561/docs/search.index/781f99b9d65a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBsFAPXwABY/SDBAAAAQABAMIAAQABoIAAABQSZgEAEwAA8wYBc/KvDAAAaAQzAAOgYAAAE/ZjaXPyUBEAAAEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/7839510386cb.js b/pr/561/docs/search.index/7839510386cb.js new file mode 100644 index 000000000..380b42569 --- /dev/null +++ b/pr/561/docs/search.index/7839510386cb.js @@ -0,0 +1 @@ +rn_("AYACsAAPqQABsCAMEQABZWkBiQKwIBPWAAGgMAAAE+BpcBMAA6AgAAASnKCAAAASr2VpdfXJCwAANAABAAEAAQABhgKwkBP7AAGgAAAAEixiZAGAArAwEpAAAaAwAAAQeHJ21wAAAIWgMAAAD/OgMAAAEuYQARM6MAAAAQAAAAAACgAQAAAAygjLCMwI/Aj9CNULCxAQEMgQyRBtEmOAA7AQCL4AAWRtdA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/78bb138181b9.js b/pr/561/docs/search.index/78bb138181b9.js new file mode 100644 index 000000000..b6d6474f2 --- /dev/null +++ b/pr/561/docs/search.index/78bb138181b9.js @@ -0,0 +1 @@ +rn_("AQAA9AwJAAABALkHAQABCQGggAAAFBZmAQQTAAABAgD1XRAAAAEAAQBLAgEA8wACaXU6MAAAAQAAAAAABwAQAAAAOBBgEkgTSRN5E3oTmBOZEwEIAPWrEwAAAQABAAEAAQDzAgFm9RwQAAABAAEAAQABABOAArCgE+8AAXJ08wACYXPzTBAAAAEAAQDzgAJ0dg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/7918be142114.js b/pr/561/docs/search.index/7918be142114.js deleted file mode 100644 index 263426016..000000000 --- a/pr/561/docs/search.index/7918be142114.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA9ScRAAABAAEAAQABAAGAArBgEoIAAaAgAAAQfG95AQABoMAAABOgafTYEgAACAAbABsAAQMA9PwSAAABAAEAAQABBgD0BBQAAAEAAQABAAECAPR6EAAAAQCaAAEAAQIBoEAAABKvcjswAAABAAAHAAIAeBABAA8RBQDzgAJhb2cHAACHsIASrgBZsKATJAABDDAHOzAAAAEAAA4ABAB1BAUA0gsAADoRAwAbEgMApwAAgIWg8AAAEzWwUA/UAAGgkAAAEQaUgQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/7969e190031a.js b/pr/561/docs/search.index/7969e190031a.js deleted file mode 100644 index 47aca549c..000000000 --- a/pr/561/docs/search.index/7969e190031a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYACsRAT+QABsBAMBgABZW8BBQA7MAAAAQAADQABABgRDQABAgDzjA8AAAEAAQABAgD0iA8AAAEAAQABAAEDADswAAABAAAIAAEAORAIAIcHAACHsKATLQABsNATvQABoFAAABOMjBQROzAAAAEAAAYAAwAoBwAAZRADACkSAQDzgQJsdPMAAWk7MAAAAQAAiAADAHwEAABzEAAAfRGGAAEFAPPfEwAAAQA1AAEAAaBAAAAQd2Xz1AgAAAEAQQkTgAKgMAAAD2NkcvMAAWXzwgYAAAEAAQDzgAJodAEBADswAAABAACHAAIAcxAAAH0RhgATgAKgUAAAD6ZpdAEIAPRiEwAAAQCCAAUAEwCEsPAT4QAtsJATxAABsFASqgFZQIkAOzAAAAEAABIACQDuDwIAYhEBAJkSAQC6EgEA8RIBAFMTAQCKEwEAmRMBANYTAQDXAQAAhrCAETAAAaBAAAAI9wgwJjowAAABAAAAAAANABAAAACKAIsAMgc4CbsLugyFEIYQDBINEpASkRIgEyET") \ No newline at end of file diff --git a/pr/561/docs/search.index/79fc41753735.js b/pr/561/docs/search.index/79fc41753735.js new file mode 100644 index 000000000..bc1e6d72e --- /dev/null +++ b/pr/561/docs/search.index/79fc41753735.js @@ -0,0 +1 @@ +rn_("AQACoCAAABL+sDARYwABaXTyZxIAAAEAAQMAOzAAAAEAAAYAAQDkEAYAAQgA9GYTAAABAIIABQATAQOwkBPIAAGwUBKuAVlnbHA7MAAAAQAAEgAJAPAPAgBmEQEAnRIBAL4SAQD1EgEAVxMBAI4TAQCdEwEA2hMBAAGAArAwEV8AAbAwEWEAAXJ2AQQBsAASKQABZDswAAABAAAFAAIAWxEDAFYSAQC3BQABh7BQEisBDrBgEqwAAZQJAzowAAABAAAAAAALABAAAACJDIoMiww3DjgOixAOEQ8REBEREaQS3RIjgAKgEAAADIhubwEDAPPtDwAAAQABACOAAqAAAAALx2RyYwGEoFAAABELoDAAABAmFAEQ8mwHAAABABOAA7BgEksAAbAADzgAAWNnchOAA6CwAAAThKBAAAAONmVvcw==") \ No newline at end of file diff --git a/pr/561/docs/search.index/7a61dea0bfb9.js b/pr/561/docs/search.index/7a61dea0bfb9.js deleted file mode 100644 index 82d8961cd..000000000 --- a/pr/561/docs/search.index/7a61dea0bfb9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBoEAAABD+ZQFPDwAAAQIA8+ILAAABAAEAIwACsCAL0wABa3L2xgYAAAEAuQnnAAEAJALzAAJyePK+CAAAAQA=") \ No newline at end of file diff --git a/pr/561/docs/search.index/7b1673ee6360.js b/pr/561/docs/search.index/7b1673ee6360.js deleted file mode 100644 index 261ad288b..000000000 --- a/pr/561/docs/search.index/7b1673ee6360.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQBsAASlAABczswAAABAAALAAIADhMHAPsTAwBHAAAFhqCAAAAS77EAFAgAAbBAElAAAbCAFBYAAbBQEpYAARUAFvQyDgAAAQABAAEAQwCEoCAAAAj6oNAAABL6oDAAAAjaFQAE8/IBAAABAFMF") \ No newline at end of file diff --git a/pr/561/docs/search.index/7b4948eff6a2.js b/pr/561/docs/search.index/7b4948eff6a2.js new file mode 100644 index 000000000..7aa6102ca --- /dev/null +++ b/pr/561/docs/search.index/7b4948eff6a2.js @@ -0,0 +1 @@ +rn_("AQAA9M4IAAABAHgK4AAnAAAAyqEQAAAT36BAAAAQlLBgE88AAaAQAAAMNrBQE20AAbAwEPcAAaAAAAAL9LEgE+8AAbBAEJICE0BOsAk6MAAAAQAAAAAAEwAQAAAA5AjlCPgI+QjAC8ELwgvKC80LhwwUEj8SQBJBEvcS+BIMEw0TfRN+Ew==") \ No newline at end of file diff --git a/pr/561/docs/search.index/7bd7bca0a11f.js b/pr/561/docs/search.index/7bd7bca0a11f.js deleted file mode 100644 index 87559b73f..000000000 --- a/pr/561/docs/search.index/7bd7bca0a11f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOzAAAAEAAAYAAgD2EgAAXBMFACOIArBAE80AAWVzAQQBsDASxwABY/MCEQAAAQABAAEFADswAAABAAAIAAMAcRECAG4SBACOEwAA8wEDY2Vw83kMAAABAAEAAQIA9ucIAABXAMcGAQCwAAEA84ACbnI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/7cbe7acb58e3.js b/pr/561/docs/search.index/7cbe7acb58e3.js new file mode 100644 index 000000000..7fe231926 --- /dev/null +++ b/pr/561/docs/search.index/7cbe7acb58e3.js @@ -0,0 +1 @@ +rn_("AQIA9JQSAAABAI8AAQABAwD0yBIAAAEAlQABAPMCAmJ1OjAAAAEAAAAAABMAEAAAABwHHQceB2MPZA8JEAoQKBApELwQvRBpEWoRkhKTEp8SoBKvEiITIxM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/7ccfc824e9f7.js b/pr/561/docs/search.index/7ccfc824e9f7.js deleted file mode 100644 index 5efc2f249..000000000 --- a/pr/561/docs/search.index/7ccfc824e9f7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYMCoFAAABCPoKAAABK5a3ABAAGwQBIHAAFs9DkJAAABACUHAQABCAD0GxIAAAEAAQABAAEEAbAAEGkAAXMB2g8AAAECAaBQAAASd2MBfQwAALcAAACFsEAMuAABoDAAAAvIlQABOzAAAAEAAAgABACoBAAAcwUCAIAMAQBJDwIAJwEAgIWwMAj4AAGgEAAAEu+wIAdKAAGRAEQBEAD0+xMAAAEAAQABAAEDAPQ5CQAAAQAlBwEAY4ADoAAAAAvIbnJ1AQACsNATMgABoDAAAA9MYmr2VwUAAAEAAQBJAAEAbgEBAAGwgBNRAAF0OzAAAAEAAEEABACgBQAA4wgAAO0IAAA3DD4AAQkA8zsSAAABAAEA84ADY2d0AYMCoJAAABOboJAAABOcMjMBgAKgUAAAE8OggAAAEuxjZfMAAnN08hIHAAABAAEAAaCwAAATNGLzwRIAACIBAQAjgAKgAAAAEsBkciOAAqBQAAATjWNl84ACaXkBBAD1uhAAAAEAAQABAAEA8wEBbgEIBwAAAQEAOzAAAAEAAAkAAgC3BwcAgBIBAAEGAPQmEwAAAQABAAEAAQ8A9AQUAAABAAEAAQDzgQJobQEAAbBAE8cAAWX1jxMAAAEAAQABAAEAU4ADoCAAABFWbG50120AgMugIAAAE/awYBBPAAGwQA+CAAHAGzgK") \ No newline at end of file diff --git a/pr/561/docs/search.index/7dc6410c642a.js b/pr/561/docs/search.index/7dc6410c642a.js deleted file mode 100644 index 781db7b6c..000000000 --- a/pr/561/docs/search.index/7dc6410c642a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQcA9UYTAAABAAEAcwABAAEHAPNIEAAAAQABAAGAAqAAAAAHLKAQAAAI2WR48wEBZfKgDwAAAQDnAAAAhbBgDJYAAbBADA8AATIIAfSqBAAAeAKGCQEA") \ No newline at end of file diff --git a/pr/561/docs/search.index/7e0a42e26536.js b/pr/561/docs/search.index/7e0a42e26536.js new file mode 100644 index 000000000..eaf100492 --- /dev/null +++ b/pr/561/docs/search.index/7e0a42e26536.js @@ -0,0 +1 @@ +rn_("AQIBoKAAABLcZPLIBgAAAQABgQKgMAAAE9igUAAAE2hjcwEEA7AgEMwAAaBQAAARcaBAAAATpGxzdvKfEwAAAQDzAANhZW87MAAAAQAACAADAGsEAQC8CwAAuwwFAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/7e3b19027434.js b/pr/561/docs/search.index/7e3b19027434.js deleted file mode 100644 index 59c6ec1f5..000000000 --- a/pr/561/docs/search.index/7e3b19027434.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBoEAAABEFc/XoCwAA8wQ9AQEAAQATggKgIAAADLdlcgECAPRzDwAAAQDtAAEAI4ECoBAAAAvnZWkTgAKg8AAAE41ucjMAA7AwCPUAAWVvdAFSEQAA") \ No newline at end of file diff --git a/pr/561/docs/search.index/7e644c6ffb35.js b/pr/561/docs/search.index/7e644c6ffb35.js deleted file mode 100644 index 4ba1fce49..000000000 --- a/pr/561/docs/search.index/7e644c6ffb35.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQA9rUMAAABABkDAQAlAQEAAQoA80ISAAABAKgAAQEA9+4IAAABABIHAQBrAAEADgEjgAKwYBNVAAFpbwECAPR2DAAAAQALBgEAAQUA9GsTAAABAEkAAQD3BAAAh6AgAAAMeLCQEW8AAQScAzowAAABAAAAAAAIABAAAABvBd8I4AgWDBcMfRB+EHMSdBI=") \ No newline at end of file diff --git a/pr/561/docs/search.index/7ebdb25ba28a.js b/pr/561/docs/search.index/7ebdb25ba28a.js deleted file mode 100644 index 0ceddae56..000000000 --- a/pr/561/docs/search.index/7ebdb25ba28a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUA9GsTAAABAEkAAQDzBAFj8nMSAAABACOCArBQEkUAAWZ0AQABsAATwAABZPS1CwAAAQABAAEA84ACZWkTgAKw4BPLAAF0dg==") \ No newline at end of file diff --git a/pr/561/docs/search.index/7f17bcdf0bf9.js b/pr/561/docs/search.index/7f17bcdf0bf9.js new file mode 100644 index 000000000..60da52fd2 --- /dev/null +++ b/pr/561/docs/search.index/7f17bcdf0bf9.js @@ -0,0 +1 @@ +rn_("AQIA9JQSAAABAI8AAQABAgD0fhAAAAEAmgABAAEDAPTIEgAAAQCVAAEAAQIBoEAAABKzcjswAAABAAAHAAIAfBABABMRBQDzAIQDQAg6MAAAAQAAAAAAFQAQAAAAHAcdBx4HYw9kDwkQChAoECkQvBC9EGkRahGSEpMSnxKgEq8S2hLbEiITIxM=") \ No newline at end of file diff --git a/pr/561/docs/search.index/7f6612368049.js b/pr/561/docs/search.index/7f6612368049.js deleted file mode 100644 index 4be9dcc7f..000000000 --- a/pr/561/docs/search.index/7f6612368049.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQkBoEAAABPGZfLmEwAAAQABgAKwAAyTAAGggAAAEzFkcAEDAaAAAAAPv3PyTQ8AAAEAAQIDsGASsQABsNATyQABoIAAABNQaXJzAdQTAAD3AACAhaEwAAAT5ZBJAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/7fccfba45c45.js b/pr/561/docs/search.index/7fccfba45c45.js new file mode 100644 index 000000000..06db300a3 --- /dev/null +++ b/pr/561/docs/search.index/7fccfba45c45.js @@ -0,0 +1 @@ +rn_("AQEAOjAAAAEAAAAAAAcAEAAAAL4SvxJXE1gTjhOPE9oT2xPzBgFpAd0SAAAjgAKwUBKyAFlmbgEAAbBAEowAAWU7MAAAAQAADQACAKcGDACPEAAAI4ACoDAAAAvKYWU3AACAxbBQEwUAAbAQE6cAAbBgEwwAAQACmAg=") \ No newline at end of file diff --git a/pr/561/docs/search.index/desc/4e049e7e184f.js b/pr/561/docs/search.index/desc/4e049e7e184f.js new file mode 100644 index 000000000..9863c408c --- /dev/null +++ b/pr/561/docs/search.index/desc/4e049e7e184f.js @@ -0,0 +1 @@ +rd_("AmData flows in both directions0CdThe CE codepoint, signalling that congestion was \xe2\x80\xa600AjContains the success valueBeThe PathId of this path.BmReturns the PathId of this path.AoGet the identity of this stream00AfWhich path is now openAhWith path was abandoned.B`Which path had its state droppedAmPath which has changed statusCfPath over which the observed address was reported, \xe2\x80\xa6AlWhich stream is now readableAlWhich stream is now writableAnWhich stream has been finishedAmWhich stream has been stoppedAnType of the Long header packetBcExperimental! Use at your own risk.0ClWhether a stream communicates data in both directions or \xe2\x80\xa60AhContains the error valueAoThe largest representable valueAlThe maximum path ID allowed.10ClConnects to a QUIC perf server and maintains a specified \xe2\x80\xa6BmData flows only from the stream\xe2\x80\x99s initiator0AnWhich directions data flows in0CaDirectionality for which streams have been openedCdDirectionality for which streams are newly availableCjExplicit congestion notification bits to set on the packet0CeThe Explicit Congestion Notification bits for the \xe2\x80\xa61CdReturns the most recently observed external address.B`The current best RTT estimation.BfThe number of I/O operations executed.0BcLength of QUIC packet being decodedAlLength of the packet payload0BmThe number of bytes the associated buffer hasBbSet a custom TokenLog0CaMinimum RTT registered so far for this estimator.ClConstruct with an approximate maximum memory usage and a \xe2\x80\xa6CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6DiCreates a new QlogConfig that writes a qlog trace to the \xe2\x80\xa6CiCreates a new qlog factory that writes files into the \xe2\x80\xa6D`Create a default config with a particular reset_keyCmCreate a default config with a particular handshake token \xe2\x80\xa6CkCreate a default config with a particular cryptographic \xe2\x80\xa6AmConstruct cid from byte arrayoConstruct emptyAeCreate a new StreamIdDjConstruct a state using the given config and current time \xe2\x80\xa600:8AeCreate a new endpointDcCreate a new instance of FixedLengthConnectionIdParserBdCreate a generator with a random key:987DgBegin decoding a QUIC packet from bytes, returning any \xe2\x80\xa67BkConstruct an error with a code and a reasonCgInitialize Random CID generator with a fixed CID length87BeCreates a new FourTuple.777BfQUIC transport protocol implementationCkGet SystemTime::now() or the mocked equivalentAhLook up the current time01ChCurrent best estimate of this connection\xe2\x80\x99s latency \xe2\x80\xa6000ChThe ECT(0) codepoint, indicating that an endpoint is \xe2\x80\xa600ChThe ECT(1) codepoint, indicating that an endpoint is \xe2\x80\xa600CaA complete set of keys for a certain packet space0CbA Long packet header, as used during the handshakeChNot attributed to any particular FrameType.CkAn open network transmission within a multipath-enabled \xe2\x80\xa6Ab(Multi)Path eventsB`An error occurred during readingCeWhether an endpoint was the initiator of a connection0nThe 0 path id.0CaThe address observed by the remote over this pathCjThe source address of the datagram(s) contained in the \xe2\x80\xa6mType of errorBlCurrent congestion window of the connection.0gPayloadAoReturns the argument unchanged.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BaCalls U::from(self).00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dNextCoMethod for opening a sealed message data in-place.B`Open a single stream if possible1CgReturns the Path structure of an open pathBhPing the remote endpoint over this path.AhPing the remote endpointCkCheck whether the timer has expired, and register to be \xe2\x80\xa6BaReturns application-facing eventsBgRead data contiguously from the stream.AoRead from the given recv streamCcDecode TransportParameters from bufferBiReceive an unreliable, unordered datagramBdMethod for sealing a token in-place.0CiQueue an unreliable, unordered datagram for immediate \xe2\x80\xa6CbSends a Transmit on the given socket.CmNumber of address validation tokens sent to a client when \xe2\x80\xa60BmThe side of the connection (client or server)ChLook up whether we\xe2\x80\x99re the client or server of this \xe2\x80\xa6AlMethod for signing a message0CdAmount of data written to the caller-supplied buffer0hSpin bitAcStop accepting data0BoStop accepting data on the given receive streamCiTry to find and take a token that was stored with the \xe2\x80\xa60BgA chunk of data from the receive stream0CiThe RFC8312 congestion controller, as widely used for TCP0Borustls reports protocol errors using this type.0DbErrors encountered while decoding TransportParametersCdErrors that the nat traversal state might encounter.BeEvents of interest to the applicationCiEvent emitted when the client receives ADD_ADDRESS or \xe2\x80\xa6CjAttributed to a specific FrameType, never \xe2\x80\xa6A`Any other error.0CcThe peer abandoned transmitting data on this streamCnThe peer is unable to continue processing this connection, \xe2\x80\xa6CdThe peer abandoned transmitting data on this stream.1AeA Retry packet headerCdA short packet header, as used during the data phaseCmBest-effort extraction of the ALPN protocols from the TLS \xe2\x80\xa6BiConstruct a fresh Controller0AiThe contents of the chunkCiThe total amount of bytes which have been transferred \xe2\x80\xa6BjThe amount of bytes which had been written210BnUnderlying error describing reason for failureBaClose the connection immediately.CnClose all of this endpoint\xe2\x80\x99s connections immediately and \xe2\x80\xa6AaCloses this path.AnClose a connection immediatelyBcFrame type that triggered the errorCcDistinguishes streams of the same initiator and \xe2\x80\xa60CjReturns whether the codepoint is a CE, signalling that \xe2\x80\xa60AgKey for encrypting data0BgParse a connection id from given bufferAhReturns all known paths.BlUpdate the timer to expire at iBbClose the send stream immediately.BeAbandon transmitting data on a streamCnRespond with a retry packet, requiring the client to retry \xe2\x80\xa60CiDrive future to completion in the backgroundCeShow connection stats the at the end of the benchmarkAmReturns connection statisticsBiReturns relevant stats from this EndpointCaReturns the PathStats for this path.2BcTitle to record in the qlog capture0CmWrite a buffer into this stream, returning how many bytes \xe2\x80\xa6AmSend data on the given streamCcEncode TransportParameters into bufferC`Future produced by Endpoint::acceptClPaths marked as backup will only be used if there are no \xe2\x80\xa6CeChunks returned from RecvStream::read().AmThe initiator of a connectionAdRun as a perf client1CgAttempted to initiate NAT traversal on a closed, or \xe2\x80\xa6BcThe receiver lagged too far behind.CcFuture produced by Connection::open_biAjA new path has been openedChOne or more new streams has been opened and might be \xe2\x80\xa6ChId representing different paths when using multipath \xe2\x80\xa60AbCoding result typeAlThe acceptor of a connectionAdRun as a perf server1mStream eventsAiAn integer less than 2^620CfGet the next incoming connection attempt from a clientClAttempt to accept this incoming connection (an error may \xe2\x80\xa6CcAccept a remotely initiated stream of a certain \xe2\x80\xa61C`The amount of full chunks which had been written0BlAllows to configure the desired cipher suiteCiHelper to construct an endpoint for use with outgoing \xe2\x80\xa6CcWait for the connection to be closed for any reasonAfCoding related traits.BnAccess the configuration used by this endpointChTraits and implementations for the QUIC cryptography \xe2\x80\xa6BjCreate QUIC error code from TLS alert codeBoTLS configuration used for incoming connections210BkAn underlying crypto (e.g. TLS) layer errorCgDecode a plain header from given buffer, with given \xe2\x80\xa6DiDecode a Self from the provided buffer, if the buffer is \xe2\x80\xa6ChThe destination IP address which was encoded in this \xe2\x80\xa6D`Append the encoding of self to the provided buffer.CmNotify the peer that no more data will ever be written to \xe2\x80\xa6CnFinish a send stream, signalling that no more data will be \xe2\x80\xa6B`Process an incoming UDP datagramAfHeader protection keys0ClIgnore this incoming connection attempt, not sending any \xe2\x80\xa60C`Potentially store a token for later one-time use0CfPerform NSS-compatible TLS key logging to the file \xe2\x80\xa6AhThe offset in the stream0B`Packet deliveries were confirmed0AfPacket protection keys0lRandom valueBcHuman-readable reason for the close000BhHuman-readable explanation of the reasonBeReason that the connection was closedBcReason why this path was abandoned.AjSwitch to a new UDP socketBgReject this incoming connection attempt0AgKey for decrypting dataBoReturns the remote address of the network path.1AmTLS interface based on rustls0CnHelper to construct an endpoint for use with both incoming \xe2\x80\xa6BkOptional source IP address for the datagram00CgThe current local PathStatus of this path.B`The new status set by the remoteCfThe size of a single datagram in the associated bufferCkStatistics about datagrams and bytes received on this path.CjStatistics about UDP datagrams received on the connection.10CgStatistics about datagrams and bytes sent on this path.CeStatistics about UDP datagrams transmitted on the \xe2\x80\xa610AnMethod for verifying a message0CcNumber of ack-eliciting bytes that may be in flight0A`Send would blockCcNo more data is currently available on this stream.CjThe peer is not able to accept additional data, or the \xe2\x80\xa6BfA catch-all error for unlikely errors.0BlA key for signing with HMAC-based algorithms0AhAn Initial packet headerBnA pair of keys for bidirectional communication0BhA simple, standard congestion controller0CdFuture produced by Connection::open_uniCkAbstracts I/O and timer operations for runtime independenceBfA cryptographic session (commonly TLS)0CcThe peer is no longer accepting data on this streamCfFuture returned from SendStream::stopped.ClThe peer is no longer accepting data on this stream, and \xe2\x80\xa6CkThe peer is no longer accepting data on this stream. No \xe2\x80\xa6CgThe peer asked us to stop sending on an outgoing streamAaAccess to streamsCaThe stream is larger than the user-supplied limitCnAttributed to some frame type this implementation does not \xe2\x80\xa6ClIndicates how many bytes and chunks had been transferred \xe2\x80\xa60l0-RTT packetCjReturns the length of a CID for connections created by \xe2\x80\xa60CdProvide the length of dst_cid in short header packetCcThe total number of clients which should be createdAlConnect to a remote endpointAeInitiate a connectionBbDecrypt the Initial packet payloadCgDecrypt the packet payload with the given packet numberBcDecrypt the given packet\xe2\x80\x99s header210ClConstructs a value with arbitrary fields, intended to be \xe2\x80\xa6DjConstruct an event that indicating that a Connection will \xe2\x80\xa6BkThe destination connection ID of the packetBkThe destination Connection ID of the packetAiDestination Connection ID00000CgEncrypt the packet payload with the given packet numberBcEncrypt the given packet\xe2\x80\x99s header10CbCheck if this stream has been opened during 0-RTT.0CmRetrieve implementation-specific metrics used to populate \xe2\x80\xa60CnThe maximum UDP payload size guaranteed to be supported by \xe2\x80\xa60CjUniform interface to send and receive UDP packets with \xe2\x80\xa6BbOne or more packets were just sent0BmInitiate a new outgoing bidirectional stream.CaReturns the path ID of the new path being opened.AdSource Connection ID0000CiCompletes when the peer stops the stream or reads the \xe2\x80\xa6CjCheck if this stream was stopped, get the reason if it wasCcThe total number of streams which should be createdAlProvide control over streamsCeThe length of the AEAD tag appended to packets on \xe2\x80\xa60CdUpgrade the handle to a full ConnectionB`Upgrades to a Path.AkSet the QUIC version to use0lQUIC versionB`The version that was unsupported11CeFuture produced by Connection::accept_biAfAn unreliable datagramBdDatagram support is disabled locally0A`A QUIC endpoint.BcThe main entry point to the libraryChA finished stream has been fully acknowledged or stoppedCkAn incoming connection for which the server has not yet \xe2\x80\xa60BoLong packet types with uniform header structureB`The largest encoded value length0Cmthe connection is being closed abruptly in the absence of \xe2\x80\xa60CeFuture returned by Connection::on_closedClFuture produced by crate::Connection::open_pathCmA currently open stream likely has data or errors waiting \xe2\x80\xa6CkMetadata for a single buffer filled with bytes received \xe2\x80\xa6BkResponse generated directly by the endpointCfIdentifier for a stream within a particular connection0CnCommunication with the peer has lapsed for longer than the \xe2\x80\xa6CkWe didn\xe2\x80\x99t receive any data from the remote within the \xe2\x80\xa61ChResponsible for limiting clients\xe2\x80\x99 ability to reuse \xe2\x80\xa60ClThe datagram is larger than the connection can currently \xe2\x80\xa60AbAn outgoing packet00CmStatistics about UDP datagrams transmitted or received on \xe2\x80\xa60CnA formerly write-blocked stream might be ready for a write \xe2\x80\xa6AkCongestion algorithm to useAhContents of the datagramBoMark the read data as consumed from the stream.BnStatistics about frames received on this path.CcStatistics about frames received on the connection.10CaStatistics about frames transmitted on this path.CfStatistics about frames transmitted on the connection.10DhConstructs cid by reading len bytes from a Buf0DkCreates a new qlog factory that writes files into QLOGDIR, \xe2\x80\xa60BfCreate a generator with a specific keyBjConstruct a VarInt infallibly0BeSucceeds iff x < 2^620AeWhat type we receivedAoWhat handshake type we received10CbWhether 0-RTT is/was possible during the handshakeCmSpecifies the time to wait after completing MTU discovery \xe2\x80\xa60CcReturns Self for use in down-casting to extract \xe2\x80\xa60EhReturns true if the Connection associated with this handle \xe2\x80\xa6CmDuration after an address validation token was issued for \xe2\x80\xa60CeThe local IP address which was used when the peer \xe2\x80\xa6000BnReturns the local address of the network path.ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BnInitiate a new outgoing unidirectional stream.BcGet the priority of the send streamAlGet the priority of a streamCfThe negotiated application protocol, if ALPN is in use0Aeqlog output directoryBbOptional response to transmit backCiOptional seed to be used internally for random number \xe2\x80\xa60AlSlow start threshold (bytes)0BeSucceeds iff x < 2^6200000DaSends a Transmit on the given socket without any \xe2\x80\xa6DkQuickly determine whether cid could have been generated by \xe2\x80\xa600BmA path was abandoned and is no longer usable.CfFuture produced by Connection::accept_uniCdPaths marked with as available will be used when \xe2\x80\xa6CnAt least one new stream of a certain directionality may be \xe2\x80\xa6ClConfiguration for the Bbr congestion controller0BkThe connection was successfully establishedAoAPI to control datagram trafficAlDecoding of QUIC primitives.CkA path was discarded and all remaining state for it has \xe2\x80\xa6BgInfallible encoding of QUIC primitives.CnIdentifies a network path by the combination of remote and \xe2\x80\xa6A`Handshake packetBcKeys used to protect packet headers0CiCatch-all error for problems while decoding transport \xe2\x80\xa6CeNat traversal attempt failed due to a multipath errorBdKeys used to protect packet payloads0BmErrors that might trigger a path being closedAnApplication events about pathsBjStatistics related to a transmission path.0AeA read error occurredBmErrors that arise from reading from a stream.C`Errors triggered when reading from a recv streamCiAn object for asynchronously writing to an associated \xe2\x80\xa6BmAccept the next incoming bidirectional streamBbDuplicate the controller\xe2\x80\x99s state0BeThe number of UDP datagrams observed.AaControl datagrams1BeCreate new object from the given bits00BoWhich side of a connection initiated the stream0CmConvert into a 0-RTT or 0.5-RTT connection at the cost of \xe2\x80\xa6BoShorthand for self == Side::Client0B`Whether the connection is closedBoShorthand for self == Side::Server0CbWhether it is legal to respond with a retry packet0CdWhether to allow clients to migrate to new addresses0CdConstruct a timer that will expire at iBoLow-level protocol logic for the QUIC protoocolCjWait for the connection to be closed without keeping a \xe2\x80\xa6CjOpens an additional path if the multipath extension is \xe2\x80\xa6A`Opens a new pathBmPing the remote endpoint over a specific pathCiAttempts to read from the stream into the provided bufferCeReceive UDP datagrams, or register to be woken if \xe2\x80\xa6CkSend a UDP datagram, or register to be woken if sending \xe2\x80\xa6ClPrivate key used to send authenticated connection resets \xe2\x80\xa60BmGenerate the integrity tag for a retry packet0BgA stable identifier for this connectionCePrivate key used to authenticate data included in \xe2\x80\xa60BlThe position of a token in the packet bufferCgTransport configuration to use for incoming connections0CjWait for all connections on the endpoint to be cleanly \xe2\x80\xa6BoWrite a buffer into this stream in its entiretyCiAbstract implementation of an async timer for runtime \xe2\x80\xa6BoNumber of UDP packets to send/receive at a timeCkError indicating that a path has not been opened or has \xe2\x80\xa6BnThe path is already closed or was never opened1BeIn-progress connection attempt futureAbA QUIC connection.CeProtocol state and logic for a single QUIC connectionCeCommon interface for different congestion controllers0CjNumber of frames transmitted or received of each frame \xe2\x80\xa60BoThe connection ID was not recognized by the \xe2\x80\xa60DdThe type used to refer to FrameTypes in closing and \xe2\x80\xa6DbA stream of PathEvents for all paths in a connection.AnThe QUIC-MULTIPATH path statusBeConfiguration for qlog trace logging.0BnA stream that can only be used to receive dataAaAccess to streamsChErrors that arise while waiting for a stream to be resetDhError for attempting to retry an Incoming which already \xe2\x80\xa60BkA stream that can only be used to send data3BmObject to get current SystemTime0AdA rustls TLS session0CkResponsible for storing validation tokens received from \xe2\x80\xa60AeA borrowed UDP socketBjErrors that arise from writing to a streamBoErrors triggered while writing to a send streamBoAccept the next incoming uni-directional streamCkWhether the implementation is permitted to set the spin \xe2\x80\xa60CiCloses a path and sends a PATH_ABANDON frame with the \xe2\x80\xa6CdLogic for controlling the rate at which data is sent0BfWhether to print connection statisticsBnClass of error as encoded in the specificationB`Application-specific reason code10CaThe error code to be sent with the abandon frame.BoThe error that was sent with the abandon frame.AoError code supplied by the peerBcType of frame that caused the close0AiExtract the integer value0CnWhether there is no longer any need to keep the connection \xe2\x80\xa6DkDetermine whether this is the last event a Connection will \xe2\x80\xa6CiLook up the local IP address and port used by this socketDgGet the local SocketAddr the underlying socket is bound toBfThe number of bytes lost on this path.BkThe number of bytes lost on the connection.10CjPad UDP datagrams carrying application data to current \xe2\x80\xa60AgReturns path statistics0CjThe final path stats, they are no longer available via \xe2\x80\xa6C`Attempt to write bytes from buf into the stream.AmRead the next segment of dataAoReads the next segment of data.CkRead an exact number of bytes contiguously from the stream.BnSets the PathStatus of this path.BoEpoch qlog event times are recorded relative to0ClError type for attempting to accept an IncomingBjErrors in the configuration of an endpoint0AeGeneric crypto errors0CnConfiguration for the Cubic congestion controller0CdReasons why attempting to finish a stream might failCnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60AnValue exceeds supported bounds0D`Constructs a QlogConfig for individual connections.0AfA noq runtime for smolB`Application events about streamsCbAccept this incoming connection using a custom \xe2\x80\xa6CeLargest UDP payload size the path currently supports.ClStorage size required for the largest packet that can be \xe2\x80\xa61BiDescription to record in the qlog capture0BjThe socket this datagram should be sent to00DcCreates a new FourTuple without a known local address.BkStarting guess for maximum UDP payload sizeCkThe initial value to be used as the maximum UDP payload \xe2\x80\xa60ChUDP payload size that the network must be capable of \xe2\x80\xa6BjThe RTT used before an RTT sample is taken0BfThe initial round-trip-time (in msecs)CeThe amount of concurrent streams which should be usedDdPackets are acked in batches, all with the same now \xe2\x80\xa60AdPacing rate (bits/s)0DeA stream of PathEvents for all paths in this connection.DfGets the local PathStatus for a known PathIdAnRead the next segments of dataCkConvenience method to read all remaining data into a bufferAlProvide control over streamsBoThe sample size used for this key\xe2\x80\x99s algorithm01CiMaximum number of bytes to transmit to a peer without \xe2\x80\xa600BoThe server name specified by the client, if any0BmObject to get current SystemTime0BdSet a custom TokenStore0CaNumber of bytes to transmit from client to serverCnSpecifies the upper bound to the max UDP payload size that \xe2\x80\xa60ChReturns a weak reference to the inner connection struct.CdReturns a WeakPathHandle for this path.DgCreate a server config with the given crypto::ServerConfig0CeSets a prefix to the filename of the generated files.0DbWrite a single Bytes into this stream in its entiretyBbAn ADD_ADDRESS frame was received.BfConfiguration for outgoing connectionsCaClient-side configuration for the crypto protocol10CgThe stream has already been stopped, finished, or resetBmThe stream has already been finished or resetCmError indicating that a stream has not been opened or has \xe2\x80\xa6CjThe stream has not been opened or was already stopped, \xe2\x80\xa6CfThe stream has not been opened or has already been \xe2\x80\xa6CmThe stream has not been opened or was already finished or \xe2\x80\xa63CgErrors in the parameters being used to create a new \xe2\x80\xa60BkProtocol-level identifier for a connection.0CkWe couldn\xe2\x80\x99t decrypt a message. This is invariably fatal.0BjExplicit congestion notification codepoint00CnWe couldn\xe2\x80\x99t encrypt a message because it was larger than \xe2\x80\xa60BhParameters that are semantically invalidCkCannot close the last remaining open path via the local \xe2\x80\xa6Akn0\xe2\x80\x99s nat traversal eventsDhNull implementation of TokenLog, which never accepts tokens0ClReceived an observation of our external address from the \xe2\x80\xa6CiFuture produced by Connection::read_datagramBiThe remote changed the status of the pathBlRTT estimation for a particular network pathCnFuture produced by Connection::send_datagram_waitBiParameters governing incoming connectionsCaServer-side configuration for the crypto protocol10CmErrors that arise while monitoring for a send stream stop \xe2\x80\xa6AgA noq runtime for TokioC`Returns the lifetime of generated Connection IDs0BlIf the connection is closed, the reason why.CjConnect to a remote endpoint using a custom configuration.AlConservative estimate of RTTBnGet the 0-RTT keys if available (clients only)0AgWhich types we expectedB`Which handshake type we expected10AcGenerates a new CID0ClThe number of segments to read when GRO is enabled. Used \xe2\x80\xa6DeProcess ConnectionEvents generated by the associated \xe2\x80\xa6EaProcess EndpointEvents emitted from related ConnectionsCgCreate the initial set of keys given the client\xe2\x80\x99s \xe2\x80\xa6000BhThe number of packets lost on this path.BmThe number of packets lost on the connection.10DcMaximum number of Incoming to allow to exist at a time0CjWhether datagrams might get fragmented into multiple parts0CmWhether transmitted datagrams might get fragmented by the \xe2\x80\xa6CkReturns the path\xe2\x80\x99s network path represented as a 4-tuple.CkThe original destination CID when initiating the connectionCiThe original destination connection ID sent by the clientDhReturns the next time at which handle_timeout should be \xe2\x80\xa6D`Configures qlog capturing by setting a QlogFactory.0AgThe runtime type to useCkThe segment size if this transmission contains multiple \xe2\x80\xa600ChThe number of streams that may have unacknowledged data.CbSet the lifetime of CIDs created by this generator0BcSet the priority of the send streamAlSet the priority of a streamCnInitialize a QUIC-compatible TLS client configuration with \xe2\x80\xa6000DgWrite a slice of Bytes into this stream, returning how \xe2\x80\xa6AmSend data on the given streamCkWe received a fatal alert. This means the peer is unhappy.0BhBloom filter-based TokenLog0CmThe connection could not be created because not enough of \xe2\x80\xa6000CaEvent resulting from processing a single datagramBlEvents sent from a Connection to an EndpointAoStatistics on Endpoint activityBnThe stream finished before all bytes were readBlAuthentication data for (rustls) TLS session0Ccreceived an invalid Retry Token in a client Initial0ChIterator over ALPN protocol names from a TLS ClientHelloAlThe packet header is invalidBkThe local application closed the connection0DaThe datagram may result in starting a new ConnectionD`Configuration for the NewReno congestion controller0BjDecodes a QUIC packet\xe2\x80\x99s invariant headerCgErrors triggered when opening a recv stream for readingCaDefault implementation of TimeSource0CgError indicating that the provided buffer was too smallChFor clients, if the peer accepted the 0-RTT data packetsAbAck Frequency modeAfExports for benchmarksBoSupply a custom connection ID generator factory0DgCreate a UdpSender that can register a single task for \xe2\x80\xa6CaNumber of bytes to transmit from server to clientAmGet the Incoming0CnThe max_ack_delay we will request the peer to use0CgDisable packet encryption/decryption (for debugging \xe2\x80\xa6CkThe known MTU for the current network path has been updated0BbCryptographic identity of the peerBgGet the peer\xe2\x80\x99s identity, if availableDhFor the rustls TlsSession, the Any type is \xe2\x80\xa610CnAttempts to read from the stream into the provided buffer, \xe2\x80\xa6AkReturns packets to transmitDjConfigures qlog capturing through the QLOGDIR environment \xe2\x80\xa60AoReceive an application datagramDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CmWhether to implement fair queuing for send streams having \xe2\x80\xa60BfLength of sign\xe2\x80\x99s output0BnStart a client session with this configurationBnStart a server session with this configuration10BdA REMOVE_ADDRESS frame was received.CgAbstract implementation of a UDP socket for runtime \xe2\x80\xa6BgErrors triggered when abandoning a pathAgThe connection was lost00000ChGlobal configuration for the endpoint, affecting all \xe2\x80\xa60Cithe endpoint encountered an internal error and cannot \xe2\x80\xa60FbBasic adapter to let Incoming be await-ed like a ConnectingBhEncounter a frame ID that was not valid.CeThe peer sent us a TLS message with invalid contents.0Amno viable network path exists0DhNull implementation of TokenStore, which does not store \xe2\x80\xa60CiThe peer deviated from the standard TLS protocol. The \xe2\x80\xa60BmErrors that arise from reading from a stream.C`Errors from RecvStream::read_to_endCaIndicates whether a frame needs to be transmittedCmThe peer violated the QUIC specification as understood by \xe2\x80\xa60CiTransport-level errors occur when a peer violates the \xe2\x80\xa6C`Tokio-compatible UDP socket with some useful \xe2\x80\xa6DiWeak handle for a Path that does not keep the connection \xe2\x80\xa6BnCreate a client endpoint and client connectionAgGet a session referenceDiReturns a QlogConfig for a connection, if logging should \xe2\x80\xa60AiProcess timer expirationsBjParameters negotiated during the handshake0CfGet data negotiated during the handshake, if available0AiInitial congestion windowCiDefault limit on the amount of outstanding data in bytes.001000BnConverts this stream into an unordered stream.DdReturns true until the connection is fully established.CeWhether the connection is in the process of being \xe2\x80\xa61BfVerify the integrity of a retry packet0CnSpecifies the minimum MTU change to stop the MTU discovery \xe2\x80\xa60BdCompute keys for the next key update0BkConfigures qlog capturing into a directory.0AlRead bytes of handshake data0BeWhether to use the unordered read APIClMaximum number of bytes the peer may transmit across all \xe2\x80\xa600CkCompletes when the stream has been reset by the peer or \xe2\x80\xa60CiCheck whether this stream has been reset by the peer, \xe2\x80\xa6AjThe peer\xe2\x80\x99s UDP addressesAhThe peer\xe2\x80\x99s UDP address0BgThe peer\xe2\x80\x99s UDP address for this path.1CeSaturating integer addition. Computes self + rhs, \xe2\x80\xa6000ChSaturating integer subtraction. Computes self - rhs, \xe2\x80\xa60CkMaximum reordering in time space before time based loss \xe2\x80\xa60ChReason given by the transport for closing the connection0BfReasons why a connection might be lost0CiThe datagram is redirected to its ConnectionBlEvents sent from an Endpoint to a ConnectionAfConnection statistics.0BiStatistics for the currently open streamsAcPlain packet headerBkEnables writing qlog traces to a directory.0AkThe remote closed the path.CfError for when a validation token may have been reused0C`Parameters governing the core QUIC state machine0CbThe peer doesn\xe2\x80\x99t implement any supported version0CdFuture that completes when a connection is fully \xe2\x80\xa6CbThis was a 0-RTT stream and the server rejected it000CjAutomatically select an appropriate runtime from those \xe2\x80\xa6CkWhether to accept QUIC packets containing any value for \xe2\x80\xa60CdMaximum number of incoming packets that may fail \xe2\x80\xa60CnThe interface index of the interface on which the datagram \xe2\x80\xa6AjSwitch to a new UDP socketCiCreates a server endpoint which runs on the given runtimeD`Sets the PathStatus for a known PathIdCfSee proto::TransportConfig::send_window()BoSee TransportConfig::send_window()BmReturns whether a frame should be transmittedD`Convert t into the socket type used by this runtimeCdWrites handshake bytes into the given buffer and \xe2\x80\xa60ClStream produced by Path::observed_external_addrCiReason given by an application for closing the connection0CbThe peer\xe2\x80\x99s QUIC stack aborted the connection \xe2\x80\xa60DjInternal identifier for a Connection currently associated \xe2\x80\xa6CdOne or more application datagrams have been receivedBjDecrypted payload of a QUIC Initial packetCaThe endpoint can no longer create new connections0Cnreceived a STREAM frame or a RESET_STREAM frame containing \xe2\x80\xa60ClSpecific failure cases from keys_match or a \xe2\x80\xa60A`key update error0CaCurrent limits do not allow us to open more pathsClThe peer doesn\xe2\x80\x99t support a protocol version/feature we \xe2\x80\xa60BjA QUIC-compatible TLS client configuration0BjA QUIC-compatible TLS server configuration0EfTokenStore implementation that stores up to N tokens per \xe2\x80\xa60CgAn endpoint (local or remote) tried to add too many \xe2\x80\xa6CmWe didn\xe2\x80\x99t receive a path response in time after opening \xe2\x80\xa6CaPath could not be validated and will be abandonedBcA Version Negotiation packet headerCiRecord that the token was used and, ideally, return a \xe2\x80\xa60CjCurrent state of the congestion control algorithm, for \xe2\x80\xa6CcCurrent state of this connection\xe2\x80\x99s congestion \xe2\x80\xa6BaUpdate traffic keys spontaneously0CnThe maximum amount of segments which can be transmitted if \xe2\x80\xa6CnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60Cgn0\xe2\x80\x99s (https://n0.computer) NAT Traversal protocol \xe2\x80\xa6CeGet the number of connections that are currently openBmNumber of connections that are currently openCiOpens a new path if no path exists yet for the remote \xe2\x80\xa6CmOpens a new path only if no path on the same network path \xe2\x80\xa6CiMaximum reordering in packet number space before FACK \xe2\x80\xa60CfGet the size of the socket receive bufferAlReceive buffer size in bytesCcGet the size of the socket send bufferAiSend buffer size in bytesBiSet a custom TransportConfig000ChConfiguration for sending and handling validation tokens0CnCreate a server config with the given certificate chain to \xe2\x80\xa60DdWrite a slice of Bytes into this stream in its entiretyCfthe application or application protocol caused the \xe2\x80\xa60AnThe peer closed the connectionBoThe path was closed locally by the application.1B`Constructs controllers on demand0BdCommon congestion controller metrics0ClThe trait for encrypting tokens that power retry packets \xe2\x80\xa60BcThe given server name was malformed0CbHints when the caller identifies a network change.0AcPacket decode errorBdReason for why a path was abandoned.BmErrors that can arise when sending a datagram0CcThe peer does not support receiving datagram frames0BdCongestion events on the connection.0AiCongestion window (bytes)0ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BoBytes available in the outgoing datagram bufferClReplace the server configuration, affecting new incoming \xe2\x80\xa60Cmthe endpoint has reached the confidentiality or integrity \xe2\x80\xa60CkParameters for controlling the peer\xe2\x80\x99s acknowledgement \xe2\x80\xa60DjThe max_fragment_size value supplied in configuration was \xe2\x80\xa60Bmthe server refused to accept a new connection0BjParse connection id in short header packetCjOne or more application datagrams have been sent after \xe2\x80\xa6Ckreceived more data than permitted in advertised data limits0AoThe TLS handshake was confirmedBjThe connection\xe2\x80\x99s handshake data is readyCeAttempted an ordered read following an unordered readAnWe saw an invalid certificate.0BcParameters governing MTU discovery.0BnNot enough addresses to complete the operationCkdetected an error with protocol compliance that was not \xe2\x80\xa60Cjreceived a frame for a stream identifier that exceeded \xe2\x80\xa60Cnreceived a frame for a stream that was not in a state that \xe2\x80\xa60AnError from setting path statusAjTransport-level error code0ChThe local endpoint does not support the QUIC version \xe2\x80\xa6CkError indicating that the specified QUIC version is not \xe2\x80\xa61C`Packet uses a QUIC version that is not supported1CiMaximum quantity of out-of-order crypto layer data to \xe2\x80\xa60C`Create a VarInt without ensuring it\xe2\x80\x99s in range0ChCumulative number of Quic handshakes ignored on this \xe2\x80\xa6EgReturns true if the two WeakConnectionHandle point at the \xe2\x80\xa6CiMinimum interval between outgoing stateless reset packets0CjConstruct with an approximate maximum memory usage and \xe2\x80\xa60ChCumulative number of Quic handshakes refused on this \xe2\x80\xa6AnReturns the remote path statusDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the client \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the server \xe2\x80\xa610CiSee proto::TransportConfig::receive_window()CbSee TransportConfig::receive_window()B`Override supported QUIC versions0CiOverride the instant relative to which all events are \xe2\x80\xa60CcA stream of NAT traversal updates for a connection.BkNo remote CIDs available to open a new pathCkTransport parameters used to negotiate connection-level \xe2\x80\xa6CgA stream that can be used to receive data out-of-order.CmThe certificate verifier doesn\xe2\x80\x99t support the given type \xe2\x80\xa60CfThe operation is not allowed for this endpoint\xe2\x80\x99s \xe2\x80\xa6CiCumulative number of Quic handshakes accepted by this \xe2\x80\xa6CjSpecifies the amount of time that MTU discovery should \xe2\x80\xa60CiIf the 0-RTT-encrypted data has been accepted by the peer0BgWait for the handshake to be confirmed.CgInform the connection if a path may recover after a \xe2\x80\xa60CgPeriod of inactivity before sending a keep-alive packet0CfThe number of PLPMTUD probe packets lost on this path.0BlPackets were deemed lost or marked congested0CgCumulative number of Quic handshakes sent from this \xe2\x80\xa6CnThe number of remotely initiated open streams of a certain \xe2\x80\xa6AhBench fns for SendBufferCfThe number of PLPMTUD probe packets sent on this path.0Bireceived a frame that was badly formatted0CkThis function doesn\xe2\x80\x99t work until the TLS handshake is \xe2\x80\xa60CkWe received a TLS message that isn\xe2\x80\x99t valid right now. \xe2\x80\xa60CiThe remote SocketAddr supplied was malformedCkThe remote address for the path is not supported by the \xe2\x80\xa61ChThe initial cipher suite (AES-128-GCM-SHA256) is not \xe2\x80\xa60CnWatches the external address reported by the peer for this \xe2\x80\xa6BdPaths can only be opened client-sideDmError returned when constructing a VarInt from a value >= \xe2\x80\xa60CeA handle to some connection internals, use with care.DkSpecifies the ACK frequency config (see AckFrequencyConfig \xe2\x80\xa60CjThe number of times a black hole was detected in the path.0CgMaximum number of received bytes to buffer for each \xe2\x80\xa60AeIs multipath enabled?ClMaximum number of datagrams that might be described by a \xe2\x80\xa60CkMaximum UDP payload size accepted from peers (excluding \xe2\x80\xa60AmMax UDP payload size in bytesDkSpecifies the MTU discovery config (see MtuDiscoveryConfig \xe2\x80\xa60AmReturn endpoint-facing eventsCkThe preferred IPv4 address that will be communicated to \xe2\x80\xa60CkThe preferred IPv6 address that will be communicated to \xe2\x80\xa60ChThe reordering threshold we will request the peer to use0ClDuration after a retry token was issued for which it\xe2\x80\x99s \xe2\x80\xa60BmSets the max idle timeout for a specific pathDfResize the receive buffer of socket to bytesDcResize the send buffer of socket to bytesBfThe peer\xe2\x80\x99s QUIC transport parametersBdQUIC connection transport parameters1CaGenerates connection IDs for incoming connections0CdAn incoming connection did not support any known \xe2\x80\xa60BjNo default client configuration was set up0BiPath abandoned due to unstable interfaces0ClConfiguration for sending and handling validation tokens \xe2\x80\xa60CmMaximum number of packets that may be sent using a single \xe2\x80\xa60CiNotify connections that the local network address has \xe2\x80\xa6ChHandle a change in the local address, i.e. an active \xe2\x80\xa6CiCounter for the number of bytes currently used in the \xe2\x80\xa6CgReturns whether we think the other address probably \xe2\x80\xa6CkReduction in congestion window when a new loss event is \xe2\x80\xa60DdMaximum number of datagrams that a Transmit may encode.0CfA stream of NAT traversal updates for this connection.CjGet the address observed by the remote over the given pathCiMaximum number of bytes the peer may transmit without \xe2\x80\xa600Chreceived more data in CRYPTO frames than can be buffered0B`The extension was not negotiatedCbWe failed to figure out what time it currently is.0CbWe failed to acquire random bytes from the system.0CnError indicating that this operation requires multipath to \xe2\x80\xa6BnThe extension was not negotiated with the peerAkMultipath is not negotiatedCnError when the multipath extension was not negotiated, but \xe2\x80\xa6CjThe path was opened in a NAT traversal round which was \xe2\x80\xa6BnHeader of an Initial packet, before decryptionCgDerive keying material from this connection\xe2\x80\x99s TLS \xe2\x80\xa6EdFill output with output.len() bytes of keying material \xe2\x80\xa60BnPathological case: many segments, get from endCfGet segments in the old way, using a loop of get callsClCurrent number of remotely initiated streams that may be \xe2\x80\xa6ClTrack changes on our external address as reported by the \xe2\x80\xa60CmCreate a client configuration that trusts specified trust \xe2\x80\xa60BkThe peer didn\xe2\x80\x99t give us any certificates.0BkThe peer sent an oversized record/fragment.0CkThe ack-eliciting threshold we will request the peer to use0BiWhether there are any pending retransmitsCdWhether the Multipath for QUIC extension is enabled.C`Sets the keep_alive_interval for a specific pathBoSet a custom ValidationTokenConfig0BmPath abandoned at the application\xe2\x80\x99s request0CjGet the current value of max_udp_payload_size0ChConfigure how to populate the destination CID of the \xe2\x80\xa60CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6CfWhether the socket address that is initiating this \xe2\x80\xa60CmModify the number of open paths allowed when multipath is \xe2\x80\xa6Cmthe number of connection IDs provided by the peer exceeds \xe2\x80\xa60CbError returned by Session::export_keying_material.0CiA provided certificate revocation list (CRL) was invalid.0CmPath abandoned due to no available connection IDs for the \xe2\x80\xa60Clreceived transport parameters that were badly formatted, \xe2\x80\xa60CiRegisters one address at which this endpoint might be \xe2\x80\xa6ClAdd addresses the local endpoint considers are reachable \xe2\x80\xa6ClMaximum number of outgoing application datagram bytes to \xe2\x80\xa60CiSet the client configuration used by connectBnSets the max_idle_timeout for a specific path.BfThe QUIC protocol version implemented.CfThe path became unusable after a local network change.BoBytes available in the outgoing datagram bufferDhMaximum number of received bytes to buffer for all Incoming0DaVariant of max_concurrent_bidi_streams affecting \xe2\x80\xa60ClModify the number of remotely initiated streams that may \xe2\x80\xa6CnCreate a client configuration that trusts the platform\xe2\x80\x99s \xe2\x80\xa60CkGenerates 8-byte connection IDs that can be efficiently \xe2\x80\xa6CkAn error occurred while handling Encrypted Client Hello \xe2\x80\xa60CkPath abandoned due to resource limitations in the transport0CiGenerates purely random connection IDs of a specified \xe2\x80\xa6ChWhether to use \xe2\x80\x9cGeneric Segmentation Offload\xe2\x80\x9d to \xe2\x80\xa60CmMaximum number of incoming bidirectional streams that may \xe2\x80\xa60BhUpdates this tuple\xe2\x80\x99s local address iffClMaximum number of incoming application datagram bytes to \xe2\x80\xa60BcInitiates a new nat traversal round0BdPackets were incorrectly deemed lost0CnRemoves one or more addresses from the set of addresses at \xe2\x80\xa6CgRemoves an address the endpoing no longer considers \xe2\x80\xa6C`Sets the keep_alive_interval for a specific pathDeA ConnectionIdParser implementation that assumes the \xe2\x80\xa6CjWe received a TLS handshake message that isn\xe2\x80\x99t valid \xe2\x80\xa60CiHow to construct new congestion::Controllers0BlSets a default per-path maximum idle timeout0BoThe key exchange group negotiated with the peer0CbWhether to send observed address reports to peers.0CiModify the number of remotely initiated bidirectional \xe2\x80\xa6BiEnables the Multipath Extension for QUIC.0CjModify the number of remotely initiated unidirectional \xe2\x80\xa6CeNumber of consecutive PTOs after which network is \xe2\x80\xa60BkSets a default per-path keep alive interval0CjWhether to receive observed address reports from other \xe2\x80\xa60BmGet the current local nat traversal addresses0CkGet the currently advertised nat traversal addresses by \xe2\x80\xa60AcNat traversal draftCkSets the maximum number of nat traversal addresses this \xe2\x80\xa60CjWhen multipath is required and has not been explicitly \xe2\x80\xa6") \ No newline at end of file diff --git a/pr/561/docs/search.index/desc/59e6f7c5fb07.js b/pr/561/docs/search.index/desc/59e6f7c5fb07.js deleted file mode 100644 index 499a4a444..000000000 --- a/pr/561/docs/search.index/desc/59e6f7c5fb07.js +++ /dev/null @@ -1 +0,0 @@ -rd_("AmData flows in both directions0CdThe CE codepoint, signalling that congestion was \xe2\x80\xa600AjContains the success valueBeThe PathId of this path.BmReturns the PathId of this path.AoGet the identity of this stream00AfWhich path is now openAhWith path was abandoned.B`Which path had its state droppedAmPath which has changed statusCfPath over which the observed address was reported, \xe2\x80\xa6AlWhich stream is now readableAlWhich stream is now writableAnWhich stream has been finishedAmWhich stream has been stoppedAnType of the Long header packetBcExperimental! Use at your own risk.0ClWhether a stream communicates data in both directions or \xe2\x80\xa60AhContains the error valueAoThe largest representable valueAlThe maximum path ID allowed.10ClConnects to a QUIC perf server and maintains a specified \xe2\x80\xa6BmData flows only from the stream\xe2\x80\x99s initiator0AnWhich directions data flows in0CaDirectionality for which streams have been openedCdDirectionality for which streams are newly availableCjExplicit congestion notification bits to set on the packet0CeThe Explicit Congestion Notification bits for the \xe2\x80\xa61CdReturns the most recently observed external address.B`The current best RTT estimation.BfThe number of I/O operations executed.0BcLength of QUIC packet being decodedAlLength of the packet payload0BmThe number of bytes the associated buffer hasBbSet a custom TokenLog0CaMinimum RTT registered so far for this estimator.ClConstruct with an approximate maximum memory usage and a \xe2\x80\xa6CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6DiCreates a new QlogConfig that writes a qlog trace to the \xe2\x80\xa6CiCreates a new qlog factory that writes files into the \xe2\x80\xa6D`Create a default config with a particular reset_keyCmCreate a default config with a particular handshake token \xe2\x80\xa6CkCreate a default config with a particular cryptographic \xe2\x80\xa6AmConstruct cid from byte arrayoConstruct emptyAeCreate a new StreamIdDjConstruct a state using the given config and current time \xe2\x80\xa600:8AeCreate a new endpointDcCreate a new instance of FixedLengthConnectionIdParserBdCreate a generator with a random key:987DgBegin decoding a QUIC packet from bytes, returning any \xe2\x80\xa67BkConstruct an error with a code and a reasonCgInitialize Random CID generator with a fixed CID length87BeCreates a new FourTuple.777BfQUIC transport protocol implementationCkGet SystemTime::now() or the mocked equivalentAhLook up the current time01ChCurrent best estimate of this connection\xe2\x80\x99s latency \xe2\x80\xa6000ChThe ECT(0) codepoint, indicating that an endpoint is \xe2\x80\xa600ChThe ECT(1) codepoint, indicating that an endpoint is \xe2\x80\xa600CaA complete set of keys for a certain packet space0CbA Long packet header, as used during the handshakeChNot attributed to any particular FrameType.CkAn open network transmission within a multipath-enabled \xe2\x80\xa6Ab(Multi)Path eventsB`An error occurred during readingCeWhether an endpoint was the initiator of a connection0nThe 0 path id.0CaThe address observed by the remote over this pathCjThe source address of the datagram(s) contained in the \xe2\x80\xa6mType of errorBlCurrent congestion window of the connection.0gPayloadAoReturns the argument unchanged.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BaCalls U::from(self).00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dNextCoMethod for opening a sealed message data in-place.B`Open a single stream if possible1CgReturns the Path structure of an open pathBhPing the remote endpoint over this path.AhPing the remote endpointCkCheck whether the timer has expired, and register to be \xe2\x80\xa6BaReturns application-facing eventsBgRead data contiguously from the stream.AoRead from the given recv streamCcDecode TransportParameters from bufferBiReceive an unreliable, unordered datagramBdMethod for sealing a token in-place.0CiQueue an unreliable, unordered datagram for immediate \xe2\x80\xa6CbSends a Transmit on the given socket.CmNumber of address validation tokens sent to a client when \xe2\x80\xa60BmThe side of the connection (client or server)ChLook up whether we\xe2\x80\x99re the client or server of this \xe2\x80\xa6AlMethod for signing a message0CdAmount of data written to the caller-supplied buffer0hSpin bitAcStop accepting data0BoStop accepting data on the given receive streamCiTry to find and take a token that was stored with the \xe2\x80\xa60BgA chunk of data from the receive stream0CiThe RFC8312 congestion controller, as widely used for TCP0Borustls reports protocol errors using this type.0DbErrors encountered while decoding TransportParametersCdErrors that the nat traversal state might encounter.BeEvents of interest to the applicationCiEvent emitted when the client receives ADD_ADDRESS or \xe2\x80\xa6CjAttributed to a specific FrameType, never \xe2\x80\xa6A`Any other error.0CcThe peer abandoned transmitting data on this streamCnThe peer is unable to continue processing this connection, \xe2\x80\xa6CdThe peer abandoned transmitting data on this stream.1AeA Retry packet headerCdA short packet header, as used during the data phaseCmBest-effort extraction of the ALPN protocols from the TLS \xe2\x80\xa6BiConstruct a fresh Controller0AiThe contents of the chunkCiThe total amount of bytes which have been transferred \xe2\x80\xa6BjThe amount of bytes which had been written210BnUnderlying error describing reason for failureBaClose the connection immediately.CnClose all of this endpoint\xe2\x80\x99s connections immediately and \xe2\x80\xa6AaCloses this path.AnClose a connection immediatelyBcFrame type that triggered the errorCcDistinguishes streams of the same initiator and \xe2\x80\xa60CjReturns whether the codepoint is a CE, signalling that \xe2\x80\xa60AgKey for encrypting data0BgParse a connection id from given bufferAhReturns all known paths.BlUpdate the timer to expire at iBbClose the send stream immediately.BeAbandon transmitting data on a streamCnRespond with a retry packet, requiring the client to retry \xe2\x80\xa60CiDrive future to completion in the backgroundCeShow connection stats the at the end of the benchmarkAmReturns connection statisticsBiReturns relevant stats from this EndpointCaReturns the PathStats for this path.2BcTitle to record in the qlog capture0CmWrite a buffer into this stream, returning how many bytes \xe2\x80\xa6AmSend data on the given streamCcEncode TransportParameters into bufferC`Future produced by Endpoint::acceptClPaths marked as backup will only be used if there are no \xe2\x80\xa6CeChunks returned from RecvStream::read().AmThe initiator of a connectionAdRun as a perf client1CgAttempted to initiate NAT traversal on a closed, or \xe2\x80\xa6BcThe receiver lagged too far behind.CcFuture produced by Connection::open_biAjA new path has been openedChOne or more new streams has been opened and might be \xe2\x80\xa6ChId representing different paths when using multipath \xe2\x80\xa60AbCoding result typeAlThe acceptor of a connectionAdRun as a perf server1mStream eventsAiAn integer less than 2^620CfGet the next incoming connection attempt from a clientClAttempt to accept this incoming connection (an error may \xe2\x80\xa6CcAccept a remotely initiated stream of a certain \xe2\x80\xa61C`The amount of full chunks which had been written0BlAllows to configure the desired cipher suiteCiHelper to construct an endpoint for use with outgoing \xe2\x80\xa6CcWait for the connection to be closed for any reasonAfCoding related traits.BnAccess the configuration used by this endpointChTraits and implementations for the QUIC cryptography \xe2\x80\xa6BjCreate QUIC error code from TLS alert codeBoTLS configuration used for incoming connections210BkAn underlying crypto (e.g. TLS) layer errorCgDecode a plain header from given buffer, with given \xe2\x80\xa6DiDecode a Self from the provided buffer, if the buffer is \xe2\x80\xa6ChThe destination IP address which was encoded in this \xe2\x80\xa6D`Append the encoding of self to the provided buffer.CmNotify the peer that no more data will ever be written to \xe2\x80\xa6CnFinish a send stream, signalling that no more data will be \xe2\x80\xa6B`Process an incoming UDP datagramAfHeader protection keys0ClIgnore this incoming connection attempt, not sending any \xe2\x80\xa60C`Potentially store a token for later one-time use0CfPerform NSS-compatible TLS key logging to the file \xe2\x80\xa6AhThe offset in the stream0B`Packet deliveries were confirmed0AfPacket protection keys0lRandom valueBcHuman-readable reason for the close000BhHuman-readable explanation of the reasonBeReason that the connection was closedBcReason why this path was abandoned.AjSwitch to a new UDP socketBgReject this incoming connection attempt0AgKey for decrypting dataBoReturns the remote address of the network path.1AmTLS interface based on rustls0CnHelper to construct an endpoint for use with both incoming \xe2\x80\xa6BkOptional source IP address for the datagram00CgThe current local PathStatus of this path.B`The new status set by the remoteCfThe size of a single datagram in the associated bufferCkStatistics about datagrams and bytes received on this path.ChStatistics about UDP datagrams received on a connection.10CgStatistics about datagrams and bytes sent on this path.CkStatistics about UDP datagrams transmitted on a connection.10AnMethod for verifying a message0CcNumber of ack-eliciting bytes that may be in flight0A`Send would blockCcNo more data is currently available on this stream.CjThe peer is not able to accept additional data, or the \xe2\x80\xa6BfA catch-all error for unlikely errors.0BlA key for signing with HMAC-based algorithms0AhAn Initial packet headerBnA pair of keys for bidirectional communication0BhA simple, standard congestion controller0CdFuture produced by Connection::open_uniCkAbstracts I/O and timer operations for runtime independenceBfA cryptographic session (commonly TLS)0CcThe peer is no longer accepting data on this streamCfFuture returned from SendStream::stopped.ClThe peer is no longer accepting data on this stream, and \xe2\x80\xa6CkThe peer is no longer accepting data on this stream. No \xe2\x80\xa6CgThe peer asked us to stop sending on an outgoing streamAaAccess to streamsCaThe stream is larger than the user-supplied limitCnAttributed to some frame type this implementation does not \xe2\x80\xa6ClIndicates how many bytes and chunks had been transferred \xe2\x80\xa60l0-RTT packetCjReturns the length of a CID for connections created by \xe2\x80\xa60CdProvide the length of dst_cid in short header packetCcThe total number of clients which should be createdAlConnect to a remote endpointAeInitiate a connectionBbDecrypt the Initial packet payloadCgDecrypt the packet payload with the given packet numberBcDecrypt the given packet\xe2\x80\x99s header210ClConstructs a value with arbitrary fields, intended to be \xe2\x80\xa6DjConstruct an event that indicating that a Connection will \xe2\x80\xa6BkThe destination connection ID of the packetBkThe destination Connection ID of the packetAiDestination Connection ID00000CgEncrypt the packet payload with the given packet numberBcEncrypt the given packet\xe2\x80\x99s header10CbCheck if this stream has been opened during 0-RTT.0CmRetrieve implementation-specific metrics used to populate \xe2\x80\xa60CnThe maximum UDP payload size guaranteed to be supported by \xe2\x80\xa60CjUniform interface to send and receive UDP packets with \xe2\x80\xa6BbOne or more packets were just sent0BmInitiate a new outgoing bidirectional stream.CaReturns the path ID of the new path being opened.AdSource Connection ID0000CiCompletes when the peer stops the stream or reads the \xe2\x80\xa6CjCheck if this stream was stopped, get the reason if it wasCcThe total number of streams which should be createdAlProvide control over streamsCeThe length of the AEAD tag appended to packets on \xe2\x80\xa60CdUpgrade the handle to a full ConnectionB`Upgrades to a Path.AkSet the QUIC version to use0lQUIC versionB`The version that was unsupported11CeFuture produced by Connection::accept_biAfAn unreliable datagramBdDatagram support is disabled locally0A`A QUIC endpoint.BcThe main entry point to the libraryChA finished stream has been fully acknowledged or stoppedCkAn incoming connection for which the server has not yet \xe2\x80\xa60BoLong packet types with uniform header structureB`The largest encoded value length0Cmthe connection is being closed abruptly in the absence of \xe2\x80\xa60CeFuture returned by Connection::on_closedClFuture produced by crate::Connection::open_pathCmA currently open stream likely has data or errors waiting \xe2\x80\xa6CkMetadata for a single buffer filled with bytes received \xe2\x80\xa6BkResponse generated directly by the endpointCfIdentifier for a stream within a particular connection0CnCommunication with the peer has lapsed for longer than the \xe2\x80\xa6CkWe didn\xe2\x80\x99t receive any data from the remote within the \xe2\x80\xa61ChResponsible for limiting clients\xe2\x80\x99 ability to reuse \xe2\x80\xa60ClThe datagram is larger than the connection can currently \xe2\x80\xa60AbAn outgoing packet00CmStatistics about UDP datagrams transmitted or received on \xe2\x80\xa60CnA formerly write-blocked stream might be ready for a write \xe2\x80\xa6AkCongestion algorithm to useAhContents of the datagramBoMark the read data as consumed from the stream.BnStatistics about frames received on this path.CaStatistics about frames received on a connection.10CaStatistics about frames transmitted on this path.CdStatistics about frames transmitted on a connection.10DhConstructs cid by reading len bytes from a Buf0DkCreates a new qlog factory that writes files into QLOGDIR, \xe2\x80\xa60BfCreate a generator with a specific keyBjConstruct a VarInt infallibly0BeSucceeds iff x < 2^620AeWhat type we receivedAoWhat handshake type we received10CbWhether 0-RTT is/was possible during the handshakeCmSpecifies the time to wait after completing MTU discovery \xe2\x80\xa60CcReturns Self for use in down-casting to extract \xe2\x80\xa60EhReturns true if the Connection associated with this handle \xe2\x80\xa6CmDuration after an address validation token was issued for \xe2\x80\xa60CeThe local IP address which was used when the peer \xe2\x80\xa6000BnReturns the local address of the network path.ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BnInitiate a new outgoing unidirectional stream.BcGet the priority of the send streamAlGet the priority of a streamCfThe negotiated application protocol, if ALPN is in use0Aeqlog output directoryBbOptional response to transmit backCiOptional seed to be used internally for random number \xe2\x80\xa60AlSlow start threshold (bytes)0BeSucceeds iff x < 2^6200000DaSends a Transmit on the given socket without any \xe2\x80\xa6DkQuickly determine whether cid could have been generated by \xe2\x80\xa600BmA path was abandoned and is no longer usable.CfFuture produced by Connection::accept_uniCdPaths marked with as available will be used when \xe2\x80\xa6CnAt least one new stream of a certain directionality may be \xe2\x80\xa6ClConfiguration for the Bbr congestion controller0BkThe connection was successfully establishedAoAPI to control datagram trafficAlDecoding of QUIC primitives.CkA path was discarded and all remaining state for it has \xe2\x80\xa6BgInfallible encoding of QUIC primitives.CnIdentifies a network path by the combination of remote and \xe2\x80\xa6A`Handshake packetBcKeys used to protect packet headers0CiCatch-all error for problems while decoding transport \xe2\x80\xa6CeNat traversal attempt failed due to a multipath errorBdKeys used to protect packet payloads0BmErrors that might trigger a path being closedAnApplication events about pathsBjStatistics related to a transmission path.0AeA read error occurredBmErrors that arise from reading from a stream.C`Errors triggered when reading from a recv streamCiAn object for asynchronously writing to an associated \xe2\x80\xa6BmAccept the next incoming bidirectional streamBbDuplicate the controller\xe2\x80\x99s state0BeThe number of UDP datagrams observed.AaControl datagrams1BeCreate new object from the given bits00BoWhich side of a connection initiated the stream0CmConvert into a 0-RTT or 0.5-RTT connection at the cost of \xe2\x80\xa6BoShorthand for self == Side::Client0B`Whether the connection is closedBoShorthand for self == Side::Server0CbWhether it is legal to respond with a retry packet0CdWhether to allow clients to migrate to new addresses0CdConstruct a timer that will expire at iBoLow-level protocol logic for the QUIC protoocolCjWait for the connection to be closed without keeping a \xe2\x80\xa6CjOpens an additional path if the multipath extension is \xe2\x80\xa6A`Opens a new pathBmPing the remote endpoint over a specific pathCiAttempts to read from the stream into the provided bufferCeReceive UDP datagrams, or register to be woken if \xe2\x80\xa6CkSend a UDP datagram, or register to be woken if sending \xe2\x80\xa6ClPrivate key used to send authenticated connection resets \xe2\x80\xa60BmGenerate the integrity tag for a retry packet0BgA stable identifier for this connectionCePrivate key used to authenticate data included in \xe2\x80\xa60BlThe position of a token in the packet bufferCgTransport configuration to use for incoming connections0CjWait for all connections on the endpoint to be cleanly \xe2\x80\xa6BoWrite a buffer into this stream in its entiretyCiAbstract implementation of an async timer for runtime \xe2\x80\xa6BoNumber of UDP packets to send/receive at a timeCkError indicating that a path has not been opened or has \xe2\x80\xa6BnThe path is already closed or was never opened1BeIn-progress connection attempt futureAbA QUIC connection.CeProtocol state and logic for a single QUIC connectionCeCommon interface for different congestion controllers0CjNumber of frames transmitted or received of each frame \xe2\x80\xa60BoThe connection ID was not recognized by the \xe2\x80\xa60DdThe type used to refer to FrameTypes in closing and \xe2\x80\xa6DbA stream of PathEvents for all paths in a connection.AnThe QUIC-MULTIPATH path statusBeConfiguration for qlog trace logging.0BnA stream that can only be used to receive dataAaAccess to streamsChErrors that arise while waiting for a stream to be resetDhError for attempting to retry an Incoming which already \xe2\x80\xa60BkA stream that can only be used to send data3BmObject to get current SystemTime0AdA rustls TLS session0CkResponsible for storing validation tokens received from \xe2\x80\xa60AeA borrowed UDP socketBjErrors that arise from writing to a streamBoErrors triggered while writing to a send streamBoAccept the next incoming uni-directional streamCkWhether the implementation is permitted to set the spin \xe2\x80\xa60CiCloses a path and sends a PATH_ABANDON frame with the \xe2\x80\xa6CdLogic for controlling the rate at which data is sent0BfWhether to print connection statisticsBnClass of error as encoded in the specificationB`Application-specific reason code10CaThe error code to be sent with the abandon frame.BoThe error that was sent with the abandon frame.AoError code supplied by the peerBcType of frame that caused the close0AiExtract the integer value0CnWhether there is no longer any need to keep the connection \xe2\x80\xa6DkDetermine whether this is the last event a Connection will \xe2\x80\xa6CiLook up the local IP address and port used by this socketDgGet the local SocketAddr the underlying socket is bound toBfThe amount of bytes lost on this path.0CjPad UDP datagrams carrying application data to current \xe2\x80\xa60AgReturns path statistics0CjThe final path stats, they are no longer available via \xe2\x80\xa6C`Attempt to write bytes from buf into the stream.AmRead the next segment of dataAoReads the next segment of data.CkRead an exact number of bytes contiguously from the stream.BnSets the PathStatus of this path.BoEpoch qlog event times are recorded relative to0ClError type for attempting to accept an IncomingBjErrors in the configuration of an endpoint0AeGeneric crypto errors0CnConfiguration for the Cubic congestion controller0CdReasons why attempting to finish a stream might failCnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60AnValue exceeds supported bounds0D`Constructs a QlogConfig for individual connections.0AfA noq runtime for smolB`Application events about streamsCbAccept this incoming connection using a custom \xe2\x80\xa6CeLargest UDP payload size the path currently supports.ClStorage size required for the largest packet that can be \xe2\x80\xa61BiDescription to record in the qlog capture0BjThe socket this datagram should be sent to00DcCreates a new FourTuple without a known local address.BkStarting guess for maximum UDP payload sizeCkThe initial value to be used as the maximum UDP payload \xe2\x80\xa60ChUDP payload size that the network must be capable of \xe2\x80\xa6BjThe RTT used before an RTT sample is taken0BfThe initial round-trip-time (in msecs)CeThe amount of concurrent streams which should be usedDdPackets are acked in batches, all with the same now \xe2\x80\xa60AdPacing rate (bits/s)0DeA stream of PathEvents for all paths in this connection.DfGets the local PathStatus for a known PathIdAnRead the next segments of dataCkConvenience method to read all remaining data into a bufferAlProvide control over streamsBoThe sample size used for this key\xe2\x80\x99s algorithm01CiMaximum number of bytes to transmit to a peer without \xe2\x80\xa600BoThe server name specified by the client, if any0BmObject to get current SystemTime0BdSet a custom TokenStore0CaNumber of bytes to transmit from client to serverCnSpecifies the upper bound to the max UDP payload size that \xe2\x80\xa60ChReturns a weak reference to the inner connection struct.CdReturns a WeakPathHandle for this path.DgCreate a server config with the given crypto::ServerConfig0CeSets a prefix to the filename of the generated files.0DbWrite a single Bytes into this stream in its entiretyBbAn ADD_ADDRESS frame was received.BfConfiguration for outgoing connectionsCaClient-side configuration for the crypto protocol10CgThe stream has already been stopped, finished, or resetBmThe stream has already been finished or resetCmError indicating that a stream has not been opened or has \xe2\x80\xa6CjThe stream has not been opened or was already stopped, \xe2\x80\xa6CfThe stream has not been opened or has already been \xe2\x80\xa6CmThe stream has not been opened or was already finished or \xe2\x80\xa63CgErrors in the parameters being used to create a new \xe2\x80\xa60BkProtocol-level identifier for a connection.0CkWe couldn\xe2\x80\x99t decrypt a message. This is invariably fatal.0BjExplicit congestion notification codepoint00CnWe couldn\xe2\x80\x99t encrypt a message because it was larger than \xe2\x80\xa60BhParameters that are semantically invalidCkCannot close the last remaining open path via the local \xe2\x80\xa6Akn0\xe2\x80\x99s nat traversal eventsDhNull implementation of TokenLog, which never accepts tokens0ClReceived an observation of our external address from the \xe2\x80\xa6CiFuture produced by Connection::read_datagramBiThe remote changed the status of the pathBlRTT estimation for a particular network pathCnFuture produced by Connection::send_datagram_waitBiParameters governing incoming connectionsCaServer-side configuration for the crypto protocol10CmErrors that arise while monitoring for a send stream stop \xe2\x80\xa6AgA noq runtime for TokioC`Returns the lifetime of generated Connection IDs0BlIf the connection is closed, the reason why.CjConnect to a remote endpoint using a custom configuration.AlConservative estimate of RTTBnGet the 0-RTT keys if available (clients only)0AgWhich types we expectedB`Which handshake type we expected10AcGenerates a new CID0ClThe number of segments to read when GRO is enabled. Used \xe2\x80\xa6DeProcess ConnectionEvents generated by the associated \xe2\x80\xa6EaProcess EndpointEvents emitted from related ConnectionsCgCreate the initial set of keys given the client\xe2\x80\x99s \xe2\x80\xa6000BhThe amount of packets lost on this path.0DcMaximum number of Incoming to allow to exist at a time0CjWhether datagrams might get fragmented into multiple parts0CmWhether transmitted datagrams might get fragmented by the \xe2\x80\xa6CkReturns the path\xe2\x80\x99s network path represented as a 4-tuple.CkThe original destination CID when initiating the connectionCiThe original destination connection ID sent by the clientDhReturns the next time at which handle_timeout should be \xe2\x80\xa6D`Configures qlog capturing by setting a QlogFactory.0AgThe runtime type to useCkThe segment size if this transmission contains multiple \xe2\x80\xa600ChThe number of streams that may have unacknowledged data.CbSet the lifetime of CIDs created by this generator0BcSet the priority of the send streamAlSet the priority of a streamCnInitialize a QUIC-compatible TLS client configuration with \xe2\x80\xa6000DgWrite a slice of Bytes into this stream, returning how \xe2\x80\xa6AmSend data on the given streamCkWe received a fatal alert. This means the peer is unhappy.0BhBloom filter-based TokenLog0CmThe connection could not be created because not enough of \xe2\x80\xa6000CaEvent resulting from processing a single datagramBlEvents sent from a Connection to an EndpointAoStatistics on Endpoint activityBnThe stream finished before all bytes were readBlAuthentication data for (rustls) TLS session0Ccreceived an invalid Retry Token in a client Initial0ChIterator over ALPN protocol names from a TLS ClientHelloAlThe packet header is invalidBkThe local application closed the connection0DaThe datagram may result in starting a new ConnectionD`Configuration for the NewReno congestion controller0BjDecodes a QUIC packet\xe2\x80\x99s invariant headerCgErrors triggered when opening a recv stream for readingCaDefault implementation of TimeSource0CgError indicating that the provided buffer was too smallChFor clients, if the peer accepted the 0-RTT data packetsAbAck Frequency modeAfExports for benchmarksBoSupply a custom connection ID generator factory0DgCreate a UdpSender that can register a single task for \xe2\x80\xa6CaNumber of bytes to transmit from server to clientAmGet the Incoming0CnThe max_ack_delay we will request the peer to use0CgDisable packet encryption/decryption (for debugging \xe2\x80\xa6CkThe known MTU for the current network path has been updated0BbCryptographic identity of the peerBgGet the peer\xe2\x80\x99s identity, if availableDhFor the rustls TlsSession, the Any type is \xe2\x80\xa610CnAttempts to read from the stream into the provided buffer, \xe2\x80\xa6AkReturns packets to transmitDjConfigures qlog capturing through the QLOGDIR environment \xe2\x80\xa60AoReceive an application datagramDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CmWhether to implement fair queuing for send streams having \xe2\x80\xa60BfLength of sign\xe2\x80\x99s output0BnStart a client session with this configurationBnStart a server session with this configuration10BdA REMOVE_ADDRESS frame was received.CgAbstract implementation of a UDP socket for runtime \xe2\x80\xa6BgErrors triggered when abandoning a pathAgThe connection was lost00000ChGlobal configuration for the endpoint, affecting all \xe2\x80\xa60Cithe endpoint encountered an internal error and cannot \xe2\x80\xa60FbBasic adapter to let Incoming be await-ed like a ConnectingBhEncounter a frame ID that was not valid.CeThe peer sent us a TLS message with invalid contents.0Amno viable network path exists0DhNull implementation of TokenStore, which does not store \xe2\x80\xa60CiThe peer deviated from the standard TLS protocol. The \xe2\x80\xa60BmErrors that arise from reading from a stream.C`Errors from RecvStream::read_to_endCaIndicates whether a frame needs to be transmittedCmThe peer violated the QUIC specification as understood by \xe2\x80\xa60CiTransport-level errors occur when a peer violates the \xe2\x80\xa6C`Tokio-compatible UDP socket with some useful \xe2\x80\xa6DiWeak handle for a Path that does not keep the connection \xe2\x80\xa6BnCreate a client endpoint and client connectionAgGet a session referenceDiReturns a QlogConfig for a connection, if logging should \xe2\x80\xa60AiProcess timer expirationsBjParameters negotiated during the handshake0CfGet data negotiated during the handshake, if available0AiInitial congestion windowCiDefault limit on the amount of outstanding data in bytes.001000BnConverts this stream into an unordered stream.DdReturns true until the connection is fully established.CeWhether the connection is in the process of being \xe2\x80\xa61BfVerify the integrity of a retry packet0CnSpecifies the minimum MTU change to stop the MTU discovery \xe2\x80\xa60BdCompute keys for the next key update0BkConfigures qlog capturing into a directory.0AlRead bytes of handshake data0BeWhether to use the unordered read APIClMaximum number of bytes the peer may transmit across all \xe2\x80\xa600CkCompletes when the stream has been reset by the peer or \xe2\x80\xa60CiCheck whether this stream has been reset by the peer, \xe2\x80\xa6AjThe peer\xe2\x80\x99s UDP addressesAhThe peer\xe2\x80\x99s UDP address0BgThe peer\xe2\x80\x99s UDP address for this path.1CeSaturating integer addition. Computes self + rhs, \xe2\x80\xa6000ChSaturating integer subtraction. Computes self - rhs, \xe2\x80\xa60CkMaximum reordering in time space before time based loss \xe2\x80\xa60ChReason given by the transport for closing the connection0BfReasons why a connection might be lost0CiThe datagram is redirected to its ConnectionBlEvents sent from an Endpoint to a ConnectionAfConnection statistics.0BiStatistics for the currently open streamsAcPlain packet headerBkEnables writing qlog traces to a directory.0AkThe remote closed the path.CfError for when a validation token may have been reused0C`Parameters governing the core QUIC state machine0CbThe peer doesn\xe2\x80\x99t implement any supported version0CdFuture that completes when a connection is fully \xe2\x80\xa6CbThis was a 0-RTT stream and the server rejected it000CjAutomatically select an appropriate runtime from those \xe2\x80\xa6CkWhether to accept QUIC packets containing any value for \xe2\x80\xa60CdMaximum number of incoming packets that may fail \xe2\x80\xa60CnThe interface index of the interface on which the datagram \xe2\x80\xa6AjSwitch to a new UDP socketCiCreates a server endpoint which runs on the given runtimeD`Sets the PathStatus for a known PathIdCfSee proto::TransportConfig::send_window()BoSee TransportConfig::send_window()BmReturns whether a frame should be transmittedD`Convert t into the socket type used by this runtimeCdWrites handshake bytes into the given buffer and \xe2\x80\xa60ClStream produced by Path::observed_external_addrCiReason given by an application for closing the connection0CbThe peer\xe2\x80\x99s QUIC stack aborted the connection \xe2\x80\xa60DjInternal identifier for a Connection currently associated \xe2\x80\xa6CdOne or more application datagrams have been receivedBjDecrypted payload of a QUIC Initial packetCaThe endpoint can no longer create new connections0Cnreceived a STREAM frame or a RESET_STREAM frame containing \xe2\x80\xa60ClSpecific failure cases from keys_match or a \xe2\x80\xa60A`key update error0CaCurrent limits do not allow us to open more pathsClThe peer doesn\xe2\x80\x99t support a protocol version/feature we \xe2\x80\xa60BjA QUIC-compatible TLS client configuration0BjA QUIC-compatible TLS server configuration0EfTokenStore implementation that stores up to N tokens per \xe2\x80\xa60CgAn endpoint (local or remote) tried to add too many \xe2\x80\xa6CmWe didn\xe2\x80\x99t receive a path response in time after opening \xe2\x80\xa6CaPath could not be validated and will be abandonedBcA Version Negotiation packet headerCiRecord that the token was used and, ideally, return a \xe2\x80\xa60CjCurrent state of the congestion control algorithm, for \xe2\x80\xa6CcCurrent state of this connection\xe2\x80\x99s congestion \xe2\x80\xa6BaUpdate traffic keys spontaneously0CnThe maximum amount of segments which can be transmitted if \xe2\x80\xa6CnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60Cgn0\xe2\x80\x99s (https://n0.computer) NAT Traversal protocol \xe2\x80\xa6CeGet the number of connections that are currently openBmNumber of connections that are currently openCiOpens a new path if no path exists yet for the remote \xe2\x80\xa6CmOpens a new path only if no path on the same network path \xe2\x80\xa6CiMaximum reordering in packet number space before FACK \xe2\x80\xa60CfGet the size of the socket receive bufferAlReceive buffer size in bytesCcGet the size of the socket send bufferAiSend buffer size in bytesBiSet a custom TransportConfig000ChConfiguration for sending and handling validation tokens0CnCreate a server config with the given certificate chain to \xe2\x80\xa60DdWrite a slice of Bytes into this stream in its entiretyCfthe application or application protocol caused the \xe2\x80\xa60AnThe peer closed the connectionBoThe path was closed locally by the application.1B`Constructs controllers on demand0BdCommon congestion controller metrics0ClThe trait for encrypting tokens that power retry packets \xe2\x80\xa60BcThe given server name was malformed0CbHints when the caller identifies a network change.0AcPacket decode errorBdReason for why a path was abandoned.BmErrors that can arise when sending a datagram0CcThe peer does not support receiving datagram frames0BdCongestion events on the connection.0AiCongestion window (bytes)0ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BoBytes available in the outgoing datagram bufferClReplace the server configuration, affecting new incoming \xe2\x80\xa60Cmthe endpoint has reached the confidentiality or integrity \xe2\x80\xa60CkParameters for controlling the peer\xe2\x80\x99s acknowledgement \xe2\x80\xa60DjThe max_fragment_size value supplied in configuration was \xe2\x80\xa60Bmthe server refused to accept a new connection0BjParse connection id in short header packetCjOne or more application datagrams have been sent after \xe2\x80\xa6Ckreceived more data than permitted in advertised data limits0AoThe TLS handshake was confirmedBjThe connection\xe2\x80\x99s handshake data is readyCeAttempted an ordered read following an unordered readAnWe saw an invalid certificate.0BcParameters governing MTU discovery.0BnNot enough addresses to complete the operationCkdetected an error with protocol compliance that was not \xe2\x80\xa60Cjreceived a frame for a stream identifier that exceeded \xe2\x80\xa60Cnreceived a frame for a stream that was not in a state that \xe2\x80\xa60AnError from setting path statusAjTransport-level error code0ChThe local endpoint does not support the QUIC version \xe2\x80\xa6CkError indicating that the specified QUIC version is not \xe2\x80\xa61C`Packet uses a QUIC version that is not supported1CiMaximum quantity of out-of-order crypto layer data to \xe2\x80\xa60C`Create a VarInt without ensuring it\xe2\x80\x99s in range0ChCumulative number of Quic handshakes ignored on this \xe2\x80\xa6EgReturns true if the two WeakConnectionHandle point at the \xe2\x80\xa6CiMinimum interval between outgoing stateless reset packets0CjConstruct with an approximate maximum memory usage and \xe2\x80\xa60ChCumulative number of Quic handshakes refused on this \xe2\x80\xa6AnReturns the remote path statusDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the client \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the server \xe2\x80\xa610CiSee proto::TransportConfig::receive_window()CbSee TransportConfig::receive_window()B`Override supported QUIC versions0CiOverride the instant relative to which all events are \xe2\x80\xa60CcA stream of NAT traversal updates for a connection.BkNo remote CIDs available to open a new pathCkTransport parameters used to negotiate connection-level \xe2\x80\xa6CgA stream that can be used to receive data out-of-order.CmThe certificate verifier doesn\xe2\x80\x99t support the given type \xe2\x80\xa60CfThe operation is not allowed for this endpoint\xe2\x80\x99s \xe2\x80\xa6CiCumulative number of Quic handshakes accepted by this \xe2\x80\xa6CjSpecifies the amount of time that MTU discovery should \xe2\x80\xa60CiIf the 0-RTT-encrypted data has been accepted by the peer0BgWait for the handshake to be confirmed.CgInform the connection if a path may recover after a \xe2\x80\xa60CgPeriod of inactivity before sending a keep-alive packet0CfThe number of PLPMTUD probe packets lost on this path.0BlPackets were deemed lost or marked congested0CgCumulative number of Quic handshakes sent from this \xe2\x80\xa6CnThe number of remotely initiated open streams of a certain \xe2\x80\xa6AhBench fns for SendBufferCfThe number of PLPMTUD probe packets sent on this path.0Bireceived a frame that was badly formatted0CkThis function doesn\xe2\x80\x99t work until the TLS handshake is \xe2\x80\xa60CkWe received a TLS message that isn\xe2\x80\x99t valid right now. \xe2\x80\xa60CiThe remote SocketAddr supplied was malformedCkThe remote address for the path is not supported by the \xe2\x80\xa61ChThe initial cipher suite (AES-128-GCM-SHA256) is not \xe2\x80\xa60CnWatches the external address reported by the peer for this \xe2\x80\xa6BdPaths can only be opened client-sideDmError returned when constructing a VarInt from a value >= \xe2\x80\xa60CeA handle to some connection internals, use with care.DkSpecifies the ACK frequency config (see AckFrequencyConfig \xe2\x80\xa60CjThe number of times a black hole was detected in the path.0CgMaximum number of received bytes to buffer for each \xe2\x80\xa60AeIs multipath enabled?ClMaximum number of datagrams that might be described by a \xe2\x80\xa60CkMaximum UDP payload size accepted from peers (excluding \xe2\x80\xa60AmMax UDP payload size in bytesDkSpecifies the MTU discovery config (see MtuDiscoveryConfig \xe2\x80\xa60AmReturn endpoint-facing eventsCkThe preferred IPv4 address that will be communicated to \xe2\x80\xa60CkThe preferred IPv6 address that will be communicated to \xe2\x80\xa60ChThe reordering threshold we will request the peer to use0ClDuration after a retry token was issued for which it\xe2\x80\x99s \xe2\x80\xa60BmSets the max idle timeout for a specific pathDfResize the receive buffer of socket to bytesDcResize the send buffer of socket to bytesBfThe peer\xe2\x80\x99s QUIC transport parametersBdQUIC connection transport parameters1CaGenerates connection IDs for incoming connections0CdAn incoming connection did not support any known \xe2\x80\xa60BjNo default client configuration was set up0BiPath abandoned due to unstable interfaces0ClConfiguration for sending and handling validation tokens \xe2\x80\xa60CmMaximum number of packets that may be sent using a single \xe2\x80\xa60CiNotify connections that the local network address has \xe2\x80\xa6ChHandle a change in the local address, i.e. an active \xe2\x80\xa6CiCounter for the number of bytes currently used in the \xe2\x80\xa6CgReturns whether we think the other address probably \xe2\x80\xa6CkReduction in congestion window when a new loss event is \xe2\x80\xa60DdMaximum number of datagrams that a Transmit may encode.0CfA stream of NAT traversal updates for this connection.CjGet the address observed by the remote over the given pathCiMaximum number of bytes the peer may transmit without \xe2\x80\xa600Chreceived more data in CRYPTO frames than can be buffered0B`The extension was not negotiatedCbWe failed to figure out what time it currently is.0CbWe failed to acquire random bytes from the system.0CnError indicating that this operation requires multipath to \xe2\x80\xa6BnThe extension was not negotiated with the peerAkMultipath is not negotiatedCnError when the multipath extension was not negotiated, but \xe2\x80\xa6CjThe path was opened in a NAT traversal round which was \xe2\x80\xa6BnHeader of an Initial packet, before decryptionCgDerive keying material from this connection\xe2\x80\x99s TLS \xe2\x80\xa6EdFill output with output.len() bytes of keying material \xe2\x80\xa60BnPathological case: many segments, get from endCfGet segments in the old way, using a loop of get callsClCurrent number of remotely initiated streams that may be \xe2\x80\xa6ClTrack changes on our external address as reported by the \xe2\x80\xa60CmCreate a client configuration that trusts specified trust \xe2\x80\xa60BkThe peer didn\xe2\x80\x99t give us any certificates.0BkThe peer sent an oversized record/fragment.0CkThe ack-eliciting threshold we will request the peer to use0BiWhether there are any pending retransmitsCdWhether the Multipath for QUIC extension is enabled.C`Sets the keep_alive_interval for a specific pathBoSet a custom ValidationTokenConfig0BmPath abandoned at the application\xe2\x80\x99s request0CjGet the current value of max_udp_payload_size0ChConfigure how to populate the destination CID of the \xe2\x80\xa60CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6CfWhether the socket address that is initiating this \xe2\x80\xa60CmModify the number of open paths allowed when multipath is \xe2\x80\xa6Cmthe number of connection IDs provided by the peer exceeds \xe2\x80\xa60CbError returned by Session::export_keying_material.0CiA provided certificate revocation list (CRL) was invalid.0CmPath abandoned due to no available connection IDs for the \xe2\x80\xa60Clreceived transport parameters that were badly formatted, \xe2\x80\xa60CiRegisters one address at which this endpoint might be \xe2\x80\xa6ClAdd addresses the local endpoint considers are reachable \xe2\x80\xa6ClMaximum number of outgoing application datagram bytes to \xe2\x80\xa60CiSet the client configuration used by connectBnSets the max_idle_timeout for a specific path.BfThe QUIC protocol version implemented.CfThe path became unusable after a local network change.BoBytes available in the outgoing datagram bufferDhMaximum number of received bytes to buffer for all Incoming0DaVariant of max_concurrent_bidi_streams affecting \xe2\x80\xa60ClModify the number of remotely initiated streams that may \xe2\x80\xa6CnCreate a client configuration that trusts the platform\xe2\x80\x99s \xe2\x80\xa60CkGenerates 8-byte connection IDs that can be efficiently \xe2\x80\xa6CkAn error occurred while handling Encrypted Client Hello \xe2\x80\xa60CkPath abandoned due to resource limitations in the transport0CiGenerates purely random connection IDs of a specified \xe2\x80\xa6ChWhether to use \xe2\x80\x9cGeneric Segmentation Offload\xe2\x80\x9d to \xe2\x80\xa60CmMaximum number of incoming bidirectional streams that may \xe2\x80\xa60BhUpdates this tuple\xe2\x80\x99s local address iffClMaximum number of incoming application datagram bytes to \xe2\x80\xa60BcInitiates a new nat traversal round0BdPackets were incorrectly deemed lost0CnRemoves one or more addresses from the set of addresses at \xe2\x80\xa6CgRemoves an address the endpoing no longer considers \xe2\x80\xa6C`Sets the keep_alive_interval for a specific pathDeA ConnectionIdParser implementation that assumes the \xe2\x80\xa6CjWe received a TLS handshake message that isn\xe2\x80\x99t valid \xe2\x80\xa60CiHow to construct new congestion::Controllers0BlSets a default per-path maximum idle timeout0BoThe key exchange group negotiated with the peer0CbWhether to send observed address reports to peers.0CiModify the number of remotely initiated bidirectional \xe2\x80\xa6BiEnables the Multipath Extension for QUIC.0CjModify the number of remotely initiated unidirectional \xe2\x80\xa6CeNumber of consecutive PTOs after which network is \xe2\x80\xa60BkSets a default per-path keep alive interval0CjWhether to receive observed address reports from other \xe2\x80\xa60BmGet the current local nat traversal addresses0CkGet the currently advertised nat traversal addresses by \xe2\x80\xa60AcNat traversal draftCkSets the maximum number of nat traversal addresses this \xe2\x80\xa60CjWhen multipath is required and has not been explicitly \xe2\x80\xa6") \ No newline at end of file diff --git a/pr/561/docs/search.index/entry/34c09ea0dc28.js b/pr/561/docs/search.index/entry/34c09ea0dc28.js deleted file mode 100644 index 7719f8455..000000000 --- a/pr/561/docs/search.index/entry/34c09ea0dc28.js +++ /dev/null @@ -1 +0,0 @@ -rd_("Af[463,15,464,0,126,0,0]Ak[3096,15,3097,3097,127,0,0]Ag[463,15,464,0,4085,0,0]Al[3096,15,3097,1784,4086,0,0]Al[1985,15,1986,1986,4087,0,0]Al[3096,15,1689,1689,1433,0,0]Ao[1195,13,1196,1196,3928,3037,0]Am[463,13,464,3640,4749,3037,0]Am[463,13,464,4142,1418,3037,0]Al[463,13,464,1094,503,3037,0]Am[463,13,464,1094,4359,3037,0]Am[463,13,464,4034,4352,3037,0]Am[463,13,464,4034,3044,3037,0]Am[463,13,464,4034,3239,3037,0]Am[463,13,464,4034,4351,3037,0]Am[463,13,464,4039,3257,3037,0]Am[463,13,464,4039,4120,3037,0]Aj[463,13,464,0,1443,3037,0]Aj[463,13,464,0,4915,3037,0]Aj[463,13,464,0,1152,3037,0]Aj[463,13,464,0,1426,3037,0]Aj[463,13,464,0,2294,3037,0]Aj[463,13,464,0,3217,3037,0]Aj[463,13,464,0,3041,3037,0]Aj[463,13,464,0,1867,3037,0]Aj[463,13,464,0,4071,3037,0]Aj[463,13,464,0,4444,3037,0]Aj[463,13,464,0,3941,3037,0]Aj[463,13,464,0,3931,3037,0]Aj[463,13,464,0,3025,3037,0]Aj[463,13,464,0,4441,3037,0]Aj[463,13,464,0,4642,3037,0]Aj[463,13,464,0,4077,3037,0]Aj[463,13,464,0,4080,3037,0]Aj[463,13,464,0,4085,3037,0]Aj[463,13,464,0,4808,3037,0]Ai[463,13,464,0,510,3037,0]Ai[463,13,464,0,126,3037,0]Aj[463,13,464,0,2281,3037,0]Ak[463,13,1693,0,5064,3037,0]Ak[463,13,1773,0,1169,3037,0]Ao[3096,13,3097,1810,1444,3037,0]Ao[3096,13,3097,1810,4916,3037,0]Ao[3096,13,3097,3061,1153,3037,0]Ao[3096,13,3097,3070,4750,3037,0]Ao[3096,13,3097,1366,1427,3037,0]Ao[3096,13,3097,1366,3233,3037,0]Ao[3096,13,3097,1366,3040,3037,0]Ao[3096,13,3097,1366,4748,3037,0]Ao[3096,13,3097,1366,4804,3037,0]Ao[3096,13,3097,1366,3207,3037,0]Ao[3096,13,3097,1382,2295,3037,0]Ao[3096,13,3097,1382,3218,3037,0]Ao[3096,13,3097,1382,3042,3037,0]Ao[3096,13,3097,1120,3045,3037,0]Ao[3096,13,3097,1120,4241,3037,0]Ao[3096,13,3097,1125,1868,3037,0]Ao[3096,13,3097,1125,3258,3037,0]Ao[3096,13,3097,1125,3940,3037,0]Ao[3096,13,3097,2002,3959,3037,0]Ao[3096,13,3097,2002,4353,3037,0]Ao[3096,13,3097,2002,4075,3037,0]Ao[3096,13,3097,3641,4445,3037,0]Ao[3096,13,3097,3641,3038,3037,0]Ao[3096,13,3097,3641,4319,3037,0]Ao[3096,13,3097,3194,3942,3037,0]Ao[3096,13,3097,1691,3932,3037,0]Ao[3096,13,3097,1356,3026,3037,0]Ao[3096,13,3097,1356,4334,3037,0]Ao[3096,13,3097,1356,3224,3037,0]Ao[3096,13,3097,1356,3247,3037,0]Ao[3096,13,3097,1356,4082,3037,0]Ao[3096,13,3097,1356,4443,3037,0]Ao[3096,13,3097,1356,4644,3037,0]Ao[3096,13,3097,2305,4648,3037,0]Ao[3096,13,3097,2305,4078,3037,0]Ao[3096,13,3097,1756,2267,3037,0]Ao[3096,13,3097,1756,4746,3037,0]Ao[3096,13,3097,1784,4081,3037,0]Ao[3096,13,3097,1784,4086,3037,0]Al[3096,13,3097,0,4357,3037,0]Al[3096,13,3097,0,4809,3037,0]An[3096,13,3097,3097,511,3037,0]An[3096,13,3097,3097,127,3037,0]Ao[3096,13,3097,3097,2282,3037,0]Ao[3096,13,3097,3097,3024,3037,0]Ao[3096,13,1689,1689,4247,3037,0]Ao[3096,13,4957,4957,4855,3037,0]Ao[3096,13,4957,4957,1171,3037,0]Ao[3096,13,1694,1694,5065,3037,0]Al[3096,13,1774,0,1170,3037,0]Ao[1985,13,1986,1986,4087,3037,0]Ai[463,13,464,1094,503,0,0]Aj[463,13,464,1094,4359,0,0]Aj[463,13,464,4034,3237,0,0]Aj[463,13,464,4034,4856,0,0]Aj[463,13,464,4039,3243,0,0]Ai[3096,14,3039,0,1420,0,0]Ai[3096,14,3039,0,3002,0,0]Ai[3096,14,3039,0,3020,0,0]Ai[3096,14,3039,0,4107,0,0]Ai[3096,14,3039,0,4100,0,0]Ai[3096,14,3958,0,2277,0,0]Ai[3096,14,3958,0,2297,0,0]Ai[3096,14,3958,0,2261,0,0]Ai[3096,14,3958,0,1855,0,0]Ae[1195,7,1196,0,0,0,0]Ah[3096,14,4456,0,499,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Af[463,5,3635,148,0,0,0]Ag[3096,5,3636,148,0,0,0]Al[1095,15,1096,1096,4848,0,0]Ae[2358,5,2359,0,0,0,0]Af[463,6,464,3097,0,0,0]Ae[3096,6,3097,0,0,0,0]Al[3096,15,1689,1689,1433,0,0]Ag[463,19,464,0,1443,0,0]Ag[463,19,464,0,1426,0,0]Al[3096,19,3097,1810,1444,0,0]Al[3096,19,3097,1366,1427,0,0]Ae[1195,5,1196,0,0,0,0]Ae[1095,5,1683,0,0,0,0]Ae[1095,5,1779,0,0,0,0]Af[463,15,464,0,126,0,0]Ak[3096,15,3097,3097,127,0,0]Ai[463,13,464,0,2294,117,0]Ai[463,13,464,0,3217,117,0]Ai[463,13,464,0,4448,117,0]An[3096,13,3097,1382,2295,117,0]An[3096,13,3097,1382,3218,117,0]An[3096,13,3097,1382,4449,117,0]Ai[463,13,464,0,1443,137,0]Ai[463,13,464,0,1426,137,0]Ai[463,13,464,0,3941,137,0]Ai[463,13,464,0,4080,137,0]Ah[463,13,464,0,510,137,0]Ah[463,13,464,0,126,137,0]Ai[463,13,464,0,2281,137,0]An[3096,13,3097,1810,1444,137,0]An[3096,13,3097,3070,4750,137,0]An[3096,13,3097,1366,1427,137,0]An[3096,13,3097,1120,3045,137,0]An[3096,13,3097,1120,4241,137,0]An[3096,13,3097,1125,3258,137,0]An[3096,13,3097,3194,3942,137,0]An[3096,13,3097,2305,4648,137,0]An[3096,13,3097,1756,4746,137,0]An[3096,13,3097,1784,4081,137,0]Am[3096,13,3097,3097,511,137,0]Am[3096,13,3097,3097,127,137,0]An[3096,13,3097,3097,2282,137,0]Ag[463,13,464,0,2281,0,0]Al[3096,13,3097,3097,2282,0,0]Ai[3096,14,3958,0,1421,0,0]Ai[3096,14,3958,0,3009,0,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Al[1985,14,1986,1986,2279,0,0]Al[1985,14,1986,1986,2293,0,0]An[1195,13,1196,1196,134,1159,0]Ao[1195,13,1196,1196,3952,1159,0]Ao[1195,13,1196,1196,3928,1159,0]Ao[1195,13,1380,1380,4354,1159,0]Ao[3966,13,3967,3967,5006,1159,0]Am[463,13,464,4142,4912,1159,0]Am[463,13,464,3640,3209,1159,0]Am[463,13,464,3640,3211,1159,0]Am[463,13,464,3640,4918,1159,0]D`[463,13,464,3640,4749,1159,0,\"impl-Debug-for-SendDatagramError\"]Db[463,13,464,3640,4749,1827,0,\"impl-Display-for-SendDatagramError\"]Am[463,13,464,2304,2259,1159,0]Am[463,13,464,2304,4215,1159,0]Cg[463,13,464,4142,1418,1827,0,\"impl-Display-for-Lagged\"]Ce[463,13,464,4142,1418,1159,0,\"impl-Debug-for-Lagged\"]Am[463,13,464,4142,3231,1159,0]Am[463,13,464,4142,4849,1159,0]Am[463,13,464,2336,2263,1159,0]Ck[463,13,464,2336,3240,1827,0,\"impl-Display-for-RetryError\"]Ci[463,13,464,2336,3240,1159,0,\"impl-Debug-for-RetryError\"]Am[463,13,464,2336,4333,1159,0]Al[463,13,464,1094,503,1159,0]Am[463,13,464,1094,4359,1159,0]Am[463,13,464,4034,3237,1159,0]Am[463,13,464,4034,4856,1159,0]Co[463,13,464,4034,4352,1827,0,\"impl-Display-for-ReadToEndError\"]Cm[463,13,464,4034,4352,1159,0,\"impl-Debug-for-ReadToEndError\"]Cj[463,13,464,4034,3044,1827,0,\"impl-Display-for-ReadError\"]Ch[463,13,464,4034,3044,1159,0,\"impl-Debug-for-ReadError\"]Ci[463,13,464,4034,3239,1159,0,\"impl-Debug-for-ResetError\"]Ck[463,13,464,4034,3239,1827,0,\"impl-Display-for-ResetError\"]Cm[463,13,464,4034,4351,1159,0,\"impl-Debug-for-ReadExactError\"]Co[463,13,464,4034,4351,1827,0,\"impl-Display-for-ReadExactError\"]Am[463,13,464,1393,4121,1159,0]Am[463,13,464,1137,3955,1159,0]Am[463,13,464,4039,3243,1159,0]Ci[463,13,464,4039,3257,1159,0,\"impl-Debug-for-WriteError\"]Ck[463,13,464,4039,3257,1827,0,\"impl-Display-for-WriteError\"]Cm[463,13,464,4039,4120,1827,0,\"impl-Display-for-StoppedError\"]Ck[463,13,464,4039,4120,1159,0,\"impl-Debug-for-StoppedError\"]Am[463,13,464,4039,1857,1159,0]Cd[463,13,464,0,1443,1827,0,\"impl-Display-for-VarInt\"]Cb[463,13,464,0,1443,1159,0,\"impl-Debug-for-VarInt\"]D`[463,13,464,0,4915,1159,0,\"impl-Debug-for-VarIntBoundsExceeded\"]Db[463,13,464,0,4915,1827,0,\"impl-Display-for-VarIntBoundsExceeded\"]Aj[463,13,464,0,1152,1159,0]Cb[463,13,464,0,1426,1159,0,\"impl-Debug-for-PathId\"]Cd[463,13,464,0,1426,1827,0,\"impl-Display-for-PathId\"]Aj[463,13,464,0,2294,1159,0]Aj[463,13,464,0,3217,1159,0]Aj[463,13,464,0,3041,1159,0]Aj[463,13,464,0,4448,1159,0]Aj[463,13,464,0,1867,1159,0]Cj[463,13,464,0,4071,1827,0,\"impl-Display-for-ClosedStream\"]Ch[463,13,464,0,4071,1159,0,\"impl-Debug-for-ClosedStream\"]Ck[463,13,464,0,4444,1159,0,\"impl-Debug-for-ConnectionError\"]Cm[463,13,464,0,4444,1827,0,\"impl-Display-for-ConnectionError\"]Aj[463,13,464,0,4458,1159,0]Aj[463,13,464,0,4467,1159,0]Aj[463,13,464,0,4773,1159,0]Aj[463,13,464,0,4788,1159,0]Aj[463,13,464,0,3941,1159,0]Aj[463,13,464,0,4328,1159,0]Aj[463,13,464,0,4114,1159,0]Aj[463,13,464,0,4972,1159,0]Aj[463,13,464,0,4065,1159,0]Cg[463,13,464,0,3931,1159,0,\"impl-Debug-for-ConfigError\"]Ci[463,13,464,0,3931,1827,0,\"impl-Display-for-ConfigError\"]Cg[463,13,464,0,3025,1827,0,\"impl-Display-for-FrameType\"]Ce[463,13,464,0,3025,1159,0,\"impl-Debug-for-FrameType\"]Cm[463,13,464,0,4441,1827,0,\"impl-Display-for-ConnectionClose\"]Ck[463,13,464,0,4441,1159,0,\"impl-Debug-for-ConnectionClose\"]Cn[463,13,464,0,4642,1827,0,\"impl-Display-for-ApplicationClose\"]Cl[463,13,464,0,4642,1159,0,\"impl-Debug-for-ApplicationClose\"]Ch[463,13,464,0,4077,1159,0,\"impl-Debug-for-ConnectError\"]Cj[463,13,464,0,4077,1827,0,\"impl-Display-for-ConnectError\"]Cj[463,13,464,0,4080,1827,0,\"impl-Display-for-ConnectionId\"]Ch[463,13,464,0,4080,1159,0,\"impl-Debug-for-ConnectionId\"]Aj[463,13,464,0,4085,1159,0]Cn[463,13,464,0,4808,1159,0,\"impl-Debug-for-TransportErrorCode\"]D`[463,13,464,0,4808,1827,0,\"impl-Display-for-TransportErrorCode\"]Aj[463,13,464,0,3220,1159,0]Aj[463,13,464,0,4675,1159,0]Ai[463,13,464,0,510,1159,0]C`[463,13,464,0,126,1827,0,\"impl-Display-for-Dir\"]Bn[463,13,464,0,126,1159,0,\"impl-Debug-for-Dir\"]Cf[463,13,464,0,2281,1827,0,\"impl-Display-for-StreamId\"]Cd[463,13,464,0,2281,1159,0,\"impl-Debug-for-StreamId\"]Aj[463,13,464,0,2291,1159,0]Aj[463,13,3635,0,120,1159,0]Ak[463,13,3635,0,3012,1159,0]Ak[463,13,3635,0,1156,1159,0]Ak[463,13,3635,0,3936,1159,0]Ak[463,13,3635,0,1840,1159,0]Ak[463,13,3635,0,4233,1159,0]Ak[463,13,3635,0,4737,1159,0]Ak[463,13,1693,0,5064,1159,0]Ak[463,13,1693,0,3934,1159,0]Ak[463,13,1693,0,4812,1159,0]Cb[463,13,1773,0,1169,1159,0,\"impl-Debug-for-Error\"]Cd[463,13,1773,0,1169,1827,0,\"impl-Display-for-Error\"]Da[463,13,1773,0,4910,1159,0,\"impl-Debug-for-NoInitialCipherSuite\"]Dc[463,13,1773,0,4910,1827,0,\"impl-Display-for-NoInitialCipherSuite\"]Ao[3096,13,3097,3641,3212,1159,0]Ao[3096,13,3097,2305,2260,1159,0]Ci[3096,13,3097,1810,1444,1827,0,\"impl-Display-for-VarInt\"]Cg[3096,13,3097,1810,1444,1159,0,\"impl-Debug-for-VarInt\"]De[3096,13,3097,1810,4916,1159,0,\"impl-Debug-for-VarIntBoundsExceeded\"]Dg[3096,13,3097,1810,4916,1827,0,\"impl-Display-for-VarIntBoundsExceeded\"]Ao[3096,13,3097,3061,1153,1159,0]Db[3096,13,3097,3070,4750,1159,0,\"impl-Debug-for-SendDatagramError\"]Dd[3096,13,3097,3070,4750,1827,0,\"impl-Display-for-SendDatagramError\"]Ci[3096,13,3097,1366,1427,1827,0,\"impl-Display-for-PathId\"]Cg[3096,13,3097,1366,1427,1159,0,\"impl-Debug-for-PathId\"]Ao[3096,13,3097,1366,4110,1159,0]Ao[3096,13,3097,1366,3233,1159,0]Ao[3096,13,3097,1366,3040,1159,0]Ao[3096,13,3097,1366,4748,1159,0]Dc[3096,13,3097,1366,4804,1159,0,\"impl-Debug-for-SetPathStatusError\"]De[3096,13,3097,1366,4804,1827,0,\"impl-Display-for-SetPathStatusError\"]Cm[3096,13,3097,1366,3207,1827,0,\"impl-Display-for-ClosedPath\"]Ck[3096,13,3097,1366,3207,1159,0,\"impl-Debug-for-ClosedPath\"]Ao[3096,13,3097,1382,2295,1159,0]Ao[3096,13,3097,1382,3218,1159,0]Ao[3096,13,3097,1382,3042,1159,0]Ao[3096,13,3097,1382,4449,1159,0]Cj[3096,13,3097,1120,3045,1159,0,\"impl-Debug-for-ReadError\"]Cl[3096,13,3097,1120,3045,1827,0,\"impl-Display-for-ReadError\"]D`[3096,13,3097,1120,4241,1827,0,\"impl-Display-for-ReadableError\"]Cn[3096,13,3097,1120,4241,1159,0,\"impl-Debug-for-ReadableError\"]Ao[3096,13,3097,1125,1868,1159,0]Cm[3096,13,3097,1125,3258,1827,0,\"impl-Display-for-WriteError\"]Ck[3096,13,3097,1125,3258,1159,0,\"impl-Debug-for-WriteError\"]Cn[3096,13,3097,1125,3940,1827,0,\"impl-Display-for-FinishError\"]Cl[3096,13,3097,1125,3940,1159,0,\"impl-Debug-for-FinishError\"]Ao[3096,13,3097,2002,3959,1159,0]Ao[3096,13,3097,2002,4353,1159,0]Co[3096,13,3097,2002,4075,1827,0,\"impl-Display-for-ClosedStream\"]Cm[3096,13,3097,2002,4075,1159,0,\"impl-Debug-for-ClosedStream\"]Db[3096,13,3097,3641,4445,1827,0,\"impl-Display-for-ConnectionError\"]D`[3096,13,3097,3641,4445,1159,0,\"impl-Debug-for-ConnectionError\"]Cl[3096,13,3097,3641,3038,1827,0,\"impl-Display-for-PathError\"]Cj[3096,13,3097,3641,3038,1159,0,\"impl-Debug-for-PathError\"]Da[3096,13,3097,3641,4319,1827,0,\"impl-Display-for-ClosePathError\"]Co[3096,13,3097,3641,4319,1159,0,\"impl-Debug-for-ClosePathError\"]Dg[3096,13,3097,3641,5001,1159,0,\"impl-Debug-for-MultipathNotNegotiated\"]Di[3096,13,3097,3641,5001,1827,0,\"impl-Display-for-MultipathNotNegotiated\"]Ao[3096,13,3097,3641,1174,1159,0]Ao[3096,13,3097,1116,4459,1159,0]Ao[3096,13,3097,3194,4468,1159,0]Ao[3096,13,3097,3194,4774,1159,0]Ao[3096,13,3097,3194,4789,1159,0]Ao[3096,13,3097,3194,3942,1159,0]Ao[3096,13,3097,1691,4329,1159,0]Ao[3096,13,3097,1691,4116,1159,0]Ao[3096,13,3097,1691,4973,1159,0]Ao[3096,13,3097,1691,4067,1159,0]Cl[3096,13,3097,1691,3932,1159,0,\"impl-Debug-for-ConfigError\"]Cn[3096,13,3097,1691,3932,1827,0,\"impl-Display-for-ConfigError\"]Cl[3096,13,3097,1356,3026,1827,0,\"impl-Display-for-FrameType\"]Cj[3096,13,3097,1356,3026,1159,0,\"impl-Debug-for-FrameType\"]Da[3096,13,3097,1356,4334,1827,0,\"impl-Display-for-InvalidFrameId\"]Co[3096,13,3097,1356,4334,1159,0,\"impl-Debug-for-InvalidFrameId\"]Cm[3096,13,3097,1356,3224,1827,0,\"impl-Display-for-MaybeFrame\"]Ck[3096,13,3097,1356,3224,1159,0,\"impl-Debug-for-MaybeFrame\"]Cm[3096,13,3097,1356,3247,1827,0,\"impl-Display-for-StreamInfo\"]Ck[3096,13,3097,1356,3247,1159,0,\"impl-Debug-for-StreamInfo\"]Cm[3096,13,3097,1356,4082,1159,0,\"impl-Debug-for-DatagramInfo\"]Co[3096,13,3097,1356,4082,1827,0,\"impl-Display-for-DatagramInfo\"]Db[3096,13,3097,1356,4443,1827,0,\"impl-Display-for-ConnectionClose\"]D`[3096,13,3097,1356,4443,1159,0,\"impl-Debug-for-ConnectionClose\"]Dc[3096,13,3097,1356,4644,1827,0,\"impl-Display-for-ApplicationClose\"]Da[3096,13,3097,1356,4644,1159,0,\"impl-Debug-for-ApplicationClose\"]Ci[3096,13,3097,1356,2253,1159,0,\"impl-Debug-for-Datagram\"]Ck[3096,13,3097,1356,2253,1827,0,\"impl-Display-for-Datagram\"]Ao[3096,13,3097,2305,4648,1159,0]Ao[3096,13,3097,2305,2264,1159,0]Co[3096,13,3097,2305,4078,1827,0,\"impl-Display-for-ConnectError\"]Cm[3096,13,3097,2305,4078,1159,0,\"impl-Debug-for-ConnectError\"]Ao[3096,13,3097,2305,3926,1159,0]Cm[3096,13,3097,2305,3241,1827,0,\"impl-Display-for-RetryError\"]Ck[3096,13,3097,2305,3241,1159,0,\"impl-Debug-for-RetryError\"]Ao[3096,13,3097,1756,4236,1159,0]Ao[3096,13,3097,1756,4457,1159,0]Ao[3096,13,3097,1756,5005,1159,0]Ao[3096,13,3097,1756,2267,1159,0]Dd[3096,13,3097,1756,4746,1827,0,\"impl-Display-for-PacketDecodeError\"]Db[3096,13,3097,1756,4746,1159,0,\"impl-Debug-for-PacketDecodeError\"]Ao[3096,13,3097,1784,4447,1159,0]Ao[3096,13,3097,1784,4214,1159,0]Co[3096,13,3097,1784,4081,1827,0,\"impl-Display-for-ConnectionId\"]Cm[3096,13,3097,1784,4081,1159,0,\"impl-Debug-for-ConnectionId\"]Ao[3096,13,3097,1784,4086,1159,0]Ce[3096,13,3097,0,4357,1827,0,\"impl-Display-for-Error\"]Cc[3096,13,3097,0,4357,1159,0,\"impl-Debug-for-Error\"]Cd[3096,13,3097,0,4809,1827,0,\"impl-Display-for-Code\"]Cb[3096,13,3097,0,4809,1159,0,\"impl-Debug-for-Code\"]Ao[3096,13,3097,4254,3221,1159,0]Ao[3096,13,3097,4254,5099,1159,0]Ao[3096,13,3097,4844,4676,1159,0]An[3096,13,3097,3097,511,1159,0]Cc[3096,13,3097,3097,127,1159,0,\"impl-Debug-for-Dir\"]Ce[3096,13,3097,3097,127,1827,0,\"impl-Display-for-Dir\"]Ci[3096,13,3097,3097,2282,1159,0,\"impl-Debug-for-StreamId\"]Ck[3096,13,3097,3097,2282,1827,0,\"impl-Display-for-StreamId\"]Ao[3096,13,3097,3097,2292,1159,0]Cl[3096,13,3097,3097,3024,1827,0,\"impl-Display-for-FourTuple\"]Cj[3096,13,3097,3097,3024,1159,0,\"impl-Debug-for-FourTuple\"]Cn[3096,13,1689,1689,4247,1159,0,\"impl-Debug-for-UnexpectedEnd\"]D`[3096,13,1689,1689,4247,1827,0,\"impl-Display-for-UnexpectedEnd\"]Ao[3096,13,4957,4957,4855,1159,0]Ch[3096,13,4957,4957,1171,1827,0,\"impl-Display-for-Error\"]Cf[3096,13,4957,4957,1171,1159,0,\"impl-Debug-for-Error\"]Ao[3096,13,1694,1694,5065,1159,0]Ao[3096,13,1694,1694,3935,1159,0]Ao[3096,13,1694,1694,4815,1159,0]Cc[3096,13,1774,0,1170,1159,0,\"impl-Debug-for-Error\"]Ce[3096,13,1774,0,1170,1827,0,\"impl-Display-for-Error\"]Dg[3096,13,1774,1774,4911,1827,0,\"impl-Display-for-NoInitialCipherSuite\"]De[3096,13,1774,1774,4911,1159,0,\"impl-Debug-for-NoInitialCipherSuite\"]Am[3096,13,3636,148,121,1159,0]An[3096,13,3636,148,3013,1159,0]Ao[3096,13,3636,1352,1157,1159,0]Ao[3096,13,3636,1352,3937,1159,0]Ao[3096,13,3636,2358,1841,1159,0]Ao[3096,13,3636,2358,4234,1159,0]Ao[3096,13,3636,3636,4738,1159,0]Ch[3096,13,4706,4706,1172,1827,0,\"impl-Display-for-Error\"]Cf[3096,13,4706,4706,1172,1159,0,\"impl-Debug-for-Error\"]Ao[3096,13,4706,4706,1175,1159,0]An[1985,13,1986,416,4358,1159,0]Ao[1985,13,1986,1986,2279,1159,0]Ao[1985,13,1986,1986,2293,1159,0]Ao[1985,13,1986,1986,4087,1159,0]Aj[463,13,464,4142,4912,0,0]Al[3096,13,3097,1366,4110,0,0]Ag[463,14,464,0,2294,0,0]Al[3096,14,3097,1382,2295,0,0]Al[3096,13,3097,1756,4236,0,0]Al[3096,14,3097,1756,5005,0,0]Ah[3096,14,4456,0,499,0,0]Al[1985,14,1986,1986,2279,0,0]Ag[463,13,464,0,4972,0,0]Al[3096,13,3097,1691,4973,0,0]8Al[1195,13,1380,1380,4354,0,0]Al[3966,13,3967,3967,5006,0,0]Ag[463,13,464,0,4206,0,0]Aj[463,13,464,2304,2259,0,0]Ag[463,13,464,0,3234,0,0]Ag[463,13,464,0,4458,0,0]Ag[463,13,464,0,4328,0,0]Ag[463,13,464,0,4114,0,0]Ag[463,13,464,0,4065,0,0]Ag[463,13,464,0,4080,0,0]Ag[463,13,464,0,4675,0,0]Ag[463,13,464,0,2281,0,0]Ag[463,13,3635,0,120,0,0]Ah[463,13,3635,0,1156,0,0]Ah[463,13,3635,0,1840,0,0]Al[3096,13,3097,4477,4207,0,0]Al[3096,13,3097,1116,3235,0,0]Al[3096,13,3097,2305,2260,0,0]Al[3096,13,3097,1756,5124,0,0]Al[3096,13,3097,4254,5094,0,0]Al[3096,13,3097,1116,4459,0,0]Al[3096,13,3097,1691,4329,0,0]Al[3096,13,3097,1691,4116,0,0]Al[3096,13,3097,1691,4067,0,0]Al[3096,13,3097,1756,4236,0,0]Al[3096,13,3097,1784,4081,0,0]Ai[3096,13,3097,0,4357,0,0]Al[3096,13,3097,4254,5099,0,0]Al[3096,13,3097,4844,4676,0,0]Al[3096,13,3097,3097,2282,0,0]Al[3096,13,3097,3097,3024,0,0]Aj[3096,13,3636,148,121,0,0]Al[3096,13,3636,1352,1157,0,0]Al[3096,13,3636,2358,1841,0,0]Ak[1985,13,1986,416,4358,0,0]Al[1095,13,4174,4174,5050,0,0]Al[1095,13,4174,4174,5051,0,0]Aa[463,3,0,0,0,0,0]Ah[463,13,464,0,510,133,0]Am[3096,13,3097,3097,511,133,0]Ag[463,12,464,0,3250,0,0]Aj[463,13,464,1994,1852,0,0]0Am[463,13,464,1393,4121,1852,0]Aj[463,13,464,0,4245,3250,0]Al[3096,12,3097,1691,3251,0,0]Ao[3096,13,3097,1691,4246,3251,0]Aj[463,13,464,3640,3211,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,13,3097,3641,3212,0,0]Al[3096,14,3097,1382,3042,0,0]Ae[1095,7,1683,0,0,0,0]Ae[1095,7,1779,0,0,0,0]Ac[463,4,464,0,0,0,0]Ag[463,15,464,0,4085,0,0]Al[3096,15,3097,1784,4086,0,0]Al[1985,15,1986,1986,4087,0,0]210Ag[463,5,1693,1694,0,0,0]Ae[3096,5,1694,0,0,0,0]Al[3096,15,3097,1756,4457,0,0]Al[3096,15,3097,1356,3224,0,0]Af[463,5,464,1094,0,0,0]Al[3096,15,3097,3641,1174,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Aj[463,15,464,4034,4352,0,0]Af[463,6,464,3097,0,0,0]Ae[3096,6,3097,0,0,0,0]Ag[463,19,464,0,1426,0,0]Al[3096,19,3097,1366,1427,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]Ai[3096,14,3039,0,4100,0,0]Al[1985,14,1986,1986,2279,0,0]Aa[519,3,0,0,0,0,0]Ai[3096,14,3097,0,4357,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,14,3097,1382,3042,0,0]Al[3096,14,3097,1356,2253,0,0]Al[463,13,464,3640,2274,487,0]Al[463,13,464,2336,2263,487,0]Ak[463,13,464,1094,503,487,0]Al[463,13,464,1094,4359,487,0]Al[463,13,464,4034,3237,487,0]Al[463,13,464,4039,3243,487,0]An[3096,13,3097,1120,1407,487,0]Am[1195,13,1196,1196,134,494,0]An[1195,13,1196,1196,3952,494,0]An[1195,13,1196,1196,3928,494,0]An[1195,13,1380,1380,3960,494,0]An[1195,13,1380,1380,1189,494,0]An[1195,13,1380,1380,4354,494,0]Ak[519,13,520,520,3929,494,0]An[3966,13,3967,3967,5006,494,0]Al[463,13,464,3640,4472,494,0]Al[463,13,464,3640,2274,494,0]Ai[463,13,464,0,4206,494,0]Al[463,13,464,4142,4912,494,0]Al[463,13,464,1094,2275,494,0]Al[463,13,464,1094,4640,494,0]Al[463,13,464,3640,3209,494,0]Al[463,13,464,3640,3211,494,0]Al[463,13,464,3640,1843,494,0]Al[463,13,464,3640,1419,494,0]Al[463,13,464,3640,3004,494,0]Al[463,13,464,3640,2247,494,0]Al[463,13,464,3640,4106,494,0]Al[463,13,464,3640,4111,494,0]Al[463,13,464,3640,4918,494,0]Al[463,13,464,3640,4749,494,0]0Al[463,13,464,2304,2259,494,0]Al[463,13,464,2304,4215,494,0]Al[463,13,464,2304,1399,494,0]Al[463,13,464,4142,1418,494,0]Al[463,13,464,4142,3231,494,0]Al[463,13,464,4142,4849,494,0]Al[463,13,464,2336,2263,494,0]Al[463,13,464,2336,3240,494,0]Al[463,13,464,2336,4333,494,0]Ak[463,13,464,1094,503,494,0]Al[463,13,464,1094,4359,494,0]Al[463,13,464,4034,3237,494,0]Al[463,13,464,4034,4856,494,0]Al[463,13,464,4034,4352,494,0]0Al[463,13,464,4034,3044,494,0]Df[463,13,464,4034,3044,494,0,\"impl-From%3CResetError%3E-for-ReadError\"]Dk[463,13,464,4034,3044,494,0,\"impl-From%3CConnectionError%3E-for-ReadError\"]Al[463,13,464,4034,3239,494,0]0Al[463,13,464,4034,4351,494,0]0Al[463,13,464,1393,4121,494,0]Al[463,13,464,1137,3955,494,0]Al[463,13,464,4039,3243,494,0]Di[463,13,464,4039,3257,494,0,\"impl-From%3CStoppedError%3E-for-WriteError\"]Di[463,13,464,4039,3257,494,0,\"impl-From%3CClosedStream%3E-for-WriteError\"]Dl[463,13,464,4039,3257,494,0,\"impl-From%3CConnectionError%3E-for-WriteError\"]Al[463,13,464,4039,3257,494,0]Al[463,13,464,4039,4120,494,0]0Al[463,13,464,4039,1857,494,0]Ai[463,13,464,0,3234,494,0]Ai[463,13,464,0,4245,494,0]Ai[463,13,464,0,4464,494,0]Ai[463,13,464,0,4098,494,0]Ai[463,13,464,0,4342,494,0]Dh[463,13,464,0,1443,494,0,\"impl-From%3CTransportErrorCode%3E-for-VarInt\"]Ch[463,13,464,0,1443,494,0,\"impl-From%3Cu8%3E-for-VarInt\"]Ci[463,13,464,0,1443,494,0,\"impl-From%3Cu16%3E-for-VarInt\"]Cn[463,13,464,0,1443,494,0,\"impl-From%3CStreamId%3E-for-VarInt\"]Ci[463,13,464,0,1443,494,0,\"impl-From%3Cu32%3E-for-VarInt\"]Ai[463,13,464,0,1443,494,0]Ai[463,13,464,0,4915,494,0]Ai[463,13,464,0,1152,494,0]Ai[463,13,464,0,1426,494,0]0Ai[463,13,464,0,2294,494,0]Ai[463,13,464,0,3217,494,0]Ai[463,13,464,0,3041,494,0]Ai[463,13,464,0,4448,494,0]Ai[463,13,464,0,1867,494,0]Ai[463,13,464,0,4071,494,0]Dm[463,13,464,0,4444,494,0,\"impl-From%3CTransportError%3E-for-ConnectionError\"]Dd[463,13,464,0,4444,494,0,\"impl-From%3CClose%3E-for-ConnectionError\"]Ai[463,13,464,0,4444,494,0]Dj[463,13,464,0,4444,494,0,\"impl-From%3CCloseReason%3E-for-ConnectionError\"]Ai[463,13,464,0,4458,494,0]Ai[463,13,464,0,4467,494,0]Ai[463,13,464,0,4773,494,0]Ai[463,13,464,0,4788,494,0]Ai[463,13,464,0,3941,494,0]0Ai[463,13,464,0,4328,494,0]Ai[463,13,464,0,4114,494,0]Ai[463,13,464,0,4972,494,0]Ai[463,13,464,0,4065,494,0]Ai[463,13,464,0,3931,494,0]Do[463,13,464,0,3931,494,0,\"impl-From%3CVarIntBoundsExceeded%3E-for-ConfigError\"]Dj[463,13,464,0,3931,494,0,\"impl-From%3CTryFromIntError%3E-for-ConfigError\"]Ai[463,13,464,0,3025,494,0]Ai[463,13,464,0,4441,494,0]0Ai[463,13,464,0,4642,494,0]Ai[463,13,464,0,4077,494,0]0Ai[463,13,464,0,4080,494,0]Ai[463,13,464,0,4085,494,0]Ai[463,13,464,0,4808,494,0]0Ai[463,13,464,0,3220,494,0]Ai[463,13,464,0,4675,494,0]Ah[463,13,464,0,510,494,0]Ah[463,13,464,0,126,494,0]Ai[463,13,464,0,2281,494,0]0Ai[463,13,464,0,2291,494,0]Ai[463,13,3635,0,120,494,0]Aj[463,13,3635,0,3012,494,0]Aj[463,13,3635,0,1156,494,0]Aj[463,13,3635,0,3936,494,0]Aj[463,13,3635,0,1840,494,0]Aj[463,13,3635,0,4233,494,0]Aj[463,13,3635,0,4737,494,0]Aj[463,13,1693,0,1835,494,0]Ai[463,13,1693,0,497,494,0]Aj[463,13,1693,0,5064,494,0]Aj[463,13,1693,0,3934,494,0]0Aj[463,13,1693,0,4812,494,0]Aj[463,13,1773,0,3252,494,0]Aj[463,13,1773,0,4217,494,0]Df[463,13,1773,0,1169,494,0,\"impl-From%3CInconsistentKeys%3E-for-Error\"]Df[463,13,1773,0,1169,494,0,\"impl-From%3CPeerIncompatible%3E-for-Error\"]De[463,13,1773,0,1169,494,0,\"impl-From%3CGetRandomFailed%3E-for-Error\"]Dd[463,13,1773,0,1169,494,0,\"impl-From%3CInvalidMessage%3E-for-Error\"]Dd[463,13,1773,0,1169,494,0,\"impl-From%3CPeerMisbehaved%3E-for-Error\"]De[463,13,1773,0,1169,494,0,\"impl-From%3CSystemTimeError%3E-for-Error\"]Dm[463,13,1773,0,1169,494,0,\"impl-From%3CCertRevocationListError%3E-for-Error\"]Df[463,13,1773,0,1169,494,0,\"impl-From%3CCertificateError%3E-for-Error\"]D`[463,13,1773,0,1169,494,0,\"impl-From%3COtherError%3E-for-Error\"]Do[463,13,1773,0,1169,494,0,\"impl-From%3CUnsupportedOperationError%3E-for-Error\"]Do[463,13,1773,0,1169,494,0,\"impl-From%3CEncryptedClientHelloError%3E-for-Error\"]Aj[463,13,1773,0,1169,494,0]Aj[463,13,1773,0,4671,494,0]Aj[463,13,1773,0,4910,494,0]Aj[463,13,1773,0,4673,494,0]Am[2358,13,2359,2359,125,494,0]An[2358,13,2359,2359,2250,494,0]An[3096,13,3097,4477,4207,494,0]An[3096,13,3097,3070,3018,494,0]An[3096,13,3097,1120,1407,494,0]An[3096,13,3097,2002,1861,494,0]An[3096,13,3097,2002,3238,494,0]An[3096,13,3097,2002,3244,494,0]An[3096,13,3097,3641,3212,494,0]An[3096,13,3097,1116,3235,494,0]An[3096,13,3097,1691,4246,494,0]An[3096,13,3097,2305,2260,494,0]An[3096,13,3097,2305,4213,494,0]An[3096,13,3097,2305,4651,494,0]An[3096,13,3097,2305,4224,494,0]An[3096,13,3097,1756,5124,494,0]An[3096,13,3097,4254,5094,494,0]An[3096,13,3097,1392,4465,494,0]An[3096,13,3097,1392,4099,494,0]An[3096,13,3097,1392,4343,494,0]Cn[3096,13,3097,1810,1444,494,0,\"impl-From%3Cu32%3E-for-VarInt\"]Dc[3096,13,3097,1810,1444,494,0,\"impl-From%3CStreamId%3E-for-VarInt\"]Cn[3096,13,3097,1810,1444,494,0,\"impl-From%3Cu16%3E-for-VarInt\"]Cm[3096,13,3097,1810,1444,494,0,\"impl-From%3Cu8%3E-for-VarInt\"]An[3096,13,3097,1810,1444,494,0]Co[3096,13,3097,1810,1444,494,0,\"impl-From%3CCode%3E-for-VarInt\"]An[3096,13,3097,1810,4916,494,0]An[3096,13,3097,3061,1153,494,0]An[3096,13,3097,3070,4750,494,0]An[3096,13,3097,1366,1427,494,0]0An[3096,13,3097,1366,4110,494,0]An[3096,13,3097,1366,3233,494,0]An[3096,13,3097,1366,3040,494,0]An[3096,13,3097,1366,4748,494,0]An[3096,13,3097,1366,4804,494,0]An[3096,13,3097,1366,3207,494,0]An[3096,13,3097,1382,2295,494,0]An[3096,13,3097,1382,3218,494,0]An[3096,13,3097,1382,3042,494,0]An[3096,13,3097,1382,4449,494,0]An[3096,13,3097,1120,3045,494,0]An[3096,13,3097,1120,4241,494,0]An[3096,13,3097,1125,1868,494,0]An[3096,13,3097,1125,3258,494,0]An[3096,13,3097,1125,3940,494,0]An[3096,13,3097,2002,3959,494,0]An[3096,13,3097,2002,4353,494,0]An[3096,13,3097,2002,4075,494,0]An[3096,13,3097,3641,4445,494,0]0An[3096,13,3097,3641,3038,494,0]An[3096,13,3097,3641,4319,494,0]An[3096,13,3097,3641,5001,494,0]An[3096,13,3097,3641,1174,494,0]0An[3096,13,3097,1116,4459,494,0]An[3096,13,3097,3194,4468,494,0]An[3096,13,3097,3194,4774,494,0]An[3096,13,3097,3194,4789,494,0]An[3096,13,3097,3194,3942,494,0]0An[3096,13,3097,1691,4329,494,0]An[3096,13,3097,1691,4116,494,0]An[3096,13,3097,1691,4973,494,0]An[3096,13,3097,1691,4067,494,0]An[3096,13,3097,1691,3932,494,0]Do[3096,13,3097,1691,3932,494,0,\"impl-From%3CTryFromIntError%3E-for-ConfigError\"]Ed[3096,13,3097,1691,3932,494,0,\"impl-From%3CVarIntBoundsExceeded%3E-for-ConfigError\"]An[3096,13,3097,1356,3026,494,0]An[3096,13,3097,1356,4334,494,0]An[3096,13,3097,1356,3224,494,0]An[3096,13,3097,1356,3247,494,0]An[3096,13,3097,1356,4082,494,0]An[3096,13,3097,1356,4443,494,0]0An[3096,13,3097,1356,4644,494,0]An[3096,13,3097,1356,2253,494,0]An[3096,13,3097,2305,4648,494,0]An[3096,13,3097,2305,2264,494,0]An[3096,13,3097,2305,4078,494,0]0An[3096,13,3097,2305,3926,494,0]An[3096,13,3097,2305,3241,494,0]An[3096,13,3097,1756,4236,494,0]An[3096,13,3097,1756,4457,494,0]An[3096,13,3097,1756,5005,494,0]An[3096,13,3097,1756,2267,494,0]An[3096,13,3097,1756,4746,494,0]0An[3096,13,3097,1784,4447,494,0]An[3096,13,3097,1784,4214,494,0]An[3096,13,3097,1784,4081,494,0]An[3096,13,3097,1784,4086,494,0]Ak[3096,13,3097,0,4357,494,0]0Ak[3096,13,3097,0,4809,494,0]0An[3096,13,3097,4254,3221,494,0]An[3096,13,3097,4254,5099,494,0]An[3096,13,3097,4844,4676,494,0]Am[3096,13,3097,3097,511,494,0]Am[3096,13,3097,3097,127,494,0]An[3096,13,3097,3097,2282,494,0]0An[3096,13,3097,3097,2292,494,0]An[3096,13,3097,3097,3024,494,0]An[3096,13,1689,1689,4247,494,0]An[3096,13,4957,4957,4855,494,0]An[3096,13,4957,4957,1171,494,0]0An[3096,13,1694,1694,1836,494,0]Am[3096,13,1694,1694,498,494,0]An[3096,13,1694,1694,5065,494,0]An[3096,13,1694,1694,3935,494,0]0An[3096,13,1694,1694,4815,494,0]An[3096,13,1774,1774,3253,494,0]An[3096,13,1774,1774,4218,494,0]E`[3096,13,1774,0,1170,494,0,\"impl-From%3CUnsupportedOperationError%3E-for-Error\"]Dg[3096,13,1774,0,1170,494,0,\"impl-From%3CInconsistentKeys%3E-for-Error\"]Da[3096,13,1774,0,1170,494,0,\"impl-From%3COtherError%3E-for-Error\"]Dg[3096,13,1774,0,1170,494,0,\"impl-From%3CPeerIncompatible%3E-for-Error\"]Ak[3096,13,1774,0,1170,494,0]Df[3096,13,1774,0,1170,494,0,\"impl-From%3CGetRandomFailed%3E-for-Error\"]De[3096,13,1774,0,1170,494,0,\"impl-From%3CPeerMisbehaved%3E-for-Error\"]Df[3096,13,1774,0,1170,494,0,\"impl-From%3CSystemTimeError%3E-for-Error\"]E`[3096,13,1774,0,1170,494,0,\"impl-From%3CEncryptedClientHelloError%3E-for-Error\"]Dg[3096,13,1774,0,1170,494,0,\"impl-From%3CCertificateError%3E-for-Error\"]De[3096,13,1774,0,1170,494,0,\"impl-From%3CInvalidMessage%3E-for-Error\"]Dn[3096,13,1774,0,1170,494,0,\"impl-From%3CCertRevocationListError%3E-for-Error\"]An[3096,13,1774,1774,4672,494,0]An[3096,13,1774,1774,4911,494,0]An[3096,13,1774,1774,4674,494,0]Al[3096,13,3636,148,121,494,0]Am[3096,13,3636,148,3013,494,0]An[3096,13,3636,1352,1157,494,0]An[3096,13,3636,1352,3937,494,0]An[3096,13,3636,2358,1841,494,0]An[3096,13,3636,2358,4234,494,0]An[3096,13,3636,3636,4738,494,0]An[3096,13,4706,4706,1172,494,0]An[3096,13,4706,4706,1175,494,0]An[1985,13,1986,1986,3256,494,0]0Am[1985,13,1986,416,4358,494,0]An[1985,13,1986,1986,2279,494,0]An[1985,13,1986,1986,2293,494,0]An[1985,13,1986,1986,4087,494,0]An[1095,13,1096,1096,3015,494,0]An[1095,13,1096,1096,4848,494,0]Am[1095,13,1683,1683,135,494,0]An[1095,13,1381,1381,1190,494,0]An[1095,13,1381,1381,3961,494,0]An[1095,13,1381,1381,4453,494,0]An[1095,13,4174,4174,5050,494,0]An[1095,13,4174,4174,5051,494,0]Am[1095,13,1779,1779,136,494,0]Ai[463,13,464,0,1443,495,0]Ai[463,13,464,0,1426,495,0]Ai[463,13,464,0,3941,495,0]Ai[463,13,464,0,4080,495,0]Ah[463,13,464,0,510,495,0]Ah[463,13,464,0,126,495,0]Ai[463,13,464,0,2281,495,0]An[3096,13,3097,1810,1444,495,0]An[3096,13,3097,3070,4750,495,0]An[3096,13,3097,1366,1427,495,0]An[3096,13,3097,1120,3045,495,0]An[3096,13,3097,1120,4241,495,0]An[3096,13,3097,1125,3258,495,0]An[3096,13,3097,3194,3942,495,0]An[3096,13,3097,2305,4648,495,0]An[3096,13,3097,1756,4746,495,0]An[3096,13,3097,1784,4081,495,0]Am[3096,13,3097,3097,511,495,0]Am[3096,13,3097,3097,127,495,0]An[3096,13,3097,3097,2282,495,0]An[3096,13,3097,3097,3024,495,0]Am[1195,13,1196,1196,134,496,0]An[1195,13,1196,1196,3952,496,0]An[1195,13,1196,1196,3928,496,0]An[1195,13,1380,1380,3960,496,0]An[1195,13,1380,1380,1189,496,0]An[1195,13,1380,1380,4354,496,0]Ak[519,13,520,520,3929,496,0]An[3966,13,3967,3967,5006,496,0]Al[463,13,464,3640,4472,496,0]Al[463,13,464,3640,2274,496,0]Ai[463,13,464,0,4206,496,0]Al[463,13,464,4142,4912,496,0]Al[463,13,464,1094,2275,496,0]Al[463,13,464,1094,4640,496,0]Al[463,13,464,3640,3209,496,0]Al[463,13,464,3640,3211,496,0]Al[463,13,464,3640,1843,496,0]Al[463,13,464,3640,1419,496,0]Al[463,13,464,3640,3004,496,0]Al[463,13,464,3640,2247,496,0]Al[463,13,464,3640,4106,496,0]Al[463,13,464,3640,4111,496,0]Al[463,13,464,3640,4918,496,0]Al[463,13,464,3640,4749,496,0]Al[463,13,464,2304,2259,496,0]Al[463,13,464,2304,4215,496,0]Al[463,13,464,2304,1399,496,0]Al[463,13,464,4142,1418,496,0]Al[463,13,464,4142,3231,496,0]Al[463,13,464,4142,4849,496,0]Al[463,13,464,2336,2263,496,0]Al[463,13,464,2336,3240,496,0]Al[463,13,464,2336,4333,496,0]Ak[463,13,464,1094,503,496,0]Al[463,13,464,1094,4359,496,0]Al[463,13,464,4034,3237,496,0]Al[463,13,464,4034,4856,496,0]Al[463,13,464,4034,4352,496,0]Al[463,13,464,4034,3044,496,0]Al[463,13,464,4034,3239,496,0]Al[463,13,464,4034,4351,496,0]Al[463,13,464,1393,4121,496,0]Al[463,13,464,1137,3955,496,0]Al[463,13,464,4039,3243,496,0]Al[463,13,464,4039,3257,496,0]Al[463,13,464,4039,4120,496,0]Al[463,13,464,4039,1857,496,0]Ai[463,13,464,0,3234,496,0]Ai[463,13,464,0,4245,496,0]Ai[463,13,464,0,4464,496,0]Ai[463,13,464,0,4098,496,0]Ai[463,13,464,0,4342,496,0]Ai[463,13,464,0,1443,496,0]Ai[463,13,464,0,4915,496,0]Ai[463,13,464,0,1152,496,0]Ai[463,13,464,0,1426,496,0]Ai[463,13,464,0,2294,496,0]Ai[463,13,464,0,3217,496,0]Ai[463,13,464,0,3041,496,0]Ai[463,13,464,0,4448,496,0]Ai[463,13,464,0,1867,496,0]Ai[463,13,464,0,4071,496,0]Ai[463,13,464,0,4444,496,0]Ai[463,13,464,0,4458,496,0]Ai[463,13,464,0,4467,496,0]Ai[463,13,464,0,4773,496,0]Ai[463,13,464,0,4788,496,0]Ai[463,13,464,0,3941,496,0]Ai[463,13,464,0,4328,496,0]Ai[463,13,464,0,4114,496,0]Ai[463,13,464,0,4972,496,0]Ai[463,13,464,0,4065,496,0]Ai[463,13,464,0,3931,496,0]Ai[463,13,464,0,3025,496,0]Ai[463,13,464,0,4441,496,0]Ai[463,13,464,0,4642,496,0]Ai[463,13,464,0,4077,496,0]Ai[463,13,464,0,4080,496,0]Ai[463,13,464,0,4085,496,0]Ai[463,13,464,0,4808,496,0]Ai[463,13,464,0,3220,496,0]Ai[463,13,464,0,4675,496,0]Ah[463,13,464,0,510,496,0]Ah[463,13,464,0,126,496,0]Ai[463,13,464,0,2281,496,0]Ai[463,13,464,0,2291,496,0]Ai[463,13,3635,0,120,496,0]Aj[463,13,3635,0,3012,496,0]Aj[463,13,3635,0,1156,496,0]Aj[463,13,3635,0,3936,496,0]Aj[463,13,3635,0,1840,496,0]Aj[463,13,3635,0,4233,496,0]Aj[463,13,3635,0,4737,496,0]Aj[463,13,1693,0,1835,496,0]Ai[463,13,1693,0,497,496,0]Aj[463,13,1693,0,5064,496,0]Aj[463,13,1693,0,3934,496,0]Aj[463,13,1693,0,4812,496,0]Aj[463,13,1773,0,3252,496,0]Aj[463,13,1773,0,4217,496,0]Aj[463,13,1773,0,1169,496,0]Aj[463,13,1773,0,4671,496,0]Aj[463,13,1773,0,4910,496,0]Aj[463,13,1773,0,4673,496,0]Am[2358,13,2359,2359,125,496,0]An[2358,13,2359,2359,2250,496,0]An[3096,13,3097,4477,4207,496,0]An[3096,13,3097,3070,3018,496,0]An[3096,13,3097,1120,1407,496,0]An[3096,13,3097,2002,1861,496,0]An[3096,13,3097,2002,3238,496,0]An[3096,13,3097,2002,3244,496,0]An[3096,13,3097,3641,3212,496,0]An[3096,13,3097,1116,3235,496,0]An[3096,13,3097,1691,4246,496,0]An[3096,13,3097,2305,2260,496,0]An[3096,13,3097,2305,4213,496,0]An[3096,13,3097,2305,4651,496,0]An[3096,13,3097,2305,4224,496,0]An[3096,13,3097,1756,5124,496,0]An[3096,13,3097,4254,5094,496,0]An[3096,13,3097,1392,4465,496,0]An[3096,13,3097,1392,4099,496,0]An[3096,13,3097,1392,4343,496,0]An[3096,13,3097,1810,1444,496,0]An[3096,13,3097,1810,4916,496,0]An[3096,13,3097,3061,1153,496,0]An[3096,13,3097,3070,4750,496,0]An[3096,13,3097,1366,1427,496,0]An[3096,13,3097,1366,4110,496,0]An[3096,13,3097,1366,3233,496,0]An[3096,13,3097,1366,3040,496,0]An[3096,13,3097,1366,4748,496,0]An[3096,13,3097,1366,4804,496,0]An[3096,13,3097,1366,3207,496,0]An[3096,13,3097,1382,2295,496,0]An[3096,13,3097,1382,3218,496,0]An[3096,13,3097,1382,3042,496,0]An[3096,13,3097,1382,4449,496,0]An[3096,13,3097,1120,3045,496,0]An[3096,13,3097,1120,4241,496,0]An[3096,13,3097,1125,1868,496,0]An[3096,13,3097,1125,3258,496,0]An[3096,13,3097,1125,3940,496,0]An[3096,13,3097,2002,3959,496,0]An[3096,13,3097,2002,4353,496,0]An[3096,13,3097,2002,4075,496,0]An[3096,13,3097,3641,4445,496,0]An[3096,13,3097,3641,3038,496,0]An[3096,13,3097,3641,4319,496,0]An[3096,13,3097,3641,5001,496,0]An[3096,13,3097,3641,1174,496,0]An[3096,13,3097,1116,4459,496,0]An[3096,13,3097,3194,4468,496,0]An[3096,13,3097,3194,4774,496,0]An[3096,13,3097,3194,4789,496,0]An[3096,13,3097,3194,3942,496,0]An[3096,13,3097,1691,4329,496,0]An[3096,13,3097,1691,4116,496,0]An[3096,13,3097,1691,4973,496,0]An[3096,13,3097,1691,4067,496,0]An[3096,13,3097,1691,3932,496,0]An[3096,13,3097,1356,3026,496,0]An[3096,13,3097,1356,4334,496,0]An[3096,13,3097,1356,3224,496,0]An[3096,13,3097,1356,3247,496,0]An[3096,13,3097,1356,4082,496,0]An[3096,13,3097,1356,4443,496,0]An[3096,13,3097,1356,4644,496,0]An[3096,13,3097,1356,2253,496,0]An[3096,13,3097,2305,4648,496,0]An[3096,13,3097,2305,2264,496,0]An[3096,13,3097,2305,4078,496,0]An[3096,13,3097,2305,3926,496,0]An[3096,13,3097,2305,3241,496,0]An[3096,13,3097,1756,4236,496,0]An[3096,13,3097,1756,4457,496,0]An[3096,13,3097,1756,5005,496,0]An[3096,13,3097,1756,2267,496,0]An[3096,13,3097,1756,4746,496,0]An[3096,13,3097,1784,4447,496,0]An[3096,13,3097,1784,4214,496,0]An[3096,13,3097,1784,4081,496,0]An[3096,13,3097,1784,4086,496,0]Ak[3096,13,3097,0,4357,496,0]Ak[3096,13,3097,0,4809,496,0]An[3096,13,3097,4254,3221,496,0]An[3096,13,3097,4254,5099,496,0]An[3096,13,3097,4844,4676,496,0]Am[3096,13,3097,3097,511,496,0]Am[3096,13,3097,3097,127,496,0]An[3096,13,3097,3097,2282,496,0]An[3096,13,3097,3097,2292,496,0]An[3096,13,3097,3097,3024,496,0]An[3096,13,1689,1689,4247,496,0]An[3096,13,4957,4957,4855,496,0]An[3096,13,4957,4957,1171,496,0]An[3096,13,1694,1694,1836,496,0]Am[3096,13,1694,1694,498,496,0]An[3096,13,1694,1694,5065,496,0]An[3096,13,1694,1694,3935,496,0]An[3096,13,1694,1694,4815,496,0]An[3096,13,1774,1774,3253,496,0]An[3096,13,1774,1774,4218,496,0]Ak[3096,13,1774,0,1170,496,0]An[3096,13,1774,1774,4672,496,0]An[3096,13,1774,1774,4911,496,0]An[3096,13,1774,1774,4674,496,0]Al[3096,13,3636,148,121,496,0]Am[3096,13,3636,148,3013,496,0]An[3096,13,3636,1352,1157,496,0]An[3096,13,3636,1352,3937,496,0]An[3096,13,3636,2358,1841,496,0]An[3096,13,3636,2358,4234,496,0]An[3096,13,3636,3636,4738,496,0]An[3096,13,4706,4706,1172,496,0]An[3096,13,4706,4706,1175,496,0]An[1985,13,1986,1986,3256,496,0]Am[1985,13,1986,416,4358,496,0]An[1985,13,1986,1986,2279,496,0]An[1985,13,1986,1986,2293,496,0]An[1985,13,1986,1986,4087,496,0]An[1095,13,1096,1096,3015,496,0]An[1095,13,1096,1096,4848,496,0]Am[1095,13,1683,1683,135,496,0]An[1095,13,1381,1381,1190,496,0]An[1095,13,1381,1381,3961,496,0]An[1095,13,1381,1381,4453,496,0]An[1095,13,4174,4174,5050,496,0]An[1095,13,4174,4174,5051,496,0]Am[1095,13,1779,1779,136,496,0]Ac[519,7,520,0,0,0,0]Ae[3966,7,3967,0,0,0,0]Ae[4257,7,4258,0,0,0,0]Ae[2358,7,2359,0,0,0,0]Ae[4768,7,4769,0,0,0,0]Al[3096,13,3097,1120,1407,0,0]Ao[3096,13,3097,2305,4224,2265,0]Ah[463,12,1693,0,4739,0,0]Al[3096,13,3097,2002,1861,0,0]Al[3096,12,1694,1694,4740,0,0]Aj[463,13,464,3640,3211,0,0]Ab[1095,3,0,0,0,0,0]Ai[463,13,464,1094,503,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,13,3097,3641,3212,0,0]Al[3096,14,3097,1382,3218,0,0]Aj[463,12,464,1994,3200,0,0]Am[463,13,464,3640,4472,1415,0]Am[463,13,464,3640,2274,1415,0]Am[463,13,464,1094,2275,1415,0]Am[463,13,464,3640,3209,1415,0]Am[463,13,464,3640,1843,1415,0]Am[463,13,464,3640,1419,1415,0]Am[463,13,464,3640,3004,1415,0]Am[463,13,464,3640,2247,1415,0]Am[463,13,464,3640,4106,1415,0]Am[463,13,464,3640,4111,1415,0]Am[463,13,464,2304,1399,1415,0]Am[463,13,464,2336,4333,1415,0]Am[463,13,464,4039,1857,1415,0]?Aj[463,13,464,4034,3237,0,0]Al[3096,13,3097,2002,3238,0,0]Al[3096,13,4957,4957,4855,0,0]Al[3096,13,3097,3070,3018,0,0]Ak[1985,13,1986,416,4358,0,0]Ah[463,12,1693,0,4739,0,0]Al[3096,12,1694,1694,4740,0,0]32Ag[463,13,464,0,4972,0,0]Al[3096,13,3097,1691,4973,0,0]Aj[463,13,464,3640,3211,0,0]Al[3096,13,3097,3641,3212,0,0]Ah[463,12,1693,0,1831,0,0]Al[3096,12,1694,1694,1832,0,0]Al[1195,14,1380,1380,4354,0,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Ai[3096,14,4456,0,1186,0,0]Aj[463,13,464,4034,3237,0,0]Aj[463,13,464,4034,4856,0,0]Al[3096,13,3097,2002,3238,0,0]Ag[463,12,464,0,3254,0,0]Aj[463,13,464,0,4342,3254,0]Aj[463,13,464,0,4675,3254,0]Al[3096,12,3097,1392,3255,0,0]Ao[3096,13,3097,1392,4343,3255,0]Ao[3096,13,3097,4844,4676,3255,0]Af[463,5,464,3061,0,0,0]Ah[3096,5,3097,3061,0,0,0]Ag[463,5,3635,1352,0,0,0]Ah[3096,5,3636,1352,0,0,0]Al[1095,15,1096,1096,4848,0,0]Ag[463,6,1773,1355,0,0,0]Ah[3096,6,1774,1355,0,0,0]Ae[3096,6,4957,0,0,0,0]Ae[3096,6,4706,0,0,0,0]Ah[3096,6,3097,3641,0,0,0]1Al[3096,15,3097,1356,3224,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Aj[463,15,464,4034,3044,0,0]Ag[463,15,464,0,4444,0,0]Al[3096,15,3097,1120,3045,0,0]Al[3096,15,3097,3641,4445,0,0]Al[3096,15,3097,1756,4457,0,0]0Ae[1195,5,1380,0,0,0,0]Ae[1095,5,1381,0,0,0,0]Al[1195,15,1196,1196,3952,0,0]Al[3096,13,3097,2305,4651,0,0]Ab[1195,3,0,0,0,0,0]Ah[463,12,3635,0,4735,0,0]Ak[463,13,3635,0,3012,4735,0]Ak[463,13,3635,0,3936,4735,0]Ak[463,13,3635,0,4233,4735,0]Al[3096,12,3636,3636,4736,0,0]An[3096,13,3636,148,3013,4736,0]Ao[3096,13,3636,1352,3937,4736,0]Ao[3096,13,3636,2358,4234,4736,0]Al[1095,13,1096,1096,4848,0,0]Ag[463,14,464,0,1152,0,0]Ag[463,14,464,0,2294,0,0]Ag[463,14,464,0,1867,0,0]Al[3096,14,3097,3061,1153,0,0]Al[3096,14,3097,1382,2295,0,0]Al[3096,14,3097,1125,1868,0,0]Al[3096,14,3097,2305,3926,0,0]An[1195,13,1196,1196,134,1154,0]Ao[1195,13,1196,1196,3952,1154,0]Ao[1195,13,1196,1196,3928,1154,0]Am[463,13,464,3640,3211,1154,0]Am[463,13,464,3640,4918,1154,0]Am[463,13,464,3640,4749,1154,0]Am[463,13,464,2304,2259,1154,0]Am[463,13,464,2304,4215,1154,0]Am[463,13,464,4142,1418,1154,0]Al[463,13,464,1094,503,1154,0]Am[463,13,464,1094,4359,1154,0]Am[463,13,464,4034,4352,1154,0]Am[463,13,464,4034,3044,1154,0]Am[463,13,464,4034,3239,1154,0]Am[463,13,464,4034,4351,1154,0]Am[463,13,464,4039,3257,1154,0]Am[463,13,464,4039,4120,1154,0]Aj[463,13,464,0,1443,1154,0]Aj[463,13,464,0,4915,1154,0]Aj[463,13,464,0,1426,1154,0]Aj[463,13,464,0,2294,1154,0]Aj[463,13,464,0,3217,1154,0]Aj[463,13,464,0,3041,1154,0]Aj[463,13,464,0,4448,1154,0]Aj[463,13,464,0,1867,1154,0]Aj[463,13,464,0,4071,1154,0]Aj[463,13,464,0,4444,1154,0]Aj[463,13,464,0,4467,1154,0]Aj[463,13,464,0,4773,1154,0]Aj[463,13,464,0,4788,1154,0]Aj[463,13,464,0,3941,1154,0]Aj[463,13,464,0,4328,1154,0]Aj[463,13,464,0,4114,1154,0]Aj[463,13,464,0,4972,1154,0]Aj[463,13,464,0,4065,1154,0]Aj[463,13,464,0,3931,1154,0]Aj[463,13,464,0,3025,1154,0]Aj[463,13,464,0,4441,1154,0]Aj[463,13,464,0,4642,1154,0]Aj[463,13,464,0,4077,1154,0]Aj[463,13,464,0,4080,1154,0]Aj[463,13,464,0,4085,1154,0]Aj[463,13,464,0,4808,1154,0]Aj[463,13,464,0,3220,1154,0]Ai[463,13,464,0,510,1154,0]Ai[463,13,464,0,126,1154,0]Aj[463,13,464,0,2281,1154,0]Aj[463,13,3635,0,120,1154,0]Ak[463,13,3635,0,3012,1154,0]Ak[463,13,3635,0,1156,1154,0]Ak[463,13,3635,0,3936,1154,0]Ak[463,13,3635,0,1840,1154,0]Ak[463,13,3635,0,4233,1154,0]Ak[463,13,1773,0,1169,1154,0]Ak[463,13,1773,0,4671,1154,0]Ak[463,13,1773,0,4910,1154,0]Ak[463,13,1773,0,4673,1154,0]Ao[3096,13,3097,1810,1444,1154,0]Ao[3096,13,3097,1810,4916,1154,0]Ao[3096,13,3097,3070,4750,1154,0]Ao[3096,13,3097,1366,1427,1154,0]Ao[3096,13,3097,1366,4110,1154,0]Ao[3096,13,3097,1366,3233,1154,0]Ao[3096,13,3097,1366,3040,1154,0]Ao[3096,13,3097,1366,4748,1154,0]Ao[3096,13,3097,1366,4804,1154,0]Ao[3096,13,3097,1366,3207,1154,0]Ao[3096,13,3097,1382,2295,1154,0]Ao[3096,13,3097,1382,3218,1154,0]Ao[3096,13,3097,1382,3042,1154,0]Ao[3096,13,3097,1382,4449,1154,0]Ao[3096,13,3097,1120,3045,1154,0]Ao[3096,13,3097,1120,4241,1154,0]Ao[3096,13,3097,1125,1868,1154,0]Ao[3096,13,3097,1125,3258,1154,0]Ao[3096,13,3097,1125,3940,1154,0]Ao[3096,13,3097,2002,4353,1154,0]Ao[3096,13,3097,2002,4075,1154,0]Ao[3096,13,3097,3641,4445,1154,0]Ao[3096,13,3097,3641,3038,1154,0]Ao[3096,13,3097,3641,4319,1154,0]Ao[3096,13,3097,3641,5001,1154,0]Ao[3096,13,3097,3194,4468,1154,0]Ao[3096,13,3097,3194,4774,1154,0]Ao[3096,13,3097,3194,4789,1154,0]Ao[3096,13,3097,3194,3942,1154,0]Ao[3096,13,3097,1691,4329,1154,0]Ao[3096,13,3097,1691,4116,1154,0]Ao[3096,13,3097,1691,4973,1154,0]Ao[3096,13,3097,1691,4067,1154,0]Ao[3096,13,3097,1691,3932,1154,0]Ao[3096,13,3097,1356,3026,1154,0]Ao[3096,13,3097,1356,3224,1154,0]Ao[3096,13,3097,1356,3247,1154,0]Ao[3096,13,3097,1356,4082,1154,0]Ao[3096,13,3097,1356,4443,1154,0]Ao[3096,13,3097,1356,4644,1154,0]Ao[3096,13,3097,1356,2253,1154,0]Ao[3096,13,3097,2305,4648,1154,0]Ao[3096,13,3097,2305,4078,1154,0]Ao[3096,13,3097,1756,4457,1154,0]Ao[3096,13,3097,1756,5005,1154,0]Ao[3096,13,3097,1756,2267,1154,0]Ao[3096,13,3097,1756,4746,1154,0]Ao[3096,13,3097,1784,4081,1154,0]Ao[3096,13,3097,1784,4086,1154,0]Al[3096,13,3097,0,4357,1154,0]Al[3096,13,3097,0,4809,1154,0]Ao[3096,13,3097,4254,3221,1154,0]Ao[3096,13,3097,4254,5099,1154,0]An[3096,13,3097,3097,511,1154,0]An[3096,13,3097,3097,127,1154,0]Ao[3096,13,3097,3097,2282,1154,0]Ao[3096,13,3097,3097,3024,1154,0]Ao[3096,13,1689,1689,4247,1154,0]Ao[3096,13,4957,4957,4855,1154,0]Ao[3096,13,4957,4957,1171,1154,0]Al[3096,13,1774,0,1170,1154,0]Ao[3096,13,1774,1774,4672,1154,0]Ao[3096,13,1774,1774,4911,1154,0]Ao[3096,13,1774,1774,4674,1154,0]Am[3096,13,3636,148,121,1154,0]An[3096,13,3636,148,3013,1154,0]Ao[3096,13,3636,1352,1157,1154,0]Ao[3096,13,3636,1352,3937,1154,0]Ao[3096,13,3636,2358,1841,1154,0]Ao[3096,13,3636,2358,4234,1154,0]Ao[3096,13,4706,4706,1175,1154,0]Ao[1985,13,1986,1986,2279,1154,0]Ao[1985,13,1986,1986,2293,1154,0]Ao[1985,13,1986,1986,4087,1154,0]Ao[1095,13,1096,1096,4848,1154,0]Ao[1095,13,1381,1381,4453,1154,0]Ao[1095,13,4174,4174,5050,1154,0]Ao[1095,13,4174,4174,5051,1154,0]Aj[463,13,464,3640,3211,0,0]Aj[463,13,464,2304,2259,0,0]Ai[463,13,464,1094,503,0,0]Al[3096,13,3097,3641,3212,0,0]Aj[463,13,464,0,4080,1160,0]Ao[3096,13,3097,1784,4081,1160,0]Ai[3096,14,3097,0,4357,0,0]Ag[463,13,464,0,2281,0,0]Al[3096,13,3097,3097,2282,0,0]Ag[463,13,464,0,4085,0,0]Al[3096,13,3097,1784,4086,0,0]Ah[463,14,1693,0,1835,0,0]Al[3096,14,1694,1694,1836,0,0]Al[3096,12,3097,1756,4779,0,0]Ao[3096,13,3097,1756,5124,4779,0];Al[1195,13,1380,1380,1189,0,0]Ai[519,13,520,520,3929,0,0]Al[1095,13,1381,1381,1190,0,0]Aj[463,12,464,1994,3200,0,0]Aj[463,13,464,4039,3243,0,0]Al[3096,13,3097,2002,3244,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2260,0,0]Aj[463,12,464,1994,1852,0,0]Am[463,13,464,1393,4121,1852,0]Am[463,13,464,1137,3955,1852,0]Ae[1195,2,1196,0,0,0,0]Ak[1195,14,1196,1196,134,0,0]Aj[463,13,464,3640,3211,0,0]Aj[463,13,464,2304,2259,0,0]Ai[463,13,464,1094,503,0,0]Al[3096,13,3097,3641,3212,0,0]Ae[1095,2,1096,0,0,0,0]Ag[463,13,464,0,3234,0,0]Al[3096,13,3097,1116,3235,0,0]?>Al[3096,13,4957,4957,4855,0,0]Af[463,5,464,2304,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Al[1195,15,1196,1196,3928,0,0]0Al[3096,15,3097,1366,3233,0,0]Ah[3096,5,3097,1120,0,0,0]Af[463,15,464,0,510,0,0]Al[2358,15,2359,2359,2250,0,0]Ak[3096,15,3097,3097,511,0,0]Al[3096,15,4706,4706,1172,0,0]87Af[463,5,464,4142,0,0,0]Af[463,5,464,3640,0,0,0]Al[3096,15,3097,1366,3040,0,0]Al[3096,15,3097,2002,3959,0,0]Af[463,5,464,1366,0,0,0]Ah[3096,5,3097,1366,0,0,0]Ae[3096,8,1689,0,0,0,0]:98?Al[3096,15,3097,3641,1174,0,0]?Af[463,5,464,1810,0,0,0]Ah[3096,5,3097,1810,0,0,0]Aj[463,13,464,2304,2259,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2002,1861,0,0]Al[3096,13,3097,2305,2260,0,0]An[1195,13,1196,1196,134,1405,0]Ao[1195,13,1196,1196,3952,1405,0]Ao[1195,13,1196,1196,3928,1405,0]Ao[1195,13,1380,1380,3960,1405,0]Ao[1195,13,1380,1380,1189,1405,0]Ao[1195,13,1380,1380,4354,1405,0]Al[519,13,520,520,3929,1405,0]Ao[3966,13,3967,3967,5006,1405,0]Am[463,13,464,3640,4472,1405,0]Am[463,13,464,3640,2274,1405,0]Aj[463,13,464,0,4206,1405,0]Am[463,13,464,4142,4912,1405,0]Am[463,13,464,1094,2275,1405,0]Am[463,13,464,1094,4640,1405,0]Am[463,13,464,3640,3209,1405,0]Am[463,13,464,3640,3211,1405,0]Am[463,13,464,3640,1843,1405,0]Am[463,13,464,3640,1419,1405,0]Am[463,13,464,3640,3004,1405,0]Am[463,13,464,3640,2247,1405,0]Am[463,13,464,3640,4106,1405,0]Am[463,13,464,3640,4111,1405,0]Am[463,13,464,3640,4918,1405,0]Am[463,13,464,3640,4749,1405,0]Am[463,13,464,2304,2259,1405,0]Am[463,13,464,2304,4215,1405,0]Am[463,13,464,2304,1399,1405,0]Am[463,13,464,4142,1418,1405,0]Am[463,13,464,4142,3231,1405,0]Am[463,13,464,4142,4849,1405,0]Am[463,13,464,2336,2263,1405,0]Am[463,13,464,2336,3240,1405,0]Am[463,13,464,2336,4333,1405,0]Al[463,13,464,1094,503,1405,0]Am[463,13,464,1094,4359,1405,0]Am[463,13,464,4034,3237,1405,0]Am[463,13,464,4034,4856,1405,0]Am[463,13,464,4034,4352,1405,0]Am[463,13,464,4034,3044,1405,0]Am[463,13,464,4034,3239,1405,0]Am[463,13,464,4034,4351,1405,0]Am[463,13,464,1393,4121,1405,0]Am[463,13,464,1137,3955,1405,0]Am[463,13,464,4039,3243,1405,0]Am[463,13,464,4039,3257,1405,0]Am[463,13,464,4039,4120,1405,0]Am[463,13,464,4039,1857,1405,0]Aj[463,13,464,0,3234,1405,0]Aj[463,13,464,0,4245,1405,0]Aj[463,13,464,0,4464,1405,0]Aj[463,13,464,0,4098,1405,0]Aj[463,13,464,0,4342,1405,0]Aj[463,13,464,0,1443,1405,0]Aj[463,13,464,0,4915,1405,0]Aj[463,13,464,0,1152,1405,0]Aj[463,13,464,0,1426,1405,0]Aj[463,13,464,0,2294,1405,0]Aj[463,13,464,0,3217,1405,0]Aj[463,13,464,0,3041,1405,0]Aj[463,13,464,0,4448,1405,0]Aj[463,13,464,0,1867,1405,0]Aj[463,13,464,0,4071,1405,0]Aj[463,13,464,0,4444,1405,0]Aj[463,13,464,0,4458,1405,0]Aj[463,13,464,0,4467,1405,0]Aj[463,13,464,0,4773,1405,0]Aj[463,13,464,0,4788,1405,0]Aj[463,13,464,0,3941,1405,0]Aj[463,13,464,0,4328,1405,0]Aj[463,13,464,0,4114,1405,0]Aj[463,13,464,0,4972,1405,0]Aj[463,13,464,0,4065,1405,0]Aj[463,13,464,0,3931,1405,0]Aj[463,13,464,0,3025,1405,0]Aj[463,13,464,0,4441,1405,0]Aj[463,13,464,0,4642,1405,0]Aj[463,13,464,0,4077,1405,0]Aj[463,13,464,0,4080,1405,0]Aj[463,13,464,0,4085,1405,0]Aj[463,13,464,0,4808,1405,0]Aj[463,13,464,0,3220,1405,0]Aj[463,13,464,0,4675,1405,0]Ai[463,13,464,0,510,1405,0]Ai[463,13,464,0,126,1405,0]Aj[463,13,464,0,2281,1405,0]Aj[463,13,464,0,2291,1405,0]Aj[463,13,3635,0,120,1405,0]Ak[463,13,3635,0,3012,1405,0]Ak[463,13,3635,0,1156,1405,0]Ak[463,13,3635,0,3936,1405,0]Ak[463,13,3635,0,1840,1405,0]Ak[463,13,3635,0,4233,1405,0]Ak[463,13,3635,0,4737,1405,0]Ak[463,13,1693,0,1835,1405,0]Aj[463,13,1693,0,497,1405,0]Ak[463,13,1693,0,5064,1405,0]Ak[463,13,1693,0,3934,1405,0]Ak[463,13,1693,0,4812,1405,0]Ak[463,13,1773,0,3252,1405,0]Ak[463,13,1773,0,4217,1405,0]Ak[463,13,1773,0,1169,1405,0]Ak[463,13,1773,0,4671,1405,0]Ak[463,13,1773,0,4910,1405,0]Ak[463,13,1773,0,4673,1405,0]An[2358,13,2359,2359,125,1405,0]Ao[2358,13,2359,2359,2250,1405,0]Ao[3096,13,3097,4477,4207,1405,0]Ao[3096,13,3097,3070,3018,1405,0]Ao[3096,13,3097,1120,1407,1405,0]Ao[3096,13,3097,2002,1861,1405,0]Ao[3096,13,3097,2002,3238,1405,0]Ao[3096,13,3097,2002,3244,1405,0]Ao[3096,13,3097,3641,3212,1405,0]Ao[3096,13,3097,1116,3235,1405,0]Ao[3096,13,3097,1691,4246,1405,0]Ao[3096,13,3097,2305,2260,1405,0]Ao[3096,13,3097,2305,4213,1405,0]Ao[3096,13,3097,2305,4651,1405,0]Ao[3096,13,3097,2305,4224,1405,0]Ao[3096,13,3097,1756,5124,1405,0]Ao[3096,13,3097,4254,5094,1405,0]Ao[3096,13,3097,1392,4465,1405,0]Ao[3096,13,3097,1392,4099,1405,0]Ao[3096,13,3097,1392,4343,1405,0]Ao[3096,13,3097,1810,1444,1405,0]Ao[3096,13,3097,1810,4916,1405,0]Ao[3096,13,3097,3061,1153,1405,0]Ao[3096,13,3097,3070,4750,1405,0]Ao[3096,13,3097,1366,1427,1405,0]Ao[3096,13,3097,1366,4110,1405,0]Ao[3096,13,3097,1366,3233,1405,0]Ao[3096,13,3097,1366,3040,1405,0]Ao[3096,13,3097,1366,4748,1405,0]Ao[3096,13,3097,1366,4804,1405,0]Ao[3096,13,3097,1366,3207,1405,0]Ao[3096,13,3097,1382,2295,1405,0]Ao[3096,13,3097,1382,3218,1405,0]Ao[3096,13,3097,1382,3042,1405,0]Ao[3096,13,3097,1382,4449,1405,0]Ao[3096,13,3097,1120,3045,1405,0]Ao[3096,13,3097,1120,4241,1405,0]Ao[3096,13,3097,1125,1868,1405,0]Ao[3096,13,3097,1125,3258,1405,0]Ao[3096,13,3097,1125,3940,1405,0]Ao[3096,13,3097,2002,3959,1405,0]Ao[3096,13,3097,2002,4353,1405,0]Ao[3096,13,3097,2002,4075,1405,0]Ao[3096,13,3097,3641,4445,1405,0]Ao[3096,13,3097,3641,3038,1405,0]Ao[3096,13,3097,3641,4319,1405,0]Ao[3096,13,3097,3641,5001,1405,0]Ao[3096,13,3097,3641,1174,1405,0]Ao[3096,13,3097,1116,4459,1405,0]Ao[3096,13,3097,3194,4468,1405,0]Ao[3096,13,3097,3194,4774,1405,0]Ao[3096,13,3097,3194,4789,1405,0]Ao[3096,13,3097,3194,3942,1405,0]Ao[3096,13,3097,1691,4329,1405,0]Ao[3096,13,3097,1691,4116,1405,0]Ao[3096,13,3097,1691,4973,1405,0]Ao[3096,13,3097,1691,4067,1405,0]Ao[3096,13,3097,1691,3932,1405,0]Ao[3096,13,3097,1356,3026,1405,0]Ao[3096,13,3097,1356,4334,1405,0]Ao[3096,13,3097,1356,3224,1405,0]Ao[3096,13,3097,1356,3247,1405,0]Ao[3096,13,3097,1356,4082,1405,0]Ao[3096,13,3097,1356,4443,1405,0]Ao[3096,13,3097,1356,4644,1405,0]Ao[3096,13,3097,1356,2253,1405,0]Ao[3096,13,3097,2305,4648,1405,0]Ao[3096,13,3097,2305,2264,1405,0]Ao[3096,13,3097,2305,4078,1405,0]Ao[3096,13,3097,2305,3926,1405,0]Ao[3096,13,3097,2305,3241,1405,0]Ao[3096,13,3097,1756,4236,1405,0]Ao[3096,13,3097,1756,4457,1405,0]Ao[3096,13,3097,1756,5005,1405,0]Ao[3096,13,3097,1756,2267,1405,0]Ao[3096,13,3097,1756,4746,1405,0]Ao[3096,13,3097,1784,4447,1405,0]Ao[3096,13,3097,1784,4214,1405,0]Ao[3096,13,3097,1784,4081,1405,0]Ao[3096,13,3097,1784,4086,1405,0]Al[3096,13,3097,0,4357,1405,0]Al[3096,13,3097,0,4809,1405,0]Ao[3096,13,3097,4254,3221,1405,0]Ao[3096,13,3097,4254,5099,1405,0]Ao[3096,13,3097,4844,4676,1405,0]An[3096,13,3097,3097,511,1405,0]An[3096,13,3097,3097,127,1405,0]Ao[3096,13,3097,3097,2282,1405,0]Ao[3096,13,3097,3097,2292,1405,0]Ao[3096,13,3097,3097,3024,1405,0]Ao[3096,13,1689,1689,4247,1405,0]Ao[3096,13,4957,4957,4855,1405,0]Ao[3096,13,4957,4957,1171,1405,0]Ao[3096,13,1694,1694,1836,1405,0]An[3096,13,1694,1694,498,1405,0]Ao[3096,13,1694,1694,5065,1405,0]Ao[3096,13,1694,1694,3935,1405,0]Ao[3096,13,1694,1694,4815,1405,0]Ao[3096,13,1774,1774,3253,1405,0]Ao[3096,13,1774,1774,4218,1405,0]Al[3096,13,1774,0,1170,1405,0]Ao[3096,13,1774,1774,4672,1405,0]Ao[3096,13,1774,1774,4911,1405,0]Ao[3096,13,1774,1774,4674,1405,0]Am[3096,13,3636,148,121,1405,0]An[3096,13,3636,148,3013,1405,0]Ao[3096,13,3636,1352,1157,1405,0]Ao[3096,13,3636,1352,3937,1405,0]Ao[3096,13,3636,2358,1841,1405,0]Ao[3096,13,3636,2358,4234,1405,0]Ao[3096,13,3636,3636,4738,1405,0]Ao[3096,13,4706,4706,1172,1405,0]Ao[3096,13,4706,4706,1175,1405,0]Ao[1985,13,1986,1986,3256,1405,0]An[1985,13,1986,416,4358,1405,0]Ao[1985,13,1986,1986,2279,1405,0]Ao[1985,13,1986,1986,2293,1405,0]Ao[1985,13,1986,1986,4087,1405,0]Ao[1095,13,1096,1096,3015,1405,0]Ao[1095,13,1096,1096,4848,1405,0]An[1095,13,1683,1683,135,1405,0]Ao[1095,13,1381,1381,1190,1405,0]Ao[1095,13,1381,1381,3961,1405,0]Ao[1095,13,1381,1381,4453,1405,0]Ao[1095,13,4174,4174,5050,1405,0]Ao[1095,13,4174,4174,5051,1405,0]An[1095,13,1779,1779,136,1405,0]Ag[463,14,464,0,1867,0,0]Al[3096,14,3097,1125,1868,0,0]Ak[1195,14,1196,1196,134,0,0]Ac[519,7,520,0,0,0,0]Aj[463,13,464,2304,2259,0,0]Ae[1095,2,1096,0,0,0,0]Ae[4768,7,4769,0,0,0,0]Aj[463,13,464,3640,3211,0,0]Ae[3096,2,3097,0,0,0,0]Al[3096,13,3097,2305,2260,0,0]Af[463,2,464,3097,0,0,0]Ag[463,13,464,0,4808,0,0]Ag[463,14,464,0,3217,0,0]Ag[463,14,464,0,4114,0,0]5Ai[3096,13,3097,0,4809,0,0]Al[3096,14,3097,1382,3218,0,0]Al[3096,14,3097,1691,4116,0,0]Ai[3096,14,3097,0,4357,0,0]Aj[463,13,464,0,1443,3019,0]Aj[463,13,464,0,1426,3019,0]Aj[463,13,464,0,3025,3019,0]Aj[463,13,464,0,4808,3019,0]Aj[463,13,464,0,2281,3019,0]Ao[3096,13,3097,1810,1444,3019,0]Ao[3096,13,3097,1366,1427,3019,0]Ao[3096,13,3097,1356,3026,3019,0]Ao[3096,13,3097,1356,3224,3019,0]Al[3096,13,3097,1756,4457,0,0]Al[3096,13,3097,0,4809,3019,0]Ao[3096,13,3097,3097,2282,3019,0]Al[3096,12,1689,1689,3019,0,0]Al[1985,14,1986,1986,2279,0,0]Aj[463,13,464,0,1443,3022,0]Aj[463,13,464,0,1426,3022,0]Aj[463,13,464,0,3025,3022,0]Aj[463,13,464,0,4808,3022,0]Aj[463,13,464,0,2281,3022,0]Ao[3096,13,3097,1810,1444,3022,0]Ao[3096,13,3097,1366,1427,3022,0]Ao[3096,13,3097,1356,3026,3022,0]Ao[3096,13,3097,1356,3224,3022,0]Ao[3096,13,3097,1356,2253,3022,0]Al[3096,13,3097,0,4809,3022,0]Ao[3096,13,3097,3097,2282,3022,0]Al[3096,12,1689,1689,3022,0,0]Aj[463,13,464,4039,3243,0,0]Al[3096,13,3097,2002,3244,0,0]Al[1095,13,1381,1381,3961,0,0]Al[3096,13,3097,2305,2260,0,0]Ag[463,14,1693,0,497,0,0]Ak[3096,14,1694,1694,498,0,0]Aj[463,13,464,2336,2263,0,0]3Ag[463,12,464,0,3254,0,0]Aj[463,13,464,0,4342,3254,0]Aj[463,13,464,0,4675,3254,0]Al[3096,12,3097,1392,3255,0,0]Ao[3096,13,3097,1392,4343,3255,0]Ao[3096,13,3097,4844,4676,3255,0]Al[1095,14,1096,1096,3015,0,0]Ag[463,14,464,0,1152,0,0]Al[3096,14,3097,3061,1153,0,0]Ah[463,13,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,13,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Ag[463,14,1693,0,497,0,0]Ak[3096,14,1694,1694,498,0,0]Ai[3096,14,4456,0,4680,0,0]Ag[463,14,464,0,4441,0,0]Ag[463,14,464,0,4642,0,0]Al[3096,14,3097,1356,4443,0,0]Al[3096,14,3097,1356,4644,0,0]Ai[3096,14,3097,0,4357,0,0]Ai[3096,14,1173,0,4321,0,0]Ai[3096,14,3039,0,3002,0,0]Aj[463,13,464,2304,2259,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2260,0,0]Ah[463,14,1693,0,1835,0,0]Al[3096,13,3097,3097,3024,0,0]Al[3096,14,1694,1694,1836,0,0]Ac[463,4,464,0,0,0,0]Ag[463,2,1693,1694,0,0,0]Ae[3096,4,3097,0,0,0,0]Ae[3096,2,1694,0,0,0,0]Ac[519,7,520,0,0,0,0]:Ae[1095,2,1096,0,0,0,0]Ae[4768,7,4769,0,0,0,0]Am[463,13,464,3640,4749,1162,0]Am[463,13,464,4034,4352,1162,0]Am[463,13,464,4034,3044,1162,0]Am[463,13,464,4034,3239,1162,0]Am[463,13,464,4034,4351,1162,0]Am[463,13,464,4039,3257,1162,0]Am[463,13,464,4039,4120,1162,0]Aj[463,13,464,0,4444,1162,0]Ao[3096,13,3097,3641,4445,1162,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Al[1985,14,1986,1986,2293,0,0]Ai[463,13,464,1094,503,0,0]Ai[3096,14,3039,0,4107,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]Al[1985,14,1986,1986,2279,0,0]Ag[463,14,464,0,3041,0,0]Ag[463,14,464,0,4448,0,0]Al[3096,14,3097,1382,3042,0,0]Al[3096,14,3097,1382,4449,0,0]3210Ah[463,12,1693,0,1831,0,0]Al[3096,12,1694,1694,1832,0,0]Ah[463,12,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,12,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Al[3096,15,3097,3070,4750,0,0]Al[3096,15,3097,1120,3045,0,0]Al[3096,15,3097,1125,3258,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Ah[463,10,1693,1694,0,0,0]Af[3096,10,1694,0,0,0,0]Al[3096,15,3097,1756,4457,0,0]Ag[463,5,1693,1694,0,0,0]Ae[3096,5,1694,0,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Ag[463,5,3635,2358,0,0,0]Ah[3096,5,3636,2358,0,0,0]Al[1095,15,1096,1096,4848,0,0]Af[463,5,464,3640,0,0,0]5454Ag[463,10,464,1994,0,0,0];:Aj[463,15,464,4039,3257,0,0]Af[463,5,464,4039,0,0,0]Al[3096,15,3097,1125,3258,0,0]Al[3096,15,3097,1125,3940,0,0]Al[3096,15,3097,2002,3959,0,0]Ah[3096,5,3097,2002,0,0,0]Aj[463,15,464,4034,4352,0,0]Al[3096,15,3097,1356,3224,0,0]Af[463,5,464,1125,0,0,0]Ah[3096,5,3097,1125,0,0,0]Al[3096,15,3097,1756,2267,0,0]Ag[463,12,464,0,4963,0,0]Al[3096,12,3097,4254,4964,0,0]Ao[3096,13,3097,4254,5094,4964,0]Ao[3096,13,3097,4254,5099,4964,0]Ak[1195,14,1196,1196,134,0,0]An[1195,13,1196,1196,134,4320,0]An[2358,13,2359,2359,125,4320,0]Ak[2358,14,2359,2359,125,0,0]Ao[1095,13,1096,1096,3015,4320,0]An[1095,13,1683,1683,135,4320,0]An[1095,13,1779,1779,136,4320,0]Aj[463,13,464,0,1443,3208,0]Aj[463,13,464,0,1426,3208,0]Aj[463,13,464,0,3941,3208,0]Aj[463,13,464,0,4080,3208,0]Ai[463,13,464,0,510,3208,0]Ai[463,13,464,0,126,3208,0]Aj[463,13,464,0,2281,3208,0]Ao[3096,13,3097,1810,1444,3208,0]Ao[3096,13,3097,3070,4750,3208,0]Ao[3096,13,3097,1366,1427,3208,0]Ao[3096,13,3097,1120,3045,3208,0]Ao[3096,13,3097,1120,4241,3208,0]Ao[3096,13,3097,1125,3258,3208,0]Ao[3096,13,3097,3194,3942,3208,0]Ao[3096,13,3097,2305,4648,3208,0]Ao[3096,13,3097,1756,4746,3208,0]Ao[3096,13,3097,1784,4081,3208,0]An[3096,13,3097,3097,511,3208,0]An[3096,13,3097,3097,127,3208,0]Ao[3096,13,3097,3097,2282,3208,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,2305,2260,0,0]Aj[463,13,464,2336,2263,0,0]Ah[463,12,1693,0,3035,0,0]Ah[463,12,1693,0,3028,0,0]Al[3096,13,3097,2305,2264,0,0]Al[3096,12,1694,1694,3036,0,0]Al[3096,12,1694,1694,3029,0,0]Ao[1195,13,1380,1380,3960,1826,0]Ao[1195,13,1380,1380,1189,1826,0]Al[519,13,520,520,3929,1826,0]Aj[463,13,464,0,4206,1826,0]Am[463,13,464,2304,4215,1826,0]Aj[463,13,464,0,1443,1826,0]Aj[463,13,464,0,1426,1826,0]Aj[463,13,464,0,2294,1826,0]Aj[463,13,464,0,3217,1826,0]Aj[463,13,464,0,3041,1826,0]Aj[463,13,464,0,4448,1826,0]Aj[463,13,464,0,1867,1826,0]Aj[463,13,464,0,4071,1826,0]Aj[463,13,464,0,4467,1826,0]Aj[463,13,464,0,4773,1826,0]Aj[463,13,464,0,4788,1826,0]Aj[463,13,464,0,3941,1826,0]Aj[463,13,464,0,4328,1826,0]Aj[463,13,464,0,4972,1826,0]Aj[463,13,464,0,4675,1826,0]Ak[463,13,3635,0,3012,1826,0]Ak[463,13,3635,0,3936,1826,0]Ak[463,13,3635,0,4233,1826,0]Ak[463,13,3635,0,4737,1826,0]Ao[3096,13,3097,4477,4207,1826,0]Ao[3096,13,3097,4254,5094,1826,0]Ao[3096,13,3097,1810,1444,1826,0]Ao[3096,13,3097,1366,1427,1826,0]Ao[3096,13,3097,1366,3233,1826,0]Ao[3096,13,3097,1366,3207,1826,0]Ao[3096,13,3097,1382,2295,1826,0]Ao[3096,13,3097,1382,3218,1826,0]Ao[3096,13,3097,1382,3042,1826,0]Ao[3096,13,3097,1382,4449,1826,0]Ao[3096,13,3097,1125,1868,1826,0]Ao[3096,13,3097,2002,4353,1826,0]Ao[3096,13,3097,2002,4075,1826,0]Ao[3096,13,3097,3194,4468,1826,0]Ao[3096,13,3097,3194,4774,1826,0]Ao[3096,13,3097,3194,4789,1826,0]Ao[3096,13,3097,3194,3942,1826,0]Ao[3096,13,3097,1691,4329,1826,0]Ao[3096,13,3097,1691,4973,1826,0]Ao[3096,13,3097,4254,5099,1826,0]Ao[3096,13,3097,4844,4676,1826,0]An[3096,13,3636,148,3013,1826,0]Ao[3096,13,3636,1352,3937,1826,0]Ao[3096,13,3636,2358,4234,1826,0]Ao[3096,13,3636,3636,4738,1826,0]Ao[1985,13,1986,1986,2279,1826,0]Ao[1095,13,1381,1381,1190,1826,0]Ao[1095,13,1381,1381,4453,1826,0]Al[3096,13,3097,1784,4214,0,0]Al[3096,13,3097,1756,4236,0,0]Al[3096,13,3097,1756,4457,0,0]Al[3096,14,3097,1756,5005,0,0]Ai[3096,14,4745,0,4810,0,0]Ah[3096,14,4456,0,499,0,0]Ai[3096,14,4456,0,1184,0,0]Ai[3096,14,4456,0,1186,0,0]Ai[3096,14,4456,0,4680,0,0]Ah[463,12,1693,0,3035,0,0]Ah[463,12,1693,0,3028,0,0]Al[3096,12,1694,1694,3036,0,0]Al[3096,12,1694,1694,3029,0,0]Aj[463,13,464,4034,3237,0,0]Aj[463,13,464,4034,4856,0,0]Ah[463,13,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,13,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Ag[463,13,464,0,4467,0,0]Al[3096,13,3097,3194,4468,0,0]Ab[1985,3,0,0,0,0,0]:965Aj[463,13,464,3640,3211,0,0]Aj[463,13,464,1094,2275,0,0]Al[3096,14,3097,1756,5005,0,0]Ai[3096,14,4745,0,4810,0,0]Ah[3096,14,4456,0,499,0,0]Ai[3096,14,4456,0,1184,0,0]Ai[3096,14,4456,0,4680,0,0]Aj[463,13,464,4039,3243,0,0]Al[3096,13,3097,2002,3244,0,0]Ak[1195,14,1196,1196,134,0,0]Al[1195,14,1380,1380,1189,0,0]Al[3096,13,3097,3641,3212,0,0]Ah[463,12,1693,0,3035,0,0]Al[3096,12,1694,1694,3036,0,0]Am[1195,13,1196,1196,134,118,0]An[1195,13,1196,1196,3952,118,0]An[1195,13,1196,1196,3928,118,0]An[1195,13,1380,1380,3960,118,0]An[1195,13,1380,1380,1189,118,0]An[1195,13,1380,1380,4354,118,0]Ak[519,13,520,520,3929,118,0]An[3966,13,3967,3967,5006,118,0]Al[463,13,464,3640,4472,118,0]Al[463,13,464,3640,2274,118,0]Ai[463,13,464,0,4206,118,0]Al[463,13,464,4142,4912,118,0]Al[463,13,464,1094,2275,118,0]Al[463,13,464,1094,4640,118,0]Al[463,13,464,3640,3209,118,0]Al[463,13,464,3640,3211,118,0]Al[463,13,464,3640,1843,118,0]Al[463,13,464,3640,1419,118,0]Al[463,13,464,3640,3004,118,0]Al[463,13,464,3640,2247,118,0]Al[463,13,464,3640,4106,118,0]Al[463,13,464,3640,4111,118,0]Al[463,13,464,3640,4918,118,0]Al[463,13,464,3640,4749,118,0]Al[463,13,464,2304,2259,118,0]Al[463,13,464,2304,4215,118,0]Al[463,13,464,2304,1399,118,0]Al[463,13,464,4142,1418,118,0]Al[463,13,464,4142,3231,118,0]Al[463,13,464,4142,4849,118,0]Al[463,13,464,2336,2263,118,0]Al[463,13,464,2336,3240,118,0]Al[463,13,464,2336,4333,118,0]Ak[463,13,464,1094,503,118,0]Al[463,13,464,1094,4359,118,0]Al[463,13,464,4034,3237,118,0]Al[463,13,464,4034,4856,118,0]Al[463,13,464,4034,4352,118,0]Al[463,13,464,4034,3044,118,0]Al[463,13,464,4034,3239,118,0]Al[463,13,464,4034,4351,118,0]Al[463,13,464,1393,4121,118,0]Al[463,13,464,1137,3955,118,0]Al[463,13,464,4039,3243,118,0]Al[463,13,464,4039,3257,118,0]Al[463,13,464,4039,4120,118,0]Al[463,13,464,4039,1857,118,0]Ai[463,13,464,0,3234,118,0]Ai[463,13,464,0,4245,118,0]Ai[463,13,464,0,4464,118,0]Ai[463,13,464,0,4098,118,0]Ai[463,13,464,0,4342,118,0]Ai[463,13,464,0,1443,118,0]Ai[463,13,464,0,4915,118,0]Ai[463,13,464,0,1152,118,0]Ai[463,13,464,0,1426,118,0]Ai[463,13,464,0,2294,118,0]Ai[463,13,464,0,3217,118,0]Ai[463,13,464,0,3041,118,0]Ai[463,13,464,0,4448,118,0]Ai[463,13,464,0,1867,118,0]Ai[463,13,464,0,4071,118,0]Ai[463,13,464,0,4444,118,0]Ai[463,13,464,0,4458,118,0]Ai[463,13,464,0,4467,118,0]Ai[463,13,464,0,4773,118,0]Ai[463,13,464,0,4788,118,0]Ai[463,13,464,0,3941,118,0]Ai[463,13,464,0,4328,118,0]Ai[463,13,464,0,4114,118,0]Ai[463,13,464,0,4972,118,0]Ai[463,13,464,0,4065,118,0]Ai[463,13,464,0,3931,118,0]Ai[463,13,464,0,3025,118,0]Ai[463,13,464,0,4441,118,0]Ai[463,13,464,0,4642,118,0]Ai[463,13,464,0,4077,118,0]Ai[463,13,464,0,4080,118,0]Ai[463,13,464,0,4085,118,0]Ai[463,13,464,0,4808,118,0]Ai[463,13,464,0,3220,118,0]Ai[463,13,464,0,4675,118,0]Ah[463,13,464,0,510,118,0]Ah[463,13,464,0,126,118,0]Ai[463,13,464,0,2281,118,0]Ai[463,13,464,0,2291,118,0]Ai[463,13,3635,0,120,118,0]Aj[463,13,3635,0,3012,118,0]Aj[463,13,3635,0,1156,118,0]Aj[463,13,3635,0,3936,118,0]Aj[463,13,3635,0,1840,118,0]Aj[463,13,3635,0,4233,118,0]Aj[463,13,3635,0,4737,118,0]Aj[463,13,1693,0,1835,118,0]Ai[463,13,1693,0,497,118,0]Aj[463,13,1693,0,5064,118,0]Aj[463,13,1693,0,3934,118,0]Aj[463,13,1693,0,4812,118,0]Aj[463,13,1773,0,3252,118,0]Aj[463,13,1773,0,4217,118,0]Aj[463,13,1773,0,1169,118,0]Aj[463,13,1773,0,4671,118,0]Aj[463,13,1773,0,4910,118,0]Aj[463,13,1773,0,4673,118,0]Am[2358,13,2359,2359,125,118,0]An[2358,13,2359,2359,2250,118,0]An[3096,13,3097,4477,4207,118,0]An[3096,13,3097,3070,3018,118,0]An[3096,13,3097,1120,1407,118,0]An[3096,13,3097,2002,1861,118,0]An[3096,13,3097,2002,3238,118,0]An[3096,13,3097,2002,3244,118,0]An[3096,13,3097,3641,3212,118,0]An[3096,13,3097,1116,3235,118,0]An[3096,13,3097,1691,4246,118,0]An[3096,13,3097,2305,2260,118,0]An[3096,13,3097,2305,4213,118,0]An[3096,13,3097,2305,4651,118,0]An[3096,13,3097,2305,4224,118,0]An[3096,13,3097,1756,5124,118,0]An[3096,13,3097,4254,5094,118,0]An[3096,13,3097,1392,4465,118,0]An[3096,13,3097,1392,4099,118,0]An[3096,13,3097,1392,4343,118,0]An[3096,13,3097,1810,1444,118,0]An[3096,13,3097,1810,4916,118,0]An[3096,13,3097,3061,1153,118,0]An[3096,13,3097,3070,4750,118,0]An[3096,13,3097,1366,1427,118,0]An[3096,13,3097,1366,4110,118,0]An[3096,13,3097,1366,3233,118,0]An[3096,13,3097,1366,3040,118,0]An[3096,13,3097,1366,4748,118,0]An[3096,13,3097,1366,4804,118,0]An[3096,13,3097,1366,3207,118,0]An[3096,13,3097,1382,2295,118,0]An[3096,13,3097,1382,3218,118,0]An[3096,13,3097,1382,3042,118,0]An[3096,13,3097,1382,4449,118,0]An[3096,13,3097,1120,3045,118,0]An[3096,13,3097,1120,4241,118,0]An[3096,13,3097,1125,1868,118,0]An[3096,13,3097,1125,3258,118,0]An[3096,13,3097,1125,3940,118,0]An[3096,13,3097,2002,3959,118,0]An[3096,13,3097,2002,4353,118,0]An[3096,13,3097,2002,4075,118,0]An[3096,13,3097,3641,4445,118,0]An[3096,13,3097,3641,3038,118,0]An[3096,13,3097,3641,4319,118,0]An[3096,13,3097,3641,5001,118,0]An[3096,13,3097,3641,1174,118,0]An[3096,13,3097,1116,4459,118,0]An[3096,13,3097,3194,4468,118,0]An[3096,13,3097,3194,4774,118,0]An[3096,13,3097,3194,4789,118,0]An[3096,13,3097,3194,3942,118,0]An[3096,13,3097,1691,4329,118,0]An[3096,13,3097,1691,4116,118,0]An[3096,13,3097,1691,4973,118,0]An[3096,13,3097,1691,4067,118,0]An[3096,13,3097,1691,3932,118,0]An[3096,13,3097,1356,3026,118,0]An[3096,13,3097,1356,4334,118,0]An[3096,13,3097,1356,3224,118,0]An[3096,13,3097,1356,3247,118,0]An[3096,13,3097,1356,4082,118,0]An[3096,13,3097,1356,4443,118,0]An[3096,13,3097,1356,4644,118,0]An[3096,13,3097,1356,2253,118,0]An[3096,13,3097,2305,4648,118,0]An[3096,13,3097,2305,2264,118,0]An[3096,13,3097,2305,4078,118,0]An[3096,13,3097,2305,3926,118,0]An[3096,13,3097,2305,3241,118,0]An[3096,13,3097,1756,4236,118,0]An[3096,13,3097,1756,4457,118,0]An[3096,13,3097,1756,5005,118,0]An[3096,13,3097,1756,2267,118,0]An[3096,13,3097,1756,4746,118,0]An[3096,13,3097,1784,4447,118,0]An[3096,13,3097,1784,4214,118,0]An[3096,13,3097,1784,4081,118,0]An[3096,13,3097,1784,4086,118,0]Ak[3096,13,3097,0,4357,118,0]Ak[3096,13,3097,0,4809,118,0]An[3096,13,3097,4254,3221,118,0]An[3096,13,3097,4254,5099,118,0]An[3096,13,3097,4844,4676,118,0]Am[3096,13,3097,3097,511,118,0]Am[3096,13,3097,3097,127,118,0]An[3096,13,3097,3097,2282,118,0]An[3096,13,3097,3097,2292,118,0]An[3096,13,3097,3097,3024,118,0]An[3096,13,1689,1689,4247,118,0]An[3096,13,4957,4957,4855,118,0]An[3096,13,4957,4957,1171,118,0]An[3096,13,1694,1694,1836,118,0]Am[3096,13,1694,1694,498,118,0]An[3096,13,1694,1694,5065,118,0]An[3096,13,1694,1694,3935,118,0]An[3096,13,1694,1694,4815,118,0]An[3096,13,1774,1774,3253,118,0]An[3096,13,1774,1774,4218,118,0]Ak[3096,13,1774,0,1170,118,0]An[3096,13,1774,1774,4672,118,0]An[3096,13,1774,1774,4911,118,0]An[3096,13,1774,1774,4674,118,0]Al[3096,13,3636,148,121,118,0]Am[3096,13,3636,148,3013,118,0]An[3096,13,3636,1352,1157,118,0]An[3096,13,3636,1352,3937,118,0]An[3096,13,3636,2358,1841,118,0]An[3096,13,3636,2358,4234,118,0]An[3096,13,3636,3636,4738,118,0]An[3096,13,4706,4706,1172,118,0]An[3096,13,4706,4706,1175,118,0]An[1985,13,1986,1986,3256,118,0]Am[1985,13,1986,416,4358,118,0]An[1985,13,1986,1986,2279,118,0]An[1985,13,1986,1986,2293,118,0]An[1985,13,1986,1986,4087,118,0]An[1095,13,1096,1096,3015,118,0]An[1095,13,1096,1096,4848,118,0]Am[1095,13,1683,1683,135,118,0]An[1095,13,1381,1381,1190,118,0]An[1095,13,1381,1381,3961,118,0]An[1095,13,1381,1381,4453,118,0]An[1095,13,4174,4174,5050,118,0]An[1095,13,4174,4174,5051,118,0]Am[1095,13,1779,1779,136,118,0]Aj[463,13,464,3640,4918,0,0]Aj[463,13,464,1094,4359,0,0]Ag[463,13,464,0,4065,0,0]Al[3096,13,3097,1691,4067,0,0]Al[3096,14,3097,1756,5005,0,0]Ai[3096,14,4745,0,4810,0,0]Ah[3096,14,4456,0,499,0,0]Ai[3096,14,4456,0,1184,0,0]Af[463,5,464,3640,0,0,0]Al[1195,15,1196,1196,3928,0,0]Ae[2358,6,2359,0,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1356,0,0,0]Aj[463,15,464,3640,4749,0,0]Al[3096,15,3097,3070,4750,0,0]Af[463,5,464,2304,0,0,0]Ah[3096,5,3097,2305,0,0,0]Al[3096,15,3097,2002,3959,0,0]Af[463,5,464,2336,0,0,0]2Ah[3096,6,3097,1756,0,0,0]Ag[463,19,464,0,1443,0,0]Al[3096,19,3097,1810,1444,0,0]Ag[463,19,464,0,4808,0,0]Ai[3096,19,3097,0,4809,0,0]=Ah[463,12,1693,0,4115,0,0]>Ak[463,13,1773,0,4673,4115,0]>Al[3096,12,1694,1694,4117,0,0]>Ao[3096,13,1774,1774,4674,4117,0]Ao[1095,13,4174,4174,5051,4117,0]An[2358,13,2359,2359,125,3943,0]Ao[2358,13,2359,2359,2250,3943,0]Ag[463,14,464,0,3041,0,0]Al[3096,14,3097,1382,3042,0,0]Ag[463,13,464,0,4114,0,0]Al[3096,13,3097,1691,4116,0,0]Aj[463,13,464,1994,4316,0,0]0>=Al[1095,13,1381,1381,4453,0,0]Ae[1095,2,1096,0,0,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2264,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]Al[3096,13,3097,3641,3212,0,0]Ag[463,13,464,0,4467,0,0]Al[3096,13,3097,3194,4468,0,0]43Ak[1195,14,1196,1196,134,0,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Al[1985,14,1986,1986,2293,0,0]Al[3096,13,3097,2002,1861,0,0]Al[3096,13,3097,4254,5094,0,0]Al[3096,13,3097,4254,5099,0,0]Aj[463,13,464,4039,3243,0,0]Al[3096,13,3097,2002,3244,0,0]=Al[1195,14,1380,1380,1189,0,0]Ao[1095,13,1096,1096,4848,3050,0]Ag[463,15,464,0,3025,0,0]Af[463,5,464,1356,0,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1356,0,0,0]Af[463,6,464,3641,0,0,0]Ah[3096,6,3097,3641,0,0,0]Al[3096,15,3097,2305,4213,0,0]Ah[3096,5,3097,1784,0,0,0]Af[463,5,464,1382,0,0,0]Ah[3096,5,3097,1382,0,0,0]97Ae[1095,5,1381,0,0,0,0]:8Ah[3096,6,3097,1756,0,0,0]Af[463,5,464,1116,0,0,0]Ah[3096,5,3097,1116,0,0,0]Al[3096,15,3097,1366,4748,0,0]Af[463,5,464,1392,0,0,0]Ah[3096,5,3097,1392,0,0,0]Af[463,5,464,3194,0,0,0]Ah[3096,5,3097,3194,0,0,0]Ag[463,15,464,0,4444,0,0]Al[3096,15,3097,3641,4445,0,0]Af[463,5,464,3640,0,0,0]Aj[463,15,464,4034,3044,0,0]Aj[463,15,464,4034,3239,0,0]Aj[463,15,464,4039,3257,0,0]Aj[463,15,464,4039,4120,0,0]An[1195,13,1196,1196,134,4212,0]Ao[1195,13,1196,1196,3952,4212,0]Ao[1195,13,1196,1196,3928,4212,0]Am[463,13,464,3640,3211,4212,0]Am[463,13,464,3640,4918,4212,0]Am[463,13,464,3640,4749,4212,0]Am[463,13,464,2304,2259,4212,0]Am[463,13,464,2304,4215,4212,0]Am[463,13,464,4142,1418,4212,0]Al[463,13,464,1094,503,4212,0]Am[463,13,464,1094,4359,4212,0]Am[463,13,464,4034,4352,4212,0]Am[463,13,464,4034,3044,4212,0]Am[463,13,464,4034,3239,4212,0]Am[463,13,464,4034,4351,4212,0]Am[463,13,464,4039,3257,4212,0]Am[463,13,464,4039,4120,4212,0]Aj[463,13,464,0,1443,4212,0]Aj[463,13,464,0,4915,4212,0]Aj[463,13,464,0,1426,4212,0]Aj[463,13,464,0,2294,4212,0]Aj[463,13,464,0,3217,4212,0]Aj[463,13,464,0,3041,4212,0]Aj[463,13,464,0,4448,4212,0]Aj[463,13,464,0,1867,4212,0]Aj[463,13,464,0,4071,4212,0]Aj[463,13,464,0,4444,4212,0]Aj[463,13,464,0,4467,4212,0]Aj[463,13,464,0,4773,4212,0]Aj[463,13,464,0,4788,4212,0]Aj[463,13,464,0,3941,4212,0]Aj[463,13,464,0,4328,4212,0]Aj[463,13,464,0,4114,4212,0]Aj[463,13,464,0,4972,4212,0]Aj[463,13,464,0,4065,4212,0]Aj[463,13,464,0,3931,4212,0]Aj[463,13,464,0,3025,4212,0]Aj[463,13,464,0,4441,4212,0]Aj[463,13,464,0,4642,4212,0]Aj[463,13,464,0,4077,4212,0]Aj[463,13,464,0,4080,4212,0]Aj[463,13,464,0,4085,4212,0]Aj[463,13,464,0,4808,4212,0]Aj[463,13,464,0,3220,4212,0]Ai[463,13,464,0,510,4212,0]Ai[463,13,464,0,126,4212,0]Aj[463,13,464,0,2281,4212,0]Aj[463,13,3635,0,120,4212,0]Ak[463,13,3635,0,3012,4212,0]Ak[463,13,3635,0,1156,4212,0]Ak[463,13,3635,0,3936,4212,0]Ak[463,13,3635,0,1840,4212,0]Ak[463,13,3635,0,4233,4212,0]Ak[463,13,1773,0,1169,4212,0]Ak[463,13,1773,0,4671,4212,0]Ak[463,13,1773,0,4910,4212,0]Ak[463,13,1773,0,4673,4212,0]Ao[3096,13,3097,1810,1444,4212,0]Ao[3096,13,3097,1810,4916,4212,0]Ao[3096,13,3097,3070,4750,4212,0]Ao[3096,13,3097,1366,1427,4212,0]Ao[3096,13,3097,1366,4110,4212,0]Ao[3096,13,3097,1366,3233,4212,0]Ao[3096,13,3097,1366,3040,4212,0]Ao[3096,13,3097,1366,4748,4212,0]Ao[3096,13,3097,1366,4804,4212,0]Ao[3096,13,3097,1366,3207,4212,0]Ao[3096,13,3097,1382,2295,4212,0]Ao[3096,13,3097,1382,3218,4212,0]Ao[3096,13,3097,1382,3042,4212,0]Ao[3096,13,3097,1382,4449,4212,0]Ao[3096,13,3097,1120,3045,4212,0]Ao[3096,13,3097,1120,4241,4212,0]Ao[3096,13,3097,1125,1868,4212,0]Ao[3096,13,3097,1125,3258,4212,0]Ao[3096,13,3097,1125,3940,4212,0]Ao[3096,13,3097,2002,4353,4212,0]Ao[3096,13,3097,2002,4075,4212,0]Ao[3096,13,3097,3641,4445,4212,0]Ao[3096,13,3097,3641,3038,4212,0]Ao[3096,13,3097,3641,4319,4212,0]Ao[3096,13,3097,3641,5001,4212,0]Ao[3096,13,3097,3194,4468,4212,0]Ao[3096,13,3097,3194,4774,4212,0]Ao[3096,13,3097,3194,4789,4212,0]Ao[3096,13,3097,3194,3942,4212,0]Ao[3096,13,3097,1691,4329,4212,0]Ao[3096,13,3097,1691,4116,4212,0]Ao[3096,13,3097,1691,4973,4212,0]Ao[3096,13,3097,1691,4067,4212,0]Ao[3096,13,3097,1691,3932,4212,0]Ao[3096,13,3097,1356,3026,4212,0]Ao[3096,13,3097,1356,3224,4212,0]Ao[3096,13,3097,1356,3247,4212,0]Ao[3096,13,3097,1356,4082,4212,0]Ao[3096,13,3097,1356,4443,4212,0]Ao[3096,13,3097,1356,4644,4212,0]Ao[3096,13,3097,1356,2253,4212,0]Ao[3096,13,3097,2305,4648,4212,0]Ao[3096,13,3097,2305,4078,4212,0]Ao[3096,13,3097,1756,4457,4212,0]Ao[3096,13,3097,1756,5005,4212,0]Ao[3096,13,3097,1756,2267,4212,0]Ao[3096,13,3097,1756,4746,4212,0]Ao[3096,13,3097,1784,4081,4212,0]Ao[3096,13,3097,1784,4086,4212,0]Al[3096,13,3097,0,4357,4212,0]Al[3096,13,3097,0,4809,4212,0]Ao[3096,13,3097,4254,3221,4212,0]Ao[3096,13,3097,4254,5099,4212,0]An[3096,13,3097,3097,511,4212,0]An[3096,13,3097,3097,127,4212,0]Ao[3096,13,3097,3097,2282,4212,0]Ao[3096,13,3097,3097,3024,4212,0]Ao[3096,13,1689,1689,4247,4212,0]Ao[3096,13,4957,4957,4855,4212,0]Ao[3096,13,4957,4957,1171,4212,0]Al[3096,13,1774,0,1170,4212,0]Ao[3096,13,1774,1774,4672,4212,0]Ao[3096,13,1774,1774,4911,4212,0]Ao[3096,13,1774,1774,4674,4212,0]Am[3096,13,3636,148,121,4212,0]An[3096,13,3636,148,3013,4212,0]Ao[3096,13,3636,1352,1157,4212,0]Ao[3096,13,3636,1352,3937,4212,0]Ao[3096,13,3636,2358,1841,4212,0]Ao[3096,13,3636,2358,4234,4212,0]Ao[3096,13,4706,4706,1175,4212,0]Ao[1985,13,1986,1986,2279,4212,0]Ao[1985,13,1986,1986,2293,4212,0]Ao[1985,13,1986,1986,4087,4212,0]Ao[1095,13,1096,1096,4848,4212,0]Ao[1095,13,1381,1381,4453,4212,0]Ao[1095,13,4174,4174,5050,4212,0]Ao[1095,13,4174,4174,5051,4212,0]Af[463,7,464,1994,0,0,0]Ag[463,13,464,0,4328,0,0]Al[3096,13,3097,1691,4329,0,0]Ah[463,12,1693,0,3035,0,0]Al[3096,12,1694,1694,3036,0,0]Al[1985,14,1986,1986,2279,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]10Ae[1095,7,1096,0,0,0,0]Aj[463,13,464,2304,2259,0,0]Ae[4257,7,4258,0,0,0,0]Ae[1195,7,1196,0,0,0,0]Al[3096,13,3097,3641,3212,0,0]Aj[463,13,464,3640,3211,0,0]1Al[3096,13,3097,2002,4353,0,0]Al[1195,13,1380,1380,1189,0,0]Al[1195,14,1380,1380,3960,0,0]Aj[463,12,464,1994,1852,0,0]Am[463,13,464,1393,4121,1852,0]Am[463,13,464,1137,3955,1852,0]Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Af[463,5,464,1094,0,0,0]Ag[463,15,464,0,3025,0,0]Af[463,5,464,1356,0,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1356,0,0,0]Ag[463,15,464,0,4444,0,0]Al[3096,15,3097,3641,4445,0,0]Ah[3096,5,3097,2305,0,0,0]Al[3096,15,3097,3641,1174,0,0]1Ag[463,15,464,0,4077,0,0]Al[3096,15,3097,2305,4078,0,0]Ag[463,19,464,0,4808,0,0]Ai[3096,19,3097,0,4809,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]32Al[3096,15,3097,3641,3038,0,0]><><><21Ag[463,5,1773,1774,0,0,0]Ae[3096,5,1774,0,0,0,0]10Af[463,5,464,4844,0,0,0]Ah[3096,5,3097,4844,0,0,0]Al[3096,15,4706,4706,1172,0,0]Al[3096,15,3097,1366,4748,0,0]6Al[3096,15,3097,1756,4457,0,0]Ag[463,12,464,0,2287,0,0]Aj[463,13,464,0,4206,2287,0]Aj[463,13,464,0,4098,2287,0]Al[3096,12,3097,1392,2288,0,0]Ao[3096,13,3097,4477,4207,2288,0]Ao[3096,13,3097,1392,4099,2288,0]Ae[3966,7,3967,0,0,0,0]Aj[463,13,464,3640,3211,0,0]Al[3096,13,3097,3641,3212,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]32An[1195,13,1196,1196,134,4330,0]An[2358,13,2359,2359,125,4330,0]Ao[2358,13,2359,2359,2250,4330,0]Ao[1095,13,1096,1096,3015,4330,0]An[1095,13,1683,1683,135,4330,0]An[1095,13,1779,1779,136,4330,0]Ak[1985,13,1986,416,4358,0,0]Ag[463,13,464,0,4467,0,0]Al[3096,13,3097,3194,4468,0,0]:9Ae[3096,2,3097,0,0,0,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,2305,2260,0,0]?>43Ae[4257,7,4258,0,0,0,0]6Al[1095,14,1096,1096,3015,0,0]70Ae[1195,7,1196,0,0,0,0]Ag[463,13,464,0,4114,0,0]Ag[463,13,464,0,4065,0,0]Al[3096,13,3097,1691,4116,0,0]Al[3096,13,3097,1691,4067,0,0]Ag[463,14,464,0,4114,0,0]Al[3096,14,3097,1691,4116,0,0]53Aj[463,13,464,4039,3243,0,0]Ag[463,19,464,0,4808,0,0]Ai[3096,19,3097,0,4809,0,0]Ag[463,15,464,0,4444,0,0]Al[3096,15,3097,1366,4748,0,0]Al[3096,15,3097,3641,4445,0,0]Ah[463,10,3635,3636,0,0,0]Af[3096,10,3636,0,0,0,0]Ag[463,5,3635,3636,0,0,0]Ae[3096,5,3636,0,0,0,0]Ah[463,10,1693,1694,0,0,0]Af[3096,10,1694,0,0,0,0]Ag[463,15,464,0,4077,0,0]Al[3096,15,3097,2305,4078,0,0]Ag[463,10,464,3641,0,0,0]Ai[3096,10,3097,3641,0,0,0]Ah[3096,6,3097,1756,0,0,0]Ah[3096,6,3097,1366,0,0,0]Af[463,6,464,3640,0,0,0]Ah[3096,6,3097,3070,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]10Aj[463,15,464,3640,4749,0,0]Al[3096,15,3097,3070,4750,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,14,3097,1382,3042,0,0]Ah[463,14,3635,0,4737,0,0]Al[3096,14,3636,3636,4738,0,0]Aj[463,13,464,3640,3211,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]10Al[3096,13,3097,3070,3018,0,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,2305,2260,0,0]Ab[4768,3,0,0,0,0,0]Ao[1095,13,1096,1096,4848,3050,0]Ag[463,19,464,0,4808,0,0]Ai[3096,19,3097,0,4809,0,0]Af[463,5,464,3194,0,0,0]Ah[3096,5,3097,3194,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]54Ai[3096,10,3097,1756,0,0,0]Al[3096,15,3097,3641,1174,0,0]7600Al[3096,15,3097,1120,4241,0,0]4365Al[3096,15,4706,4706,1172,0,0]Ae[1095,9,1096,0,0,0,0]:9Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]<;<;Ah[3096,6,3097,1366,0,0,0]21Al[1195,15,1196,1196,3952,0,0]Ac[463,5,464,0,0,0,0]Ae[3096,5,3097,0,0,0,0]Ag[463,15,464,0,4077,0,0]Ag[463,5,1693,1694,0,0,0]Al[3096,15,3097,2305,4078,0,0]Al[3096,15,3097,1756,4746,0,0]Ae[3096,5,1694,0,0,0,0]An[1195,13,1196,1196,134,4320,0]An[2358,13,2359,2359,125,4320,0]Ao[1095,13,1096,1096,3015,4320,0]An[1095,13,1683,1683,135,4320,0]An[1095,13,1779,1779,136,4320,0]Ag[463,13,464,0,4467,0,0]Al[3096,13,3097,3194,4468,0,0]Ag[463,13,464,0,1443,0,0]Al[3096,13,3097,1810,1444,0,0]Aj[463,14,464,2304,4215,0,0]Aj[463,13,464,3640,4918,0,0]Ag[463,13,464,0,4328,0,0]Al[3096,13,3097,1691,4329,0,0]Ag[463,13,464,0,4206,0,0]Al[3096,13,3097,4477,4207,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]7Al[3096,13,3097,3641,3212,0,0]Aj[463,13,464,3640,3211,0,0]Ah[463,13,1773,0,4671,0,0]Ah[463,13,1773,0,4673,0,0]Al[3096,13,1774,1774,4672,0,0]Al[3096,13,1774,1774,4674,0,0]45;:Ao[3966,13,3967,3967,5006,4802,0]Ag[463,13,464,0,4458,0,0]Al[3096,13,3097,1116,4459,0,0]Ae[1095,6,1096,0,0,0,0]Af[463,5,464,4142,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]10Al[3096,15,3097,3641,3038,0,0]Ae[3096,5,4957,0,0,0,0]Af[463,5,464,4034,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Al[3096,15,4706,4706,1172,0,0]Aj[463,14,464,2304,4215,0,0]Ai[463,13,464,0,510,3006,0]Ai[463,13,464,0,126,3006,0]An[3096,13,3097,3097,511,3006,0]An[3096,13,3097,3097,127,3006,0]Ao[2358,13,2359,2359,2250,3248,0]Ag[463,13,464,0,4788,0,0]Al[3096,13,3097,3194,4789,0,0]Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Aj[463,13,464,3640,3211,0,0]Ag[463,12,464,0,4743,0,0]Al[3096,12,3097,3641,4744,0,0]Ag[463,13,464,0,4467,0,0]Al[3096,13,3097,3194,4468,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,14,3097,1382,3042,0,0]Ah[463,12,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,12,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Aj[463,14,464,2304,4215,0,0]Al[3096,13,3097,2002,1861,0,0]Ah[3096,2,4252,4038,0,0,0]Ae[1195,7,1196,0,0,0,0]==Ai[463,13,464,1094,503,0,0]Ak[1985,13,1986,416,4358,0,0]032Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Ae[3096,2,3097,0,0,0,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Ag[463,10,464,4254,0,0,0]Ai[3096,10,3097,4254,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Ag[463,15,464,0,4077,0,0]Al[3096,15,3097,2305,4078,0,0]Ag[463,19,464,0,4808,0,0]Ai[3096,19,3097,0,4809,0,0]Af[463,5,464,1691,0,0,0]Ah[3096,5,3097,1691,0,0,0]Ah[463,12,1693,0,3035,0,0]Al[3096,12,1694,1694,3036,0,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,3641,3212,0,0]Al[3096,13,3097,2305,2260,0,0]Al[3096,13,3097,3097,3024,0,0]Ah[463,13,3635,0,4233,0,0]Al[3096,13,3636,2358,4234,0,0]Aj[463,13,464,1994,3048,0,0]0Aj[463,13,464,3640,3211,0,0]6Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]Ag[463,13,464,0,4467,0,0]Al[3096,13,3097,3194,4468,0,0]Al[1095,14,1096,1096,3015,0,0]Ag[463,19,464,0,4808,0,0]Ai[3096,19,3097,0,4809,0,0]Al[3096,15,4706,4706,1172,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]10Al[3096,15,3097,1366,4804,0,0]Al[3096,15,3097,3641,3038,0,0]Al[3096,15,3097,3641,4319,0,0]Ah[3096,5,3097,3641,0,0,0]Al[3096,15,3097,1366,4748,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1756,0,0,0]Ae[3966,5,3967,0,0,0,0]Al[1095,13,1096,1096,3015,0,0]Aj[463,13,464,3640,3211,0,0]Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Ah[3096,7,4890,4889,0,0,0]0Al[3096,13,3097,3641,3212,0,0]6Ai[463,13,464,1094,503,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]Ao[3966,13,3967,3967,5006,4802,0]0Ag[463,13,464,0,4065,0,0]Al[3096,13,3097,1691,4067,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]10Ag[463,13,464,0,4773,0,0]Al[3096,13,3097,3194,4774,0,0]Am[1195,13,1196,1196,134,485,0]Am[2358,13,2359,2359,125,485,0]An[1095,13,1096,1096,3015,485,0]Am[1095,13,1683,1683,135,485,0]Am[1095,13,1779,1779,136,485,0]??>An[1195,13,1196,1196,134,4330,0]An[2358,13,2359,2359,125,4330,0]Ao[2358,13,2359,2359,2250,4330,0]Ao[1095,13,1096,1096,3015,4330,0]An[1095,13,1683,1683,135,4330,0]An[1095,13,1779,1779,136,4330,0]Ag[463,13,464,0,4114,0,0]Al[3096,13,3097,1691,4116,0,0]Ag[463,19,464,0,4808,0,0]Ai[3096,19,3097,0,4809,0,0]Ae[1095,5,4174,0,0,0,0]0Ag[463,13,464,0,4328,0,0]Al[3096,13,3097,1691,4329,0,0]Ag[463,13,464,0,4065,0,0]Al[3096,13,3097,1691,4067,0,0]Aj[463,13,464,2304,2259,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2264,0,0]Al[3096,13,3097,3641,3212,0,0]Ao[3966,13,3967,3967,5006,4802,0];:Ag[463,5,1693,1694,0,0,0]Ae[3096,5,1694,0,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]?>?>Aj[463,13,464,3640,3211,0,0]6Ag[463,13,464,0,4467,0,0]Al[3096,13,3097,3194,4468,0,0]Ae[3966,7,3967,0,0,0,0]Ae[4257,7,4258,0,0,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1382,3218,0,0]?434343>=>=Al[3096,14,4957,4957,4855,0,0]54Ai[3096,18,3097,3194,0,0,0]") \ No newline at end of file diff --git a/pr/561/docs/search.index/entry/ffcdca0799e4.js b/pr/561/docs/search.index/entry/ffcdca0799e4.js new file mode 100644 index 000000000..a1ddd5ac8 --- /dev/null +++ b/pr/561/docs/search.index/entry/ffcdca0799e4.js @@ -0,0 +1 @@ +rd_("Af[463,15,464,0,126,0,0]Ak[3096,15,3097,3097,127,0,0]Ag[463,15,464,0,4087,0,0]Al[3096,15,3097,1784,4088,0,0]Al[1985,15,1986,1986,4089,0,0]Al[3096,15,1689,1689,1433,0,0]Ao[1195,13,1196,1196,3930,3037,0]Am[463,13,464,3640,4753,3037,0]Am[463,13,464,4144,1418,3037,0]Al[463,13,464,1094,503,3037,0]Am[463,13,464,1094,4363,3037,0]Am[463,13,464,4036,4356,3037,0]Am[463,13,464,4036,3044,3037,0]Am[463,13,464,4036,3239,3037,0]Am[463,13,464,4036,4355,3037,0]Am[463,13,464,4041,3257,3037,0]Am[463,13,464,4041,4122,3037,0]Aj[463,13,464,0,1443,3037,0]Aj[463,13,464,0,4919,3037,0]Aj[463,13,464,0,1152,3037,0]Aj[463,13,464,0,1426,3037,0]Aj[463,13,464,0,2294,3037,0]Aj[463,13,464,0,3217,3037,0]Aj[463,13,464,0,3041,3037,0]Aj[463,13,464,0,1867,3037,0]Aj[463,13,464,0,4073,3037,0]Aj[463,13,464,0,4448,3037,0]Aj[463,13,464,0,3943,3037,0]Aj[463,13,464,0,3933,3037,0]Aj[463,13,464,0,3025,3037,0]Aj[463,13,464,0,4445,3037,0]Aj[463,13,464,0,4646,3037,0]Aj[463,13,464,0,4079,3037,0]Aj[463,13,464,0,4082,3037,0]Aj[463,13,464,0,4087,3037,0]Aj[463,13,464,0,4812,3037,0]Ai[463,13,464,0,510,3037,0]Ai[463,13,464,0,126,3037,0]Aj[463,13,464,0,2281,3037,0]Ak[463,13,1693,0,5068,3037,0]Ak[463,13,1773,0,1169,3037,0]Ao[3096,13,3097,1810,1444,3037,0]Ao[3096,13,3097,1810,4920,3037,0]Ao[3096,13,3097,3061,1153,3037,0]Ao[3096,13,3097,3070,4754,3037,0]Ao[3096,13,3097,1366,1427,3037,0]Ao[3096,13,3097,1366,3233,3037,0]Ao[3096,13,3097,1366,3040,3037,0]Ao[3096,13,3097,1366,4752,3037,0]Ao[3096,13,3097,1366,4808,3037,0]Ao[3096,13,3097,1366,3207,3037,0]Ao[3096,13,3097,1381,2295,3037,0]Ao[3096,13,3097,1381,3218,3037,0]Ao[3096,13,3097,1381,3042,3037,0]Ao[3096,13,3097,1120,3045,3037,0]Ao[3096,13,3097,1120,4245,3037,0]Ao[3096,13,3097,1125,1868,3037,0]Ao[3096,13,3097,1125,3258,3037,0]Ao[3096,13,3097,1125,3942,3037,0]Ao[3096,13,3097,2002,3961,3037,0]Ao[3096,13,3097,2002,4357,3037,0]Ao[3096,13,3097,2002,4077,3037,0]Ao[3096,13,3097,3641,4449,3037,0]Ao[3096,13,3097,3641,3038,3037,0]Ao[3096,13,3097,3641,4323,3037,0]Ao[3096,13,3097,3194,3944,3037,0]Ao[3096,13,3097,1691,3934,3037,0]Ao[3096,13,3097,1356,3026,3037,0]Ao[3096,13,3097,1356,4338,3037,0]Ao[3096,13,3097,1356,3224,3037,0]Ao[3096,13,3097,1356,3247,3037,0]Ao[3096,13,3097,1356,4084,3037,0]Ao[3096,13,3097,1356,4447,3037,0]Ao[3096,13,3097,1356,4648,3037,0]Ao[3096,13,3097,2305,4652,3037,0]Ao[3096,13,3097,2305,4080,3037,0]Ao[3096,13,3097,1756,2267,3037,0]Ao[3096,13,3097,1756,4750,3037,0]Ao[3096,13,3097,1784,4083,3037,0]Ao[3096,13,3097,1784,4088,3037,0]Al[3096,13,3097,0,4361,3037,0]Al[3096,13,3097,0,4813,3037,0]An[3096,13,3097,3097,511,3037,0]An[3096,13,3097,3097,127,3037,0]Ao[3096,13,3097,3097,2282,3037,0]Ao[3096,13,3097,3097,3024,3037,0]Ao[3096,13,1689,1689,4251,3037,0]Ao[3096,13,4961,4961,4859,3037,0]Ao[3096,13,4961,4961,1171,3037,0]Ao[3096,13,1694,1694,5069,3037,0]Al[3096,13,1774,0,1170,3037,0]Ao[1985,13,1986,1986,4089,3037,0]Ai[463,13,464,1094,503,0,0]Aj[463,13,464,1094,4363,0,0]Aj[463,13,464,4036,3237,0,0]Aj[463,13,464,4036,4860,0,0]Aj[463,13,464,4041,3243,0,0]Ai[3096,14,3039,0,1420,0,0]Ai[3096,14,3039,0,3002,0,0]Ai[3096,14,3039,0,3020,0,0]Ai[3096,14,3039,0,4109,0,0]Ai[3096,14,3039,0,4102,0,0]Ai[3096,14,3960,0,2277,0,0]Ai[3096,14,3960,0,2297,0,0]Ai[3096,14,3960,0,2261,0,0]Ai[3096,14,3960,0,1855,0,0]Ae[1195,7,1196,0,0,0,0]Ah[3096,14,4460,0,499,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Af[463,5,3635,148,0,0,0]Ag[3096,5,3636,148,0,0,0]Al[1095,15,1096,1096,4852,0,0]Ae[2358,5,2359,0,0,0,0]Af[463,6,464,3097,0,0,0]Ae[3096,6,3097,0,0,0,0]Al[3096,15,1689,1689,1433,0,0]Ag[463,19,464,0,1443,0,0]Ag[463,19,464,0,1426,0,0]Al[3096,19,3097,1810,1444,0,0]Al[3096,19,3097,1366,1427,0,0]Ae[1195,5,1196,0,0,0,0]Ae[1095,5,1683,0,0,0,0]Ae[1095,5,1779,0,0,0,0]Af[463,15,464,0,126,0,0]Ak[3096,15,3097,3097,127,0,0]Ai[463,13,464,0,2294,117,0]Ai[463,13,464,0,3217,117,0]Ai[463,13,464,0,4452,117,0]An[3096,13,3097,1381,2295,117,0]An[3096,13,3097,1381,3218,117,0]An[3096,13,3097,1381,4453,117,0]Ai[463,13,464,0,1443,137,0]Ai[463,13,464,0,1426,137,0]Ai[463,13,464,0,3943,137,0]Ai[463,13,464,0,4082,137,0]Ah[463,13,464,0,510,137,0]Ah[463,13,464,0,126,137,0]Ai[463,13,464,0,2281,137,0]An[3096,13,3097,1810,1444,137,0]An[3096,13,3097,3070,4754,137,0]An[3096,13,3097,1366,1427,137,0]An[3096,13,3097,1120,3045,137,0]An[3096,13,3097,1120,4245,137,0]An[3096,13,3097,1125,3258,137,0]An[3096,13,3097,3194,3944,137,0]An[3096,13,3097,2305,4652,137,0]An[3096,13,3097,1756,4750,137,0]An[3096,13,3097,1784,4083,137,0]Am[3096,13,3097,3097,511,137,0]Am[3096,13,3097,3097,127,137,0]An[3096,13,3097,3097,2282,137,0]Ag[463,13,464,0,2281,0,0]Al[3096,13,3097,3097,2282,0,0]Ai[3096,14,3960,0,1421,0,0]Ai[3096,14,3960,0,3009,0,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Al[1985,14,1986,1986,2279,0,0]Al[1985,14,1986,1986,2293,0,0]An[1195,13,1196,1196,134,1159,0]Ao[1195,13,1196,1196,3954,1159,0]Ao[1195,13,1196,1196,3930,1159,0]Ao[1195,13,1380,1380,4358,1159,0]Ao[3968,13,3969,3969,5010,1159,0]Am[463,13,464,4144,4916,1159,0]Am[463,13,464,3640,3209,1159,0]Am[463,13,464,3640,3211,1159,0]Am[463,13,464,3640,4922,1159,0]Db[463,13,464,3640,4753,1827,0,\"impl-Display-for-SendDatagramError\"]D`[463,13,464,3640,4753,1159,0,\"impl-Debug-for-SendDatagramError\"]Am[463,13,464,2304,2259,1159,0]Am[463,13,464,2304,4219,1159,0]Ce[463,13,464,4144,1418,1159,0,\"impl-Debug-for-Lagged\"]Cg[463,13,464,4144,1418,1827,0,\"impl-Display-for-Lagged\"]Am[463,13,464,4144,3231,1159,0]Am[463,13,464,4144,4853,1159,0]Am[463,13,464,2336,2263,1159,0]Ck[463,13,464,2336,3240,1827,0,\"impl-Display-for-RetryError\"]Ci[463,13,464,2336,3240,1159,0,\"impl-Debug-for-RetryError\"]Am[463,13,464,2336,4337,1159,0]Al[463,13,464,1094,503,1159,0]Am[463,13,464,1094,4363,1159,0]Am[463,13,464,4036,3237,1159,0]Am[463,13,464,4036,4860,1159,0]Co[463,13,464,4036,4356,1827,0,\"impl-Display-for-ReadToEndError\"]Cm[463,13,464,4036,4356,1159,0,\"impl-Debug-for-ReadToEndError\"]Cj[463,13,464,4036,3044,1827,0,\"impl-Display-for-ReadError\"]Ch[463,13,464,4036,3044,1159,0,\"impl-Debug-for-ReadError\"]Ck[463,13,464,4036,3239,1827,0,\"impl-Display-for-ResetError\"]Ci[463,13,464,4036,3239,1159,0,\"impl-Debug-for-ResetError\"]Cm[463,13,464,4036,4355,1159,0,\"impl-Debug-for-ReadExactError\"]Co[463,13,464,4036,4355,1827,0,\"impl-Display-for-ReadExactError\"]Am[463,13,464,1393,4123,1159,0]Am[463,13,464,1137,3957,1159,0]Am[463,13,464,4041,3243,1159,0]Ci[463,13,464,4041,3257,1159,0,\"impl-Debug-for-WriteError\"]Ck[463,13,464,4041,3257,1827,0,\"impl-Display-for-WriteError\"]Ck[463,13,464,4041,4122,1159,0,\"impl-Debug-for-StoppedError\"]Cm[463,13,464,4041,4122,1827,0,\"impl-Display-for-StoppedError\"]Am[463,13,464,4041,1857,1159,0]Cb[463,13,464,0,1443,1159,0,\"impl-Debug-for-VarInt\"]Cd[463,13,464,0,1443,1827,0,\"impl-Display-for-VarInt\"]Db[463,13,464,0,4919,1827,0,\"impl-Display-for-VarIntBoundsExceeded\"]D`[463,13,464,0,4919,1159,0,\"impl-Debug-for-VarIntBoundsExceeded\"]Aj[463,13,464,0,1152,1159,0]Cd[463,13,464,0,1426,1827,0,\"impl-Display-for-PathId\"]Cb[463,13,464,0,1426,1159,0,\"impl-Debug-for-PathId\"]Aj[463,13,464,0,2294,1159,0]Aj[463,13,464,0,3217,1159,0]Aj[463,13,464,0,3041,1159,0]Aj[463,13,464,0,4452,1159,0]Aj[463,13,464,0,1867,1159,0]Cj[463,13,464,0,4073,1827,0,\"impl-Display-for-ClosedStream\"]Ch[463,13,464,0,4073,1159,0,\"impl-Debug-for-ClosedStream\"]Ck[463,13,464,0,4448,1159,0,\"impl-Debug-for-ConnectionError\"]Cm[463,13,464,0,4448,1827,0,\"impl-Display-for-ConnectionError\"]Aj[463,13,464,0,4462,1159,0]Aj[463,13,464,0,4471,1159,0]Aj[463,13,464,0,4777,1159,0]Aj[463,13,464,0,4792,1159,0]Aj[463,13,464,0,3943,1159,0]Aj[463,13,464,0,4332,1159,0]Aj[463,13,464,0,4116,1159,0]Aj[463,13,464,0,4976,1159,0]Aj[463,13,464,0,4067,1159,0]Ci[463,13,464,0,3933,1827,0,\"impl-Display-for-ConfigError\"]Cg[463,13,464,0,3933,1159,0,\"impl-Debug-for-ConfigError\"]Cg[463,13,464,0,3025,1827,0,\"impl-Display-for-FrameType\"]Ce[463,13,464,0,3025,1159,0,\"impl-Debug-for-FrameType\"]Ck[463,13,464,0,4445,1159,0,\"impl-Debug-for-ConnectionClose\"]Cm[463,13,464,0,4445,1827,0,\"impl-Display-for-ConnectionClose\"]Cn[463,13,464,0,4646,1827,0,\"impl-Display-for-ApplicationClose\"]Cl[463,13,464,0,4646,1159,0,\"impl-Debug-for-ApplicationClose\"]Ch[463,13,464,0,4079,1159,0,\"impl-Debug-for-ConnectError\"]Cj[463,13,464,0,4079,1827,0,\"impl-Display-for-ConnectError\"]Ch[463,13,464,0,4082,1159,0,\"impl-Debug-for-ConnectionId\"]Cj[463,13,464,0,4082,1827,0,\"impl-Display-for-ConnectionId\"]Aj[463,13,464,0,4087,1159,0]Cn[463,13,464,0,4812,1159,0,\"impl-Debug-for-TransportErrorCode\"]D`[463,13,464,0,4812,1827,0,\"impl-Display-for-TransportErrorCode\"]Aj[463,13,464,0,3220,1159,0]Aj[463,13,464,0,4679,1159,0]Ai[463,13,464,0,510,1159,0]C`[463,13,464,0,126,1827,0,\"impl-Display-for-Dir\"]Bn[463,13,464,0,126,1159,0,\"impl-Debug-for-Dir\"]Cd[463,13,464,0,2281,1159,0,\"impl-Debug-for-StreamId\"]Cf[463,13,464,0,2281,1827,0,\"impl-Display-for-StreamId\"]Aj[463,13,464,0,2291,1159,0]Aj[463,13,3635,0,120,1159,0]Ak[463,13,3635,0,3012,1159,0]Ak[463,13,3635,0,1156,1159,0]Ak[463,13,3635,0,3938,1159,0]Ak[463,13,3635,0,1840,1159,0]Ak[463,13,3635,0,4237,1159,0]Ak[463,13,3635,0,4741,1159,0]Ak[463,13,1693,0,5068,1159,0]Ak[463,13,1693,0,3936,1159,0]Ak[463,13,1693,0,4816,1159,0]Cd[463,13,1773,0,1169,1827,0,\"impl-Display-for-Error\"]Cb[463,13,1773,0,1169,1159,0,\"impl-Debug-for-Error\"]Dc[463,13,1773,0,4914,1827,0,\"impl-Display-for-NoInitialCipherSuite\"]Da[463,13,1773,0,4914,1159,0,\"impl-Debug-for-NoInitialCipherSuite\"]Ao[3096,13,3097,3641,3212,1159,0]Ao[3096,13,3097,2305,2260,1159,0]Ci[3096,13,3097,1810,1444,1827,0,\"impl-Display-for-VarInt\"]Cg[3096,13,3097,1810,1444,1159,0,\"impl-Debug-for-VarInt\"]De[3096,13,3097,1810,4920,1159,0,\"impl-Debug-for-VarIntBoundsExceeded\"]Dg[3096,13,3097,1810,4920,1827,0,\"impl-Display-for-VarIntBoundsExceeded\"]Ao[3096,13,3097,3061,1153,1159,0]Dd[3096,13,3097,3070,4754,1827,0,\"impl-Display-for-SendDatagramError\"]Db[3096,13,3097,3070,4754,1159,0,\"impl-Debug-for-SendDatagramError\"]Ci[3096,13,3097,1366,1427,1827,0,\"impl-Display-for-PathId\"]Cg[3096,13,3097,1366,1427,1159,0,\"impl-Debug-for-PathId\"]Ao[3096,13,3097,1366,4112,1159,0]Ao[3096,13,3097,1366,3233,1159,0]Ao[3096,13,3097,1366,3040,1159,0]Ao[3096,13,3097,1366,4752,1159,0]Dc[3096,13,3097,1366,4808,1159,0,\"impl-Debug-for-SetPathStatusError\"]De[3096,13,3097,1366,4808,1827,0,\"impl-Display-for-SetPathStatusError\"]Ck[3096,13,3097,1366,3207,1159,0,\"impl-Debug-for-ClosedPath\"]Cm[3096,13,3097,1366,3207,1827,0,\"impl-Display-for-ClosedPath\"]Ao[3096,13,3097,1381,2295,1159,0]Ao[3096,13,3097,1381,3218,1159,0]Ao[3096,13,3097,1381,3042,1159,0]Ao[3096,13,3097,1381,4453,1159,0]Cl[3096,13,3097,1120,3045,1827,0,\"impl-Display-for-ReadError\"]Cj[3096,13,3097,1120,3045,1159,0,\"impl-Debug-for-ReadError\"]D`[3096,13,3097,1120,4245,1827,0,\"impl-Display-for-ReadableError\"]Cn[3096,13,3097,1120,4245,1159,0,\"impl-Debug-for-ReadableError\"]Ao[3096,13,3097,1125,1868,1159,0]Ck[3096,13,3097,1125,3258,1159,0,\"impl-Debug-for-WriteError\"]Cm[3096,13,3097,1125,3258,1827,0,\"impl-Display-for-WriteError\"]Cn[3096,13,3097,1125,3942,1827,0,\"impl-Display-for-FinishError\"]Cl[3096,13,3097,1125,3942,1159,0,\"impl-Debug-for-FinishError\"]Ao[3096,13,3097,2002,3961,1159,0]Ao[3096,13,3097,2002,4357,1159,0]Co[3096,13,3097,2002,4077,1827,0,\"impl-Display-for-ClosedStream\"]Cm[3096,13,3097,2002,4077,1159,0,\"impl-Debug-for-ClosedStream\"]Db[3096,13,3097,3641,4449,1827,0,\"impl-Display-for-ConnectionError\"]D`[3096,13,3097,3641,4449,1159,0,\"impl-Debug-for-ConnectionError\"]Cl[3096,13,3097,3641,3038,1827,0,\"impl-Display-for-PathError\"]Cj[3096,13,3097,3641,3038,1159,0,\"impl-Debug-for-PathError\"]Co[3096,13,3097,3641,4323,1159,0,\"impl-Debug-for-ClosePathError\"]Da[3096,13,3097,3641,4323,1827,0,\"impl-Display-for-ClosePathError\"]Dg[3096,13,3097,3641,5005,1159,0,\"impl-Debug-for-MultipathNotNegotiated\"]Di[3096,13,3097,3641,5005,1827,0,\"impl-Display-for-MultipathNotNegotiated\"]Ao[3096,13,3097,3641,1174,1159,0]Ao[3096,13,3097,1116,4463,1159,0]Ao[3096,13,3097,3194,4472,1159,0]Ao[3096,13,3097,3194,4778,1159,0]Ao[3096,13,3097,3194,4793,1159,0]Ao[3096,13,3097,3194,3944,1159,0]Ao[3096,13,3097,1691,4333,1159,0]Ao[3096,13,3097,1691,4118,1159,0]Ao[3096,13,3097,1691,4977,1159,0]Ao[3096,13,3097,1691,4069,1159,0]Cl[3096,13,3097,1691,3934,1159,0,\"impl-Debug-for-ConfigError\"]Cn[3096,13,3097,1691,3934,1827,0,\"impl-Display-for-ConfigError\"]Cj[3096,13,3097,1356,3026,1159,0,\"impl-Debug-for-FrameType\"]Cl[3096,13,3097,1356,3026,1827,0,\"impl-Display-for-FrameType\"]Da[3096,13,3097,1356,4338,1827,0,\"impl-Display-for-InvalidFrameId\"]Co[3096,13,3097,1356,4338,1159,0,\"impl-Debug-for-InvalidFrameId\"]Cm[3096,13,3097,1356,3224,1827,0,\"impl-Display-for-MaybeFrame\"]Ck[3096,13,3097,1356,3224,1159,0,\"impl-Debug-for-MaybeFrame\"]Ck[3096,13,3097,1356,3247,1159,0,\"impl-Debug-for-StreamInfo\"]Cm[3096,13,3097,1356,3247,1827,0,\"impl-Display-for-StreamInfo\"]Cm[3096,13,3097,1356,4084,1159,0,\"impl-Debug-for-DatagramInfo\"]Co[3096,13,3097,1356,4084,1827,0,\"impl-Display-for-DatagramInfo\"]Db[3096,13,3097,1356,4447,1827,0,\"impl-Display-for-ConnectionClose\"]D`[3096,13,3097,1356,4447,1159,0,\"impl-Debug-for-ConnectionClose\"]Dc[3096,13,3097,1356,4648,1827,0,\"impl-Display-for-ApplicationClose\"]Da[3096,13,3097,1356,4648,1159,0,\"impl-Debug-for-ApplicationClose\"]Ci[3096,13,3097,1356,2253,1159,0,\"impl-Debug-for-Datagram\"]Ck[3096,13,3097,1356,2253,1827,0,\"impl-Display-for-Datagram\"]Ao[3096,13,3097,2305,4652,1159,0]Ao[3096,13,3097,2305,2264,1159,0]Cm[3096,13,3097,2305,4080,1159,0,\"impl-Debug-for-ConnectError\"]Co[3096,13,3097,2305,4080,1827,0,\"impl-Display-for-ConnectError\"]Ao[3096,13,3097,2305,3928,1159,0]Ck[3096,13,3097,2305,3241,1159,0,\"impl-Debug-for-RetryError\"]Cm[3096,13,3097,2305,3241,1827,0,\"impl-Display-for-RetryError\"]Ao[3096,13,3097,1756,4240,1159,0]Ao[3096,13,3097,1756,4461,1159,0]Ao[3096,13,3097,1756,5009,1159,0]Ao[3096,13,3097,1756,2267,1159,0]Dd[3096,13,3097,1756,4750,1827,0,\"impl-Display-for-PacketDecodeError\"]Db[3096,13,3097,1756,4750,1159,0,\"impl-Debug-for-PacketDecodeError\"]Ao[3096,13,3097,1784,4451,1159,0]Ao[3096,13,3097,1784,4218,1159,0]Cm[3096,13,3097,1784,4083,1159,0,\"impl-Debug-for-ConnectionId\"]Co[3096,13,3097,1784,4083,1827,0,\"impl-Display-for-ConnectionId\"]Ao[3096,13,3097,1784,4088,1159,0]Ce[3096,13,3097,0,4361,1827,0,\"impl-Display-for-Error\"]Cc[3096,13,3097,0,4361,1159,0,\"impl-Debug-for-Error\"]Cb[3096,13,3097,0,4813,1159,0,\"impl-Debug-for-Code\"]Cd[3096,13,3097,0,4813,1827,0,\"impl-Display-for-Code\"]Ao[3096,13,3097,4258,3221,1159,0]Ao[3096,13,3097,4258,5103,1159,0]Ao[3096,13,3097,4848,4680,1159,0]An[3096,13,3097,3097,511,1159,0]Ce[3096,13,3097,3097,127,1827,0,\"impl-Display-for-Dir\"]Cc[3096,13,3097,3097,127,1159,0,\"impl-Debug-for-Dir\"]Ci[3096,13,3097,3097,2282,1159,0,\"impl-Debug-for-StreamId\"]Ck[3096,13,3097,3097,2282,1827,0,\"impl-Display-for-StreamId\"]Ao[3096,13,3097,3097,2292,1159,0]Cj[3096,13,3097,3097,3024,1159,0,\"impl-Debug-for-FourTuple\"]Cl[3096,13,3097,3097,3024,1827,0,\"impl-Display-for-FourTuple\"]Cn[3096,13,1689,1689,4251,1159,0,\"impl-Debug-for-UnexpectedEnd\"]D`[3096,13,1689,1689,4251,1827,0,\"impl-Display-for-UnexpectedEnd\"]Ao[3096,13,4961,4961,4859,1159,0]Cf[3096,13,4961,4961,1171,1159,0,\"impl-Debug-for-Error\"]Ch[3096,13,4961,4961,1171,1827,0,\"impl-Display-for-Error\"]Ao[3096,13,1694,1694,5069,1159,0]Ao[3096,13,1694,1694,3937,1159,0]Ao[3096,13,1694,1694,4819,1159,0]Ce[3096,13,1774,0,1170,1827,0,\"impl-Display-for-Error\"]Cc[3096,13,1774,0,1170,1159,0,\"impl-Debug-for-Error\"]De[3096,13,1774,1774,4915,1159,0,\"impl-Debug-for-NoInitialCipherSuite\"]Dg[3096,13,1774,1774,4915,1827,0,\"impl-Display-for-NoInitialCipherSuite\"]Am[3096,13,3636,148,121,1159,0]An[3096,13,3636,148,3013,1159,0]Ao[3096,13,3636,1352,1157,1159,0]Ao[3096,13,3636,1352,3939,1159,0]Ao[3096,13,3636,2358,1841,1159,0]Ao[3096,13,3636,2358,4238,1159,0]Ao[3096,13,3636,3636,4742,1159,0]Cf[3096,13,4710,4710,1172,1159,0,\"impl-Debug-for-Error\"]Ch[3096,13,4710,4710,1172,1827,0,\"impl-Display-for-Error\"]Ao[3096,13,4710,4710,1175,1159,0]An[1985,13,1986,416,4362,1159,0]Ao[1985,13,1986,1986,2279,1159,0]Ao[1985,13,1986,1986,2293,1159,0]Ao[1985,13,1986,1986,4089,1159,0]Aj[463,13,464,4144,4916,0,0]Al[3096,13,3097,1366,4112,0,0]Ag[463,14,464,0,2294,0,0]Al[3096,14,3097,1381,2295,0,0]Al[3096,13,3097,1756,4240,0,0]Al[3096,14,3097,1756,5009,0,0]Ah[3096,14,4460,0,499,0,0]Al[1985,14,1986,1986,2279,0,0]Ag[463,13,464,0,4976,0,0]Al[3096,13,3097,1691,4977,0,0]8Al[1195,13,1380,1380,4358,0,0]Al[3968,13,3969,3969,5010,0,0]Ag[463,13,464,0,4210,0,0]Aj[463,13,464,2304,2259,0,0]Ag[463,13,464,0,3234,0,0]Ag[463,13,464,0,4462,0,0]Ag[463,13,464,0,4332,0,0]Ag[463,13,464,0,4116,0,0]Ag[463,13,464,0,4067,0,0]Ag[463,13,464,0,4082,0,0]Ag[463,13,464,0,4679,0,0]Ag[463,13,464,0,2281,0,0]Ag[463,13,3635,0,120,0,0]Ah[463,13,3635,0,1156,0,0]Ah[463,13,3635,0,1840,0,0]Al[3096,13,3097,4481,4211,0,0]Al[3096,13,3097,1116,3235,0,0]Al[3096,13,3097,2305,2260,0,0]Al[3096,13,3097,1756,5128,0,0]Al[3096,13,3097,4258,5098,0,0]Al[3096,13,3097,1116,4463,0,0]Al[3096,13,3097,1691,4333,0,0]Al[3096,13,3097,1691,4118,0,0]Al[3096,13,3097,1691,4069,0,0]Al[3096,13,3097,1756,4240,0,0]Al[3096,13,3097,1784,4083,0,0]Ai[3096,13,3097,0,4361,0,0]Al[3096,13,3097,4258,5103,0,0]Al[3096,13,3097,4848,4680,0,0]Al[3096,13,3097,3097,2282,0,0]Al[3096,13,3097,3097,3024,0,0]Aj[3096,13,3636,148,121,0,0]Al[3096,13,3636,1352,1157,0,0]Al[3096,13,3636,2358,1841,0,0]Ak[1985,13,1986,416,4362,0,0]Al[1095,13,4178,4178,5054,0,0]Al[1095,13,4178,4178,5055,0,0]Aa[463,3,0,0,0,0,0]Ah[463,13,464,0,510,133,0]Am[3096,13,3097,3097,511,133,0]Ag[463,12,464,0,3250,0,0]Aj[463,13,464,1994,1852,0,0]0Am[463,13,464,1393,4123,1852,0]Aj[463,13,464,0,4249,3250,0]Al[3096,12,3097,1691,3251,0,0]Ao[3096,13,3097,1691,4250,3251,0]Aj[463,13,464,3640,3211,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,13,3097,3641,3212,0,0]Al[3096,14,3097,1381,3042,0,0]Ae[1095,7,1683,0,0,0,0]Ae[1095,7,1779,0,0,0,0]Ac[463,4,464,0,0,0,0]Ag[463,15,464,0,4087,0,0]Al[3096,15,3097,1784,4088,0,0]Al[1985,15,1986,1986,4089,0,0]210Ag[463,5,1693,1694,0,0,0]Ae[3096,5,1694,0,0,0,0]Al[3096,15,3097,1756,4461,0,0]Al[3096,15,3097,1356,3224,0,0]Af[463,5,464,1094,0,0,0]Al[3096,15,3097,3641,1174,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Aj[463,15,464,4036,4356,0,0]Af[463,6,464,3097,0,0,0]Ae[3096,6,3097,0,0,0,0]Ag[463,19,464,0,1426,0,0]Al[3096,19,3097,1366,1427,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]Ai[3096,14,3039,0,4102,0,0]Al[1985,14,1986,1986,2279,0,0]Aa[519,3,0,0,0,0,0]Ai[3096,14,3097,0,4361,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,14,3097,1381,3042,0,0]Al[3096,14,3097,1356,2253,0,0]Al[463,13,464,3640,2274,487,0]Al[463,13,464,2336,2263,487,0]Ak[463,13,464,1094,503,487,0]Al[463,13,464,1094,4363,487,0]Al[463,13,464,4036,3237,487,0]Al[463,13,464,4041,3243,487,0]An[3096,13,3097,1120,1407,487,0]Am[1195,13,1196,1196,134,494,0]An[1195,13,1196,1196,3954,494,0]An[1195,13,1196,1196,3930,494,0]An[1195,13,1380,1380,3962,494,0]An[1195,13,1380,1380,1189,494,0]An[1195,13,1380,1380,4358,494,0]Ak[519,13,520,520,3931,494,0]An[3968,13,3969,3969,5010,494,0]Al[463,13,464,3640,4476,494,0]Al[463,13,464,3640,2274,494,0]Ai[463,13,464,0,4210,494,0]Al[463,13,464,4144,4916,494,0]Al[463,13,464,1094,2275,494,0]Al[463,13,464,1094,4644,494,0]Al[463,13,464,3640,3209,494,0]Al[463,13,464,3640,3211,494,0]Al[463,13,464,3640,1843,494,0]Al[463,13,464,3640,1419,494,0]Al[463,13,464,3640,3004,494,0]Al[463,13,464,3640,2247,494,0]Al[463,13,464,3640,4108,494,0]Al[463,13,464,3640,4113,494,0]Al[463,13,464,3640,4922,494,0]Al[463,13,464,3640,4753,494,0]0Al[463,13,464,2304,2259,494,0]Al[463,13,464,2304,4219,494,0]Al[463,13,464,2304,1399,494,0]Al[463,13,464,4144,1418,494,0]Al[463,13,464,4144,3231,494,0]Al[463,13,464,4144,4853,494,0]Al[463,13,464,2336,2263,494,0]Al[463,13,464,2336,3240,494,0]Al[463,13,464,2336,4337,494,0]Ak[463,13,464,1094,503,494,0]Al[463,13,464,1094,4363,494,0]Al[463,13,464,4036,3237,494,0]Al[463,13,464,4036,4860,494,0]Al[463,13,464,4036,4356,494,0]0Al[463,13,464,4036,3044,494,0]Df[463,13,464,4036,3044,494,0,\"impl-From%3CResetError%3E-for-ReadError\"]Dk[463,13,464,4036,3044,494,0,\"impl-From%3CConnectionError%3E-for-ReadError\"]Al[463,13,464,4036,3239,494,0]0Al[463,13,464,4036,4355,494,0]0Al[463,13,464,1393,4123,494,0]Al[463,13,464,1137,3957,494,0]Al[463,13,464,4041,3243,494,0]Dl[463,13,464,4041,3257,494,0,\"impl-From%3CConnectionError%3E-for-WriteError\"]Di[463,13,464,4041,3257,494,0,\"impl-From%3CClosedStream%3E-for-WriteError\"]Di[463,13,464,4041,3257,494,0,\"impl-From%3CStoppedError%3E-for-WriteError\"]Al[463,13,464,4041,3257,494,0]Al[463,13,464,4041,4122,494,0]0Al[463,13,464,4041,1857,494,0]Ai[463,13,464,0,3234,494,0]Ai[463,13,464,0,4249,494,0]Ai[463,13,464,0,4468,494,0]Ai[463,13,464,0,4100,494,0]Ai[463,13,464,0,4346,494,0]Ai[463,13,464,0,1443,494,0]Ch[463,13,464,0,1443,494,0,\"impl-From%3Cu8%3E-for-VarInt\"]Ci[463,13,464,0,1443,494,0,\"impl-From%3Cu16%3E-for-VarInt\"]Ci[463,13,464,0,1443,494,0,\"impl-From%3Cu32%3E-for-VarInt\"]Cn[463,13,464,0,1443,494,0,\"impl-From%3CStreamId%3E-for-VarInt\"]Dh[463,13,464,0,1443,494,0,\"impl-From%3CTransportErrorCode%3E-for-VarInt\"]Ai[463,13,464,0,4919,494,0]Ai[463,13,464,0,1152,494,0]Ai[463,13,464,0,1426,494,0]0Ai[463,13,464,0,2294,494,0]Ai[463,13,464,0,3217,494,0]Ai[463,13,464,0,3041,494,0]Ai[463,13,464,0,4452,494,0]Ai[463,13,464,0,1867,494,0]Ai[463,13,464,0,4073,494,0]Dd[463,13,464,0,4448,494,0,\"impl-From%3CClose%3E-for-ConnectionError\"]Ai[463,13,464,0,4448,494,0]Dm[463,13,464,0,4448,494,0,\"impl-From%3CTransportError%3E-for-ConnectionError\"]Dj[463,13,464,0,4448,494,0,\"impl-From%3CCloseReason%3E-for-ConnectionError\"]Ai[463,13,464,0,4462,494,0]Ai[463,13,464,0,4471,494,0]Ai[463,13,464,0,4777,494,0]Ai[463,13,464,0,4792,494,0]Ai[463,13,464,0,3943,494,0]0Ai[463,13,464,0,4332,494,0]Ai[463,13,464,0,4116,494,0]Ai[463,13,464,0,4976,494,0]Ai[463,13,464,0,4067,494,0]Dj[463,13,464,0,3933,494,0,\"impl-From%3CTryFromIntError%3E-for-ConfigError\"]Ai[463,13,464,0,3933,494,0]Do[463,13,464,0,3933,494,0,\"impl-From%3CVarIntBoundsExceeded%3E-for-ConfigError\"]Ai[463,13,464,0,3025,494,0]Ai[463,13,464,0,4445,494,0]0Ai[463,13,464,0,4646,494,0]Ai[463,13,464,0,4079,494,0]0Ai[463,13,464,0,4082,494,0]Ai[463,13,464,0,4087,494,0]Ai[463,13,464,0,4812,494,0]0Ai[463,13,464,0,3220,494,0]Ai[463,13,464,0,4679,494,0]Ah[463,13,464,0,510,494,0]Ah[463,13,464,0,126,494,0]Ai[463,13,464,0,2281,494,0]0Ai[463,13,464,0,2291,494,0]Ai[463,13,3635,0,120,494,0]Aj[463,13,3635,0,3012,494,0]Aj[463,13,3635,0,1156,494,0]Aj[463,13,3635,0,3938,494,0]Aj[463,13,3635,0,1840,494,0]Aj[463,13,3635,0,4237,494,0]Aj[463,13,3635,0,4741,494,0]Aj[463,13,1693,0,1835,494,0]Ai[463,13,1693,0,497,494,0]Aj[463,13,1693,0,5068,494,0]Aj[463,13,1693,0,3936,494,0]0Aj[463,13,1693,0,4816,494,0]Aj[463,13,1773,0,3252,494,0]Aj[463,13,1773,0,4221,494,0]Dd[463,13,1773,0,1169,494,0,\"impl-From%3CInvalidMessage%3E-for-Error\"]Do[463,13,1773,0,1169,494,0,\"impl-From%3CEncryptedClientHelloError%3E-for-Error\"]Df[463,13,1773,0,1169,494,0,\"impl-From%3CInconsistentKeys%3E-for-Error\"]Dd[463,13,1773,0,1169,494,0,\"impl-From%3CPeerMisbehaved%3E-for-Error\"]Df[463,13,1773,0,1169,494,0,\"impl-From%3CPeerIncompatible%3E-for-Error\"]Df[463,13,1773,0,1169,494,0,\"impl-From%3CCertificateError%3E-for-Error\"]Dm[463,13,1773,0,1169,494,0,\"impl-From%3CCertRevocationListError%3E-for-Error\"]Aj[463,13,1773,0,1169,494,0]D`[463,13,1773,0,1169,494,0,\"impl-From%3COtherError%3E-for-Error\"]Do[463,13,1773,0,1169,494,0,\"impl-From%3CUnsupportedOperationError%3E-for-Error\"]De[463,13,1773,0,1169,494,0,\"impl-From%3CGetRandomFailed%3E-for-Error\"]De[463,13,1773,0,1169,494,0,\"impl-From%3CSystemTimeError%3E-for-Error\"]Aj[463,13,1773,0,4675,494,0]Aj[463,13,1773,0,4914,494,0]Aj[463,13,1773,0,4677,494,0]Am[2358,13,2359,2359,125,494,0]An[2358,13,2359,2359,2250,494,0]An[3096,13,3097,4481,4211,494,0]An[3096,13,3097,3070,3018,494,0]An[3096,13,3097,1120,1407,494,0]An[3096,13,3097,2002,1861,494,0]An[3096,13,3097,2002,3238,494,0]An[3096,13,3097,2002,3244,494,0]An[3096,13,3097,3641,3212,494,0]An[3096,13,3097,1116,3235,494,0]An[3096,13,3097,1691,4250,494,0]An[3096,13,3097,2305,2260,494,0]An[3096,13,3097,2305,4217,494,0]An[3096,13,3097,2305,4655,494,0]An[3096,13,3097,2305,4228,494,0]An[3096,13,3097,1756,5128,494,0]An[3096,13,3097,4258,5098,494,0]An[3096,13,3097,1392,4469,494,0]An[3096,13,3097,1392,4101,494,0]An[3096,13,3097,1392,4347,494,0]An[3096,13,3097,1810,1444,494,0]Cn[3096,13,3097,1810,1444,494,0,\"impl-From%3Cu16%3E-for-VarInt\"]Cn[3096,13,3097,1810,1444,494,0,\"impl-From%3Cu32%3E-for-VarInt\"]Cm[3096,13,3097,1810,1444,494,0,\"impl-From%3Cu8%3E-for-VarInt\"]Dc[3096,13,3097,1810,1444,494,0,\"impl-From%3CStreamId%3E-for-VarInt\"]Co[3096,13,3097,1810,1444,494,0,\"impl-From%3CCode%3E-for-VarInt\"]An[3096,13,3097,1810,4920,494,0]An[3096,13,3097,3061,1153,494,0]An[3096,13,3097,3070,4754,494,0]An[3096,13,3097,1366,1427,494,0]0An[3096,13,3097,1366,4112,494,0]An[3096,13,3097,1366,3233,494,0]An[3096,13,3097,1366,3040,494,0]An[3096,13,3097,1366,4752,494,0]An[3096,13,3097,1366,4808,494,0]An[3096,13,3097,1366,3207,494,0]An[3096,13,3097,1381,2295,494,0]An[3096,13,3097,1381,3218,494,0]An[3096,13,3097,1381,3042,494,0]An[3096,13,3097,1381,4453,494,0]An[3096,13,3097,1120,3045,494,0]An[3096,13,3097,1120,4245,494,0]An[3096,13,3097,1125,1868,494,0]An[3096,13,3097,1125,3258,494,0]An[3096,13,3097,1125,3942,494,0]An[3096,13,3097,2002,3961,494,0]An[3096,13,3097,2002,4357,494,0]An[3096,13,3097,2002,4077,494,0]An[3096,13,3097,3641,4449,494,0]0An[3096,13,3097,3641,3038,494,0]An[3096,13,3097,3641,4323,494,0]An[3096,13,3097,3641,5005,494,0]An[3096,13,3097,3641,1174,494,0]0An[3096,13,3097,1116,4463,494,0]An[3096,13,3097,3194,4472,494,0]An[3096,13,3097,3194,4778,494,0]An[3096,13,3097,3194,4793,494,0]An[3096,13,3097,3194,3944,494,0]0An[3096,13,3097,1691,4333,494,0]An[3096,13,3097,1691,4118,494,0]An[3096,13,3097,1691,4977,494,0]An[3096,13,3097,1691,4069,494,0]Do[3096,13,3097,1691,3934,494,0,\"impl-From%3CTryFromIntError%3E-for-ConfigError\"]Ed[3096,13,3097,1691,3934,494,0,\"impl-From%3CVarIntBoundsExceeded%3E-for-ConfigError\"]An[3096,13,3097,1691,3934,494,0]An[3096,13,3097,1356,3026,494,0]An[3096,13,3097,1356,4338,494,0]An[3096,13,3097,1356,3224,494,0]An[3096,13,3097,1356,3247,494,0]An[3096,13,3097,1356,4084,494,0]An[3096,13,3097,1356,4447,494,0]0An[3096,13,3097,1356,4648,494,0]An[3096,13,3097,1356,2253,494,0]An[3096,13,3097,2305,4652,494,0]An[3096,13,3097,2305,2264,494,0]An[3096,13,3097,2305,4080,494,0]0An[3096,13,3097,2305,3928,494,0]An[3096,13,3097,2305,3241,494,0]An[3096,13,3097,1756,4240,494,0]An[3096,13,3097,1756,4461,494,0]An[3096,13,3097,1756,5009,494,0]An[3096,13,3097,1756,2267,494,0]An[3096,13,3097,1756,4750,494,0]0An[3096,13,3097,1784,4451,494,0]An[3096,13,3097,1784,4218,494,0]An[3096,13,3097,1784,4083,494,0]An[3096,13,3097,1784,4088,494,0]Ak[3096,13,3097,0,4361,494,0]0Ak[3096,13,3097,0,4813,494,0]0An[3096,13,3097,4258,3221,494,0]An[3096,13,3097,4258,5103,494,0]An[3096,13,3097,4848,4680,494,0]Am[3096,13,3097,3097,511,494,0]Am[3096,13,3097,3097,127,494,0]An[3096,13,3097,3097,2282,494,0]0An[3096,13,3097,3097,2292,494,0]An[3096,13,3097,3097,3024,494,0]An[3096,13,1689,1689,4251,494,0]An[3096,13,4961,4961,4859,494,0]An[3096,13,4961,4961,1171,494,0]0An[3096,13,1694,1694,1836,494,0]Am[3096,13,1694,1694,498,494,0]An[3096,13,1694,1694,5069,494,0]An[3096,13,1694,1694,3937,494,0]0An[3096,13,1694,1694,4819,494,0]An[3096,13,1774,1774,3253,494,0]An[3096,13,1774,1774,4222,494,0]Dg[3096,13,1774,0,1170,494,0,\"impl-From%3CCertificateError%3E-for-Error\"]E`[3096,13,1774,0,1170,494,0,\"impl-From%3CEncryptedClientHelloError%3E-for-Error\"]Da[3096,13,1774,0,1170,494,0,\"impl-From%3COtherError%3E-for-Error\"]De[3096,13,1774,0,1170,494,0,\"impl-From%3CInvalidMessage%3E-for-Error\"]Dg[3096,13,1774,0,1170,494,0,\"impl-From%3CInconsistentKeys%3E-for-Error\"]Df[3096,13,1774,0,1170,494,0,\"impl-From%3CGetRandomFailed%3E-for-Error\"]E`[3096,13,1774,0,1170,494,0,\"impl-From%3CUnsupportedOperationError%3E-for-Error\"]De[3096,13,1774,0,1170,494,0,\"impl-From%3CPeerMisbehaved%3E-for-Error\"]Dg[3096,13,1774,0,1170,494,0,\"impl-From%3CPeerIncompatible%3E-for-Error\"]Df[3096,13,1774,0,1170,494,0,\"impl-From%3CSystemTimeError%3E-for-Error\"]Ak[3096,13,1774,0,1170,494,0]Dn[3096,13,1774,0,1170,494,0,\"impl-From%3CCertRevocationListError%3E-for-Error\"]An[3096,13,1774,1774,4676,494,0]An[3096,13,1774,1774,4915,494,0]An[3096,13,1774,1774,4678,494,0]Al[3096,13,3636,148,121,494,0]Am[3096,13,3636,148,3013,494,0]An[3096,13,3636,1352,1157,494,0]An[3096,13,3636,1352,3939,494,0]An[3096,13,3636,2358,1841,494,0]An[3096,13,3636,2358,4238,494,0]An[3096,13,3636,3636,4742,494,0]An[3096,13,4710,4710,1172,494,0]An[3096,13,4710,4710,1175,494,0]An[1985,13,1986,1986,3256,494,0]0Am[1985,13,1986,416,4362,494,0]An[1985,13,1986,1986,2279,494,0]An[1985,13,1986,1986,2293,494,0]An[1985,13,1986,1986,4089,494,0]An[1095,13,1096,1096,3015,494,0]An[1095,13,1096,1096,4852,494,0]Am[1095,13,1683,1683,135,494,0]An[1095,13,1382,1382,1190,494,0]An[1095,13,1382,1382,3963,494,0]An[1095,13,1382,1382,4457,494,0]An[1095,13,4178,4178,5054,494,0]An[1095,13,4178,4178,5055,494,0]Am[1095,13,1779,1779,136,494,0]Ai[463,13,464,0,1443,495,0]Ai[463,13,464,0,1426,495,0]Ai[463,13,464,0,3943,495,0]Ai[463,13,464,0,4082,495,0]Ah[463,13,464,0,510,495,0]Ah[463,13,464,0,126,495,0]Ai[463,13,464,0,2281,495,0]An[3096,13,3097,1810,1444,495,0]An[3096,13,3097,3070,4754,495,0]An[3096,13,3097,1366,1427,495,0]An[3096,13,3097,1120,3045,495,0]An[3096,13,3097,1120,4245,495,0]An[3096,13,3097,1125,3258,495,0]An[3096,13,3097,3194,3944,495,0]An[3096,13,3097,2305,4652,495,0]An[3096,13,3097,1756,4750,495,0]An[3096,13,3097,1784,4083,495,0]Am[3096,13,3097,3097,511,495,0]Am[3096,13,3097,3097,127,495,0]An[3096,13,3097,3097,2282,495,0]An[3096,13,3097,3097,3024,495,0]Am[1195,13,1196,1196,134,496,0]An[1195,13,1196,1196,3954,496,0]An[1195,13,1196,1196,3930,496,0]An[1195,13,1380,1380,3962,496,0]An[1195,13,1380,1380,1189,496,0]An[1195,13,1380,1380,4358,496,0]Ak[519,13,520,520,3931,496,0]An[3968,13,3969,3969,5010,496,0]Al[463,13,464,3640,4476,496,0]Al[463,13,464,3640,2274,496,0]Ai[463,13,464,0,4210,496,0]Al[463,13,464,4144,4916,496,0]Al[463,13,464,1094,2275,496,0]Al[463,13,464,1094,4644,496,0]Al[463,13,464,3640,3209,496,0]Al[463,13,464,3640,3211,496,0]Al[463,13,464,3640,1843,496,0]Al[463,13,464,3640,1419,496,0]Al[463,13,464,3640,3004,496,0]Al[463,13,464,3640,2247,496,0]Al[463,13,464,3640,4108,496,0]Al[463,13,464,3640,4113,496,0]Al[463,13,464,3640,4922,496,0]Al[463,13,464,3640,4753,496,0]Al[463,13,464,2304,2259,496,0]Al[463,13,464,2304,4219,496,0]Al[463,13,464,2304,1399,496,0]Al[463,13,464,4144,1418,496,0]Al[463,13,464,4144,3231,496,0]Al[463,13,464,4144,4853,496,0]Al[463,13,464,2336,2263,496,0]Al[463,13,464,2336,3240,496,0]Al[463,13,464,2336,4337,496,0]Ak[463,13,464,1094,503,496,0]Al[463,13,464,1094,4363,496,0]Al[463,13,464,4036,3237,496,0]Al[463,13,464,4036,4860,496,0]Al[463,13,464,4036,4356,496,0]Al[463,13,464,4036,3044,496,0]Al[463,13,464,4036,3239,496,0]Al[463,13,464,4036,4355,496,0]Al[463,13,464,1393,4123,496,0]Al[463,13,464,1137,3957,496,0]Al[463,13,464,4041,3243,496,0]Al[463,13,464,4041,3257,496,0]Al[463,13,464,4041,4122,496,0]Al[463,13,464,4041,1857,496,0]Ai[463,13,464,0,3234,496,0]Ai[463,13,464,0,4249,496,0]Ai[463,13,464,0,4468,496,0]Ai[463,13,464,0,4100,496,0]Ai[463,13,464,0,4346,496,0]Ai[463,13,464,0,1443,496,0]Ai[463,13,464,0,4919,496,0]Ai[463,13,464,0,1152,496,0]Ai[463,13,464,0,1426,496,0]Ai[463,13,464,0,2294,496,0]Ai[463,13,464,0,3217,496,0]Ai[463,13,464,0,3041,496,0]Ai[463,13,464,0,4452,496,0]Ai[463,13,464,0,1867,496,0]Ai[463,13,464,0,4073,496,0]Ai[463,13,464,0,4448,496,0]Ai[463,13,464,0,4462,496,0]Ai[463,13,464,0,4471,496,0]Ai[463,13,464,0,4777,496,0]Ai[463,13,464,0,4792,496,0]Ai[463,13,464,0,3943,496,0]Ai[463,13,464,0,4332,496,0]Ai[463,13,464,0,4116,496,0]Ai[463,13,464,0,4976,496,0]Ai[463,13,464,0,4067,496,0]Ai[463,13,464,0,3933,496,0]Ai[463,13,464,0,3025,496,0]Ai[463,13,464,0,4445,496,0]Ai[463,13,464,0,4646,496,0]Ai[463,13,464,0,4079,496,0]Ai[463,13,464,0,4082,496,0]Ai[463,13,464,0,4087,496,0]Ai[463,13,464,0,4812,496,0]Ai[463,13,464,0,3220,496,0]Ai[463,13,464,0,4679,496,0]Ah[463,13,464,0,510,496,0]Ah[463,13,464,0,126,496,0]Ai[463,13,464,0,2281,496,0]Ai[463,13,464,0,2291,496,0]Ai[463,13,3635,0,120,496,0]Aj[463,13,3635,0,3012,496,0]Aj[463,13,3635,0,1156,496,0]Aj[463,13,3635,0,3938,496,0]Aj[463,13,3635,0,1840,496,0]Aj[463,13,3635,0,4237,496,0]Aj[463,13,3635,0,4741,496,0]Aj[463,13,1693,0,1835,496,0]Ai[463,13,1693,0,497,496,0]Aj[463,13,1693,0,5068,496,0]Aj[463,13,1693,0,3936,496,0]Aj[463,13,1693,0,4816,496,0]Aj[463,13,1773,0,3252,496,0]Aj[463,13,1773,0,4221,496,0]Aj[463,13,1773,0,1169,496,0]Aj[463,13,1773,0,4675,496,0]Aj[463,13,1773,0,4914,496,0]Aj[463,13,1773,0,4677,496,0]Am[2358,13,2359,2359,125,496,0]An[2358,13,2359,2359,2250,496,0]An[3096,13,3097,4481,4211,496,0]An[3096,13,3097,3070,3018,496,0]An[3096,13,3097,1120,1407,496,0]An[3096,13,3097,2002,1861,496,0]An[3096,13,3097,2002,3238,496,0]An[3096,13,3097,2002,3244,496,0]An[3096,13,3097,3641,3212,496,0]An[3096,13,3097,1116,3235,496,0]An[3096,13,3097,1691,4250,496,0]An[3096,13,3097,2305,2260,496,0]An[3096,13,3097,2305,4217,496,0]An[3096,13,3097,2305,4655,496,0]An[3096,13,3097,2305,4228,496,0]An[3096,13,3097,1756,5128,496,0]An[3096,13,3097,4258,5098,496,0]An[3096,13,3097,1392,4469,496,0]An[3096,13,3097,1392,4101,496,0]An[3096,13,3097,1392,4347,496,0]An[3096,13,3097,1810,1444,496,0]An[3096,13,3097,1810,4920,496,0]An[3096,13,3097,3061,1153,496,0]An[3096,13,3097,3070,4754,496,0]An[3096,13,3097,1366,1427,496,0]An[3096,13,3097,1366,4112,496,0]An[3096,13,3097,1366,3233,496,0]An[3096,13,3097,1366,3040,496,0]An[3096,13,3097,1366,4752,496,0]An[3096,13,3097,1366,4808,496,0]An[3096,13,3097,1366,3207,496,0]An[3096,13,3097,1381,2295,496,0]An[3096,13,3097,1381,3218,496,0]An[3096,13,3097,1381,3042,496,0]An[3096,13,3097,1381,4453,496,0]An[3096,13,3097,1120,3045,496,0]An[3096,13,3097,1120,4245,496,0]An[3096,13,3097,1125,1868,496,0]An[3096,13,3097,1125,3258,496,0]An[3096,13,3097,1125,3942,496,0]An[3096,13,3097,2002,3961,496,0]An[3096,13,3097,2002,4357,496,0]An[3096,13,3097,2002,4077,496,0]An[3096,13,3097,3641,4449,496,0]An[3096,13,3097,3641,3038,496,0]An[3096,13,3097,3641,4323,496,0]An[3096,13,3097,3641,5005,496,0]An[3096,13,3097,3641,1174,496,0]An[3096,13,3097,1116,4463,496,0]An[3096,13,3097,3194,4472,496,0]An[3096,13,3097,3194,4778,496,0]An[3096,13,3097,3194,4793,496,0]An[3096,13,3097,3194,3944,496,0]An[3096,13,3097,1691,4333,496,0]An[3096,13,3097,1691,4118,496,0]An[3096,13,3097,1691,4977,496,0]An[3096,13,3097,1691,4069,496,0]An[3096,13,3097,1691,3934,496,0]An[3096,13,3097,1356,3026,496,0]An[3096,13,3097,1356,4338,496,0]An[3096,13,3097,1356,3224,496,0]An[3096,13,3097,1356,3247,496,0]An[3096,13,3097,1356,4084,496,0]An[3096,13,3097,1356,4447,496,0]An[3096,13,3097,1356,4648,496,0]An[3096,13,3097,1356,2253,496,0]An[3096,13,3097,2305,4652,496,0]An[3096,13,3097,2305,2264,496,0]An[3096,13,3097,2305,4080,496,0]An[3096,13,3097,2305,3928,496,0]An[3096,13,3097,2305,3241,496,0]An[3096,13,3097,1756,4240,496,0]An[3096,13,3097,1756,4461,496,0]An[3096,13,3097,1756,5009,496,0]An[3096,13,3097,1756,2267,496,0]An[3096,13,3097,1756,4750,496,0]An[3096,13,3097,1784,4451,496,0]An[3096,13,3097,1784,4218,496,0]An[3096,13,3097,1784,4083,496,0]An[3096,13,3097,1784,4088,496,0]Ak[3096,13,3097,0,4361,496,0]Ak[3096,13,3097,0,4813,496,0]An[3096,13,3097,4258,3221,496,0]An[3096,13,3097,4258,5103,496,0]An[3096,13,3097,4848,4680,496,0]Am[3096,13,3097,3097,511,496,0]Am[3096,13,3097,3097,127,496,0]An[3096,13,3097,3097,2282,496,0]An[3096,13,3097,3097,2292,496,0]An[3096,13,3097,3097,3024,496,0]An[3096,13,1689,1689,4251,496,0]An[3096,13,4961,4961,4859,496,0]An[3096,13,4961,4961,1171,496,0]An[3096,13,1694,1694,1836,496,0]Am[3096,13,1694,1694,498,496,0]An[3096,13,1694,1694,5069,496,0]An[3096,13,1694,1694,3937,496,0]An[3096,13,1694,1694,4819,496,0]An[3096,13,1774,1774,3253,496,0]An[3096,13,1774,1774,4222,496,0]Ak[3096,13,1774,0,1170,496,0]An[3096,13,1774,1774,4676,496,0]An[3096,13,1774,1774,4915,496,0]An[3096,13,1774,1774,4678,496,0]Al[3096,13,3636,148,121,496,0]Am[3096,13,3636,148,3013,496,0]An[3096,13,3636,1352,1157,496,0]An[3096,13,3636,1352,3939,496,0]An[3096,13,3636,2358,1841,496,0]An[3096,13,3636,2358,4238,496,0]An[3096,13,3636,3636,4742,496,0]An[3096,13,4710,4710,1172,496,0]An[3096,13,4710,4710,1175,496,0]An[1985,13,1986,1986,3256,496,0]Am[1985,13,1986,416,4362,496,0]An[1985,13,1986,1986,2279,496,0]An[1985,13,1986,1986,2293,496,0]An[1985,13,1986,1986,4089,496,0]An[1095,13,1096,1096,3015,496,0]An[1095,13,1096,1096,4852,496,0]Am[1095,13,1683,1683,135,496,0]An[1095,13,1382,1382,1190,496,0]An[1095,13,1382,1382,3963,496,0]An[1095,13,1382,1382,4457,496,0]An[1095,13,4178,4178,5054,496,0]An[1095,13,4178,4178,5055,496,0]Am[1095,13,1779,1779,136,496,0]Ac[519,7,520,0,0,0,0]Ae[3968,7,3969,0,0,0,0]Ae[4261,7,4262,0,0,0,0]Ae[2358,7,2359,0,0,0,0]Ae[4772,7,4773,0,0,0,0]Al[3096,13,3097,1120,1407,0,0]Ao[3096,13,3097,2305,4228,2265,0]Ah[463,12,1693,0,4743,0,0]Al[3096,13,3097,2002,1861,0,0]Al[3096,12,1694,1694,4744,0,0]Aj[463,13,464,3640,3211,0,0]Ab[1095,3,0,0,0,0,0]Ai[463,13,464,1094,503,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,13,3097,3641,3212,0,0]Al[3096,14,3097,1381,3218,0,0]Aj[463,12,464,1994,3200,0,0]Am[463,13,464,3640,4476,1415,0]Am[463,13,464,3640,2274,1415,0]Am[463,13,464,1094,2275,1415,0]Am[463,13,464,3640,3209,1415,0]Am[463,13,464,3640,1843,1415,0]Am[463,13,464,3640,1419,1415,0]Am[463,13,464,3640,3004,1415,0]Am[463,13,464,3640,2247,1415,0]Am[463,13,464,3640,4108,1415,0]Am[463,13,464,3640,4113,1415,0]Am[463,13,464,2304,1399,1415,0]Am[463,13,464,2336,4337,1415,0]Am[463,13,464,4041,1857,1415,0]?Aj[463,13,464,4036,3237,0,0]Al[3096,13,3097,2002,3238,0,0]Al[3096,13,4961,4961,4859,0,0]Al[3096,13,3097,3070,3018,0,0]Ak[1985,13,1986,416,4362,0,0]Ah[463,12,1693,0,4743,0,0]Al[3096,12,1694,1694,4744,0,0]32Ag[463,13,464,0,4976,0,0]Al[3096,13,3097,1691,4977,0,0]Aj[463,13,464,3640,3211,0,0]Al[3096,13,3097,3641,3212,0,0]Ah[463,12,1693,0,1831,0,0]Al[3096,12,1694,1694,1832,0,0]Al[1195,14,1380,1380,4358,0,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Ai[3096,14,4460,0,1186,0,0]Aj[463,13,464,4036,3237,0,0]Aj[463,13,464,4036,4860,0,0]Al[3096,13,3097,2002,3238,0,0]Ag[463,12,464,0,3254,0,0]Aj[463,13,464,0,4346,3254,0]Aj[463,13,464,0,4679,3254,0]Al[3096,12,3097,1392,3255,0,0]Ao[3096,13,3097,1392,4347,3255,0]Ao[3096,13,3097,4848,4680,3255,0]Af[463,5,464,3061,0,0,0]Ah[3096,5,3097,3061,0,0,0]Ag[463,5,3635,1352,0,0,0]Ah[3096,5,3636,1352,0,0,0]Al[1095,15,1096,1096,4852,0,0]Ag[463,6,1773,1355,0,0,0]Ah[3096,6,1774,1355,0,0,0]Ae[3096,6,4961,0,0,0,0]Ae[3096,6,4710,0,0,0,0]Ah[3096,6,3097,3641,0,0,0]1Al[3096,15,3097,1356,3224,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Aj[463,15,464,4036,3044,0,0]Ag[463,15,464,0,4448,0,0]Al[3096,15,3097,1120,3045,0,0]Al[3096,15,3097,3641,4449,0,0]Al[3096,15,3097,1756,4461,0,0]0Ae[1195,5,1380,0,0,0,0]Ae[1095,5,1382,0,0,0,0]Al[1195,15,1196,1196,3954,0,0]Al[3096,13,3097,2305,4655,0,0]Ab[1195,3,0,0,0,0,0]Ah[463,12,3635,0,4739,0,0]Ak[463,13,3635,0,3012,4739,0]Ak[463,13,3635,0,3938,4739,0]Ak[463,13,3635,0,4237,4739,0]Al[3096,12,3636,3636,4740,0,0]An[3096,13,3636,148,3013,4740,0]Ao[3096,13,3636,1352,3939,4740,0]Ao[3096,13,3636,2358,4238,4740,0]Al[1095,13,1096,1096,4852,0,0]Ag[463,14,464,0,1152,0,0]Ag[463,14,464,0,2294,0,0]Ag[463,14,464,0,1867,0,0]Al[3096,14,3097,3061,1153,0,0]Al[3096,14,3097,1381,2295,0,0]Al[3096,14,3097,1125,1868,0,0]Al[3096,14,3097,2305,3928,0,0]An[1195,13,1196,1196,134,1154,0]Ao[1195,13,1196,1196,3954,1154,0]Ao[1195,13,1196,1196,3930,1154,0]Am[463,13,464,3640,3211,1154,0]Am[463,13,464,3640,4922,1154,0]Am[463,13,464,3640,4753,1154,0]Am[463,13,464,2304,2259,1154,0]Am[463,13,464,2304,4219,1154,0]Am[463,13,464,4144,1418,1154,0]Al[463,13,464,1094,503,1154,0]Am[463,13,464,1094,4363,1154,0]Am[463,13,464,4036,4356,1154,0]Am[463,13,464,4036,3044,1154,0]Am[463,13,464,4036,3239,1154,0]Am[463,13,464,4036,4355,1154,0]Am[463,13,464,4041,3257,1154,0]Am[463,13,464,4041,4122,1154,0]Aj[463,13,464,0,1443,1154,0]Aj[463,13,464,0,4919,1154,0]Aj[463,13,464,0,1426,1154,0]Aj[463,13,464,0,2294,1154,0]Aj[463,13,464,0,3217,1154,0]Aj[463,13,464,0,3041,1154,0]Aj[463,13,464,0,4452,1154,0]Aj[463,13,464,0,1867,1154,0]Aj[463,13,464,0,4073,1154,0]Aj[463,13,464,0,4448,1154,0]Aj[463,13,464,0,4471,1154,0]Aj[463,13,464,0,4777,1154,0]Aj[463,13,464,0,4792,1154,0]Aj[463,13,464,0,3943,1154,0]Aj[463,13,464,0,4332,1154,0]Aj[463,13,464,0,4116,1154,0]Aj[463,13,464,0,4976,1154,0]Aj[463,13,464,0,4067,1154,0]Aj[463,13,464,0,3933,1154,0]Aj[463,13,464,0,3025,1154,0]Aj[463,13,464,0,4445,1154,0]Aj[463,13,464,0,4646,1154,0]Aj[463,13,464,0,4079,1154,0]Aj[463,13,464,0,4082,1154,0]Aj[463,13,464,0,4087,1154,0]Aj[463,13,464,0,4812,1154,0]Aj[463,13,464,0,3220,1154,0]Ai[463,13,464,0,510,1154,0]Ai[463,13,464,0,126,1154,0]Aj[463,13,464,0,2281,1154,0]Aj[463,13,3635,0,120,1154,0]Ak[463,13,3635,0,3012,1154,0]Ak[463,13,3635,0,1156,1154,0]Ak[463,13,3635,0,3938,1154,0]Ak[463,13,3635,0,1840,1154,0]Ak[463,13,3635,0,4237,1154,0]Ak[463,13,1773,0,1169,1154,0]Ak[463,13,1773,0,4675,1154,0]Ak[463,13,1773,0,4914,1154,0]Ak[463,13,1773,0,4677,1154,0]Ao[3096,13,3097,1810,1444,1154,0]Ao[3096,13,3097,1810,4920,1154,0]Ao[3096,13,3097,3070,4754,1154,0]Ao[3096,13,3097,1366,1427,1154,0]Ao[3096,13,3097,1366,4112,1154,0]Ao[3096,13,3097,1366,3233,1154,0]Ao[3096,13,3097,1366,3040,1154,0]Ao[3096,13,3097,1366,4752,1154,0]Ao[3096,13,3097,1366,4808,1154,0]Ao[3096,13,3097,1366,3207,1154,0]Ao[3096,13,3097,1381,2295,1154,0]Ao[3096,13,3097,1381,3218,1154,0]Ao[3096,13,3097,1381,3042,1154,0]Ao[3096,13,3097,1381,4453,1154,0]Ao[3096,13,3097,1120,3045,1154,0]Ao[3096,13,3097,1120,4245,1154,0]Ao[3096,13,3097,1125,1868,1154,0]Ao[3096,13,3097,1125,3258,1154,0]Ao[3096,13,3097,1125,3942,1154,0]Ao[3096,13,3097,2002,4357,1154,0]Ao[3096,13,3097,2002,4077,1154,0]Ao[3096,13,3097,3641,4449,1154,0]Ao[3096,13,3097,3641,3038,1154,0]Ao[3096,13,3097,3641,4323,1154,0]Ao[3096,13,3097,3641,5005,1154,0]Ao[3096,13,3097,3194,4472,1154,0]Ao[3096,13,3097,3194,4778,1154,0]Ao[3096,13,3097,3194,4793,1154,0]Ao[3096,13,3097,3194,3944,1154,0]Ao[3096,13,3097,1691,4333,1154,0]Ao[3096,13,3097,1691,4118,1154,0]Ao[3096,13,3097,1691,4977,1154,0]Ao[3096,13,3097,1691,4069,1154,0]Ao[3096,13,3097,1691,3934,1154,0]Ao[3096,13,3097,1356,3026,1154,0]Ao[3096,13,3097,1356,3224,1154,0]Ao[3096,13,3097,1356,3247,1154,0]Ao[3096,13,3097,1356,4084,1154,0]Ao[3096,13,3097,1356,4447,1154,0]Ao[3096,13,3097,1356,4648,1154,0]Ao[3096,13,3097,1356,2253,1154,0]Ao[3096,13,3097,2305,4652,1154,0]Ao[3096,13,3097,2305,4080,1154,0]Ao[3096,13,3097,1756,4461,1154,0]Ao[3096,13,3097,1756,5009,1154,0]Ao[3096,13,3097,1756,2267,1154,0]Ao[3096,13,3097,1756,4750,1154,0]Ao[3096,13,3097,1784,4083,1154,0]Ao[3096,13,3097,1784,4088,1154,0]Al[3096,13,3097,0,4361,1154,0]Al[3096,13,3097,0,4813,1154,0]Ao[3096,13,3097,4258,3221,1154,0]Ao[3096,13,3097,4258,5103,1154,0]An[3096,13,3097,3097,511,1154,0]An[3096,13,3097,3097,127,1154,0]Ao[3096,13,3097,3097,2282,1154,0]Ao[3096,13,3097,3097,3024,1154,0]Ao[3096,13,1689,1689,4251,1154,0]Ao[3096,13,4961,4961,4859,1154,0]Ao[3096,13,4961,4961,1171,1154,0]Al[3096,13,1774,0,1170,1154,0]Ao[3096,13,1774,1774,4676,1154,0]Ao[3096,13,1774,1774,4915,1154,0]Ao[3096,13,1774,1774,4678,1154,0]Am[3096,13,3636,148,121,1154,0]An[3096,13,3636,148,3013,1154,0]Ao[3096,13,3636,1352,1157,1154,0]Ao[3096,13,3636,1352,3939,1154,0]Ao[3096,13,3636,2358,1841,1154,0]Ao[3096,13,3636,2358,4238,1154,0]Ao[3096,13,4710,4710,1175,1154,0]Ao[1985,13,1986,1986,2279,1154,0]Ao[1985,13,1986,1986,2293,1154,0]Ao[1985,13,1986,1986,4089,1154,0]Ao[1095,13,1096,1096,4852,1154,0]Ao[1095,13,1382,1382,4457,1154,0]Ao[1095,13,4178,4178,5054,1154,0]Ao[1095,13,4178,4178,5055,1154,0]Aj[463,13,464,3640,3211,0,0]Aj[463,13,464,2304,2259,0,0]Ai[463,13,464,1094,503,0,0]Al[3096,13,3097,3641,3212,0,0]Aj[463,13,464,0,4082,1160,0]Ao[3096,13,3097,1784,4083,1160,0]Ai[3096,14,3097,0,4361,0,0]Ag[463,13,464,0,2281,0,0]Al[3096,13,3097,3097,2282,0,0]Ag[463,13,464,0,4087,0,0]Al[3096,13,3097,1784,4088,0,0]Ah[463,14,1693,0,1835,0,0]Al[3096,14,1694,1694,1836,0,0]Al[3096,12,3097,1756,4783,0,0]Ao[3096,13,3097,1756,5128,4783,0];Al[1195,13,1380,1380,1189,0,0]Ai[519,13,520,520,3931,0,0]Al[1095,13,1382,1382,1190,0,0]Aj[463,12,464,1994,3200,0,0]Aj[463,13,464,4041,3243,0,0]Al[3096,13,3097,2002,3244,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2260,0,0]Aj[463,12,464,1994,1852,0,0]Am[463,13,464,1393,4123,1852,0]Am[463,13,464,1137,3957,1852,0]Ae[1195,2,1196,0,0,0,0]Ak[1195,14,1196,1196,134,0,0]Aj[463,13,464,3640,3211,0,0]Aj[463,13,464,2304,2259,0,0]Ai[463,13,464,1094,503,0,0]Al[3096,13,3097,3641,3212,0,0]Ae[1095,2,1096,0,0,0,0]Ag[463,13,464,0,3234,0,0]Al[3096,13,3097,1116,3235,0,0]?>Al[3096,13,4961,4961,4859,0,0]Af[463,5,464,2304,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Al[1195,15,1196,1196,3930,0,0]0Al[3096,15,3097,1366,3233,0,0]Ah[3096,5,3097,1120,0,0,0]Af[463,15,464,0,510,0,0]Al[2358,15,2359,2359,2250,0,0]Ak[3096,15,3097,3097,511,0,0]Al[3096,15,4710,4710,1172,0,0]87Af[463,5,464,4144,0,0,0]Af[463,5,464,3640,0,0,0]Al[3096,15,3097,1366,3040,0,0]Al[3096,15,3097,2002,3961,0,0]Af[463,5,464,1366,0,0,0]Ah[3096,5,3097,1366,0,0,0]Ae[3096,8,1689,0,0,0,0]:98?Al[3096,15,3097,3641,1174,0,0]?Af[463,5,464,1810,0,0,0]Ah[3096,5,3097,1810,0,0,0]Aj[463,13,464,2304,2259,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2002,1861,0,0]Al[3096,13,3097,2305,2260,0,0]An[1195,13,1196,1196,134,1405,0]Ao[1195,13,1196,1196,3954,1405,0]Ao[1195,13,1196,1196,3930,1405,0]Ao[1195,13,1380,1380,3962,1405,0]Ao[1195,13,1380,1380,1189,1405,0]Ao[1195,13,1380,1380,4358,1405,0]Al[519,13,520,520,3931,1405,0]Ao[3968,13,3969,3969,5010,1405,0]Am[463,13,464,3640,4476,1405,0]Am[463,13,464,3640,2274,1405,0]Aj[463,13,464,0,4210,1405,0]Am[463,13,464,4144,4916,1405,0]Am[463,13,464,1094,2275,1405,0]Am[463,13,464,1094,4644,1405,0]Am[463,13,464,3640,3209,1405,0]Am[463,13,464,3640,3211,1405,0]Am[463,13,464,3640,1843,1405,0]Am[463,13,464,3640,1419,1405,0]Am[463,13,464,3640,3004,1405,0]Am[463,13,464,3640,2247,1405,0]Am[463,13,464,3640,4108,1405,0]Am[463,13,464,3640,4113,1405,0]Am[463,13,464,3640,4922,1405,0]Am[463,13,464,3640,4753,1405,0]Am[463,13,464,2304,2259,1405,0]Am[463,13,464,2304,4219,1405,0]Am[463,13,464,2304,1399,1405,0]Am[463,13,464,4144,1418,1405,0]Am[463,13,464,4144,3231,1405,0]Am[463,13,464,4144,4853,1405,0]Am[463,13,464,2336,2263,1405,0]Am[463,13,464,2336,3240,1405,0]Am[463,13,464,2336,4337,1405,0]Al[463,13,464,1094,503,1405,0]Am[463,13,464,1094,4363,1405,0]Am[463,13,464,4036,3237,1405,0]Am[463,13,464,4036,4860,1405,0]Am[463,13,464,4036,4356,1405,0]Am[463,13,464,4036,3044,1405,0]Am[463,13,464,4036,3239,1405,0]Am[463,13,464,4036,4355,1405,0]Am[463,13,464,1393,4123,1405,0]Am[463,13,464,1137,3957,1405,0]Am[463,13,464,4041,3243,1405,0]Am[463,13,464,4041,3257,1405,0]Am[463,13,464,4041,4122,1405,0]Am[463,13,464,4041,1857,1405,0]Aj[463,13,464,0,3234,1405,0]Aj[463,13,464,0,4249,1405,0]Aj[463,13,464,0,4468,1405,0]Aj[463,13,464,0,4100,1405,0]Aj[463,13,464,0,4346,1405,0]Aj[463,13,464,0,1443,1405,0]Aj[463,13,464,0,4919,1405,0]Aj[463,13,464,0,1152,1405,0]Aj[463,13,464,0,1426,1405,0]Aj[463,13,464,0,2294,1405,0]Aj[463,13,464,0,3217,1405,0]Aj[463,13,464,0,3041,1405,0]Aj[463,13,464,0,4452,1405,0]Aj[463,13,464,0,1867,1405,0]Aj[463,13,464,0,4073,1405,0]Aj[463,13,464,0,4448,1405,0]Aj[463,13,464,0,4462,1405,0]Aj[463,13,464,0,4471,1405,0]Aj[463,13,464,0,4777,1405,0]Aj[463,13,464,0,4792,1405,0]Aj[463,13,464,0,3943,1405,0]Aj[463,13,464,0,4332,1405,0]Aj[463,13,464,0,4116,1405,0]Aj[463,13,464,0,4976,1405,0]Aj[463,13,464,0,4067,1405,0]Aj[463,13,464,0,3933,1405,0]Aj[463,13,464,0,3025,1405,0]Aj[463,13,464,0,4445,1405,0]Aj[463,13,464,0,4646,1405,0]Aj[463,13,464,0,4079,1405,0]Aj[463,13,464,0,4082,1405,0]Aj[463,13,464,0,4087,1405,0]Aj[463,13,464,0,4812,1405,0]Aj[463,13,464,0,3220,1405,0]Aj[463,13,464,0,4679,1405,0]Ai[463,13,464,0,510,1405,0]Ai[463,13,464,0,126,1405,0]Aj[463,13,464,0,2281,1405,0]Aj[463,13,464,0,2291,1405,0]Aj[463,13,3635,0,120,1405,0]Ak[463,13,3635,0,3012,1405,0]Ak[463,13,3635,0,1156,1405,0]Ak[463,13,3635,0,3938,1405,0]Ak[463,13,3635,0,1840,1405,0]Ak[463,13,3635,0,4237,1405,0]Ak[463,13,3635,0,4741,1405,0]Ak[463,13,1693,0,1835,1405,0]Aj[463,13,1693,0,497,1405,0]Ak[463,13,1693,0,5068,1405,0]Ak[463,13,1693,0,3936,1405,0]Ak[463,13,1693,0,4816,1405,0]Ak[463,13,1773,0,3252,1405,0]Ak[463,13,1773,0,4221,1405,0]Ak[463,13,1773,0,1169,1405,0]Ak[463,13,1773,0,4675,1405,0]Ak[463,13,1773,0,4914,1405,0]Ak[463,13,1773,0,4677,1405,0]An[2358,13,2359,2359,125,1405,0]Ao[2358,13,2359,2359,2250,1405,0]Ao[3096,13,3097,4481,4211,1405,0]Ao[3096,13,3097,3070,3018,1405,0]Ao[3096,13,3097,1120,1407,1405,0]Ao[3096,13,3097,2002,1861,1405,0]Ao[3096,13,3097,2002,3238,1405,0]Ao[3096,13,3097,2002,3244,1405,0]Ao[3096,13,3097,3641,3212,1405,0]Ao[3096,13,3097,1116,3235,1405,0]Ao[3096,13,3097,1691,4250,1405,0]Ao[3096,13,3097,2305,2260,1405,0]Ao[3096,13,3097,2305,4217,1405,0]Ao[3096,13,3097,2305,4655,1405,0]Ao[3096,13,3097,2305,4228,1405,0]Ao[3096,13,3097,1756,5128,1405,0]Ao[3096,13,3097,4258,5098,1405,0]Ao[3096,13,3097,1392,4469,1405,0]Ao[3096,13,3097,1392,4101,1405,0]Ao[3096,13,3097,1392,4347,1405,0]Ao[3096,13,3097,1810,1444,1405,0]Ao[3096,13,3097,1810,4920,1405,0]Ao[3096,13,3097,3061,1153,1405,0]Ao[3096,13,3097,3070,4754,1405,0]Ao[3096,13,3097,1366,1427,1405,0]Ao[3096,13,3097,1366,4112,1405,0]Ao[3096,13,3097,1366,3233,1405,0]Ao[3096,13,3097,1366,3040,1405,0]Ao[3096,13,3097,1366,4752,1405,0]Ao[3096,13,3097,1366,4808,1405,0]Ao[3096,13,3097,1366,3207,1405,0]Ao[3096,13,3097,1381,2295,1405,0]Ao[3096,13,3097,1381,3218,1405,0]Ao[3096,13,3097,1381,3042,1405,0]Ao[3096,13,3097,1381,4453,1405,0]Ao[3096,13,3097,1120,3045,1405,0]Ao[3096,13,3097,1120,4245,1405,0]Ao[3096,13,3097,1125,1868,1405,0]Ao[3096,13,3097,1125,3258,1405,0]Ao[3096,13,3097,1125,3942,1405,0]Ao[3096,13,3097,2002,3961,1405,0]Ao[3096,13,3097,2002,4357,1405,0]Ao[3096,13,3097,2002,4077,1405,0]Ao[3096,13,3097,3641,4449,1405,0]Ao[3096,13,3097,3641,3038,1405,0]Ao[3096,13,3097,3641,4323,1405,0]Ao[3096,13,3097,3641,5005,1405,0]Ao[3096,13,3097,3641,1174,1405,0]Ao[3096,13,3097,1116,4463,1405,0]Ao[3096,13,3097,3194,4472,1405,0]Ao[3096,13,3097,3194,4778,1405,0]Ao[3096,13,3097,3194,4793,1405,0]Ao[3096,13,3097,3194,3944,1405,0]Ao[3096,13,3097,1691,4333,1405,0]Ao[3096,13,3097,1691,4118,1405,0]Ao[3096,13,3097,1691,4977,1405,0]Ao[3096,13,3097,1691,4069,1405,0]Ao[3096,13,3097,1691,3934,1405,0]Ao[3096,13,3097,1356,3026,1405,0]Ao[3096,13,3097,1356,4338,1405,0]Ao[3096,13,3097,1356,3224,1405,0]Ao[3096,13,3097,1356,3247,1405,0]Ao[3096,13,3097,1356,4084,1405,0]Ao[3096,13,3097,1356,4447,1405,0]Ao[3096,13,3097,1356,4648,1405,0]Ao[3096,13,3097,1356,2253,1405,0]Ao[3096,13,3097,2305,4652,1405,0]Ao[3096,13,3097,2305,2264,1405,0]Ao[3096,13,3097,2305,4080,1405,0]Ao[3096,13,3097,2305,3928,1405,0]Ao[3096,13,3097,2305,3241,1405,0]Ao[3096,13,3097,1756,4240,1405,0]Ao[3096,13,3097,1756,4461,1405,0]Ao[3096,13,3097,1756,5009,1405,0]Ao[3096,13,3097,1756,2267,1405,0]Ao[3096,13,3097,1756,4750,1405,0]Ao[3096,13,3097,1784,4451,1405,0]Ao[3096,13,3097,1784,4218,1405,0]Ao[3096,13,3097,1784,4083,1405,0]Ao[3096,13,3097,1784,4088,1405,0]Al[3096,13,3097,0,4361,1405,0]Al[3096,13,3097,0,4813,1405,0]Ao[3096,13,3097,4258,3221,1405,0]Ao[3096,13,3097,4258,5103,1405,0]Ao[3096,13,3097,4848,4680,1405,0]An[3096,13,3097,3097,511,1405,0]An[3096,13,3097,3097,127,1405,0]Ao[3096,13,3097,3097,2282,1405,0]Ao[3096,13,3097,3097,2292,1405,0]Ao[3096,13,3097,3097,3024,1405,0]Ao[3096,13,1689,1689,4251,1405,0]Ao[3096,13,4961,4961,4859,1405,0]Ao[3096,13,4961,4961,1171,1405,0]Ao[3096,13,1694,1694,1836,1405,0]An[3096,13,1694,1694,498,1405,0]Ao[3096,13,1694,1694,5069,1405,0]Ao[3096,13,1694,1694,3937,1405,0]Ao[3096,13,1694,1694,4819,1405,0]Ao[3096,13,1774,1774,3253,1405,0]Ao[3096,13,1774,1774,4222,1405,0]Al[3096,13,1774,0,1170,1405,0]Ao[3096,13,1774,1774,4676,1405,0]Ao[3096,13,1774,1774,4915,1405,0]Ao[3096,13,1774,1774,4678,1405,0]Am[3096,13,3636,148,121,1405,0]An[3096,13,3636,148,3013,1405,0]Ao[3096,13,3636,1352,1157,1405,0]Ao[3096,13,3636,1352,3939,1405,0]Ao[3096,13,3636,2358,1841,1405,0]Ao[3096,13,3636,2358,4238,1405,0]Ao[3096,13,3636,3636,4742,1405,0]Ao[3096,13,4710,4710,1172,1405,0]Ao[3096,13,4710,4710,1175,1405,0]Ao[1985,13,1986,1986,3256,1405,0]An[1985,13,1986,416,4362,1405,0]Ao[1985,13,1986,1986,2279,1405,0]Ao[1985,13,1986,1986,2293,1405,0]Ao[1985,13,1986,1986,4089,1405,0]Ao[1095,13,1096,1096,3015,1405,0]Ao[1095,13,1096,1096,4852,1405,0]An[1095,13,1683,1683,135,1405,0]Ao[1095,13,1382,1382,1190,1405,0]Ao[1095,13,1382,1382,3963,1405,0]Ao[1095,13,1382,1382,4457,1405,0]Ao[1095,13,4178,4178,5054,1405,0]Ao[1095,13,4178,4178,5055,1405,0]An[1095,13,1779,1779,136,1405,0]Ag[463,14,464,0,1867,0,0]Al[3096,14,3097,1125,1868,0,0]Ak[1195,14,1196,1196,134,0,0]Ac[519,7,520,0,0,0,0]Aj[463,13,464,2304,2259,0,0]Ae[1095,2,1096,0,0,0,0]Ae[4772,7,4773,0,0,0,0]Aj[463,13,464,3640,3211,0,0]Ae[3096,2,3097,0,0,0,0]Al[3096,13,3097,2305,2260,0,0]Af[463,2,464,3097,0,0,0]Ag[463,13,464,0,4812,0,0]Ag[463,14,464,0,3217,0,0]Ag[463,14,464,0,4116,0,0]5Ai[3096,13,3097,0,4813,0,0]Al[3096,14,3097,1381,3218,0,0]Al[3096,14,3097,1691,4118,0,0]Ai[3096,14,3097,0,4361,0,0]Aj[463,13,464,0,1443,3019,0]Aj[463,13,464,0,1426,3019,0]Aj[463,13,464,0,3025,3019,0]Aj[463,13,464,0,4812,3019,0]Aj[463,13,464,0,2281,3019,0]Ao[3096,13,3097,1810,1444,3019,0]Ao[3096,13,3097,1366,1427,3019,0]Ao[3096,13,3097,1356,3026,3019,0]Ao[3096,13,3097,1356,3224,3019,0]Al[3096,13,3097,1756,4461,0,0]Al[3096,13,3097,0,4813,3019,0]Ao[3096,13,3097,3097,2282,3019,0]Al[3096,12,1689,1689,3019,0,0]Al[1985,14,1986,1986,2279,0,0]Aj[463,13,464,0,1443,3022,0]Aj[463,13,464,0,1426,3022,0]Aj[463,13,464,0,3025,3022,0]Aj[463,13,464,0,4812,3022,0]Aj[463,13,464,0,2281,3022,0]Ao[3096,13,3097,1810,1444,3022,0]Ao[3096,13,3097,1366,1427,3022,0]Ao[3096,13,3097,1356,3026,3022,0]Ao[3096,13,3097,1356,3224,3022,0]Ao[3096,13,3097,1356,2253,3022,0]Al[3096,13,3097,0,4813,3022,0]Ao[3096,13,3097,3097,2282,3022,0]Al[3096,12,1689,1689,3022,0,0]Aj[463,13,464,4041,3243,0,0]Al[3096,13,3097,2002,3244,0,0]Al[1095,13,1382,1382,3963,0,0]Al[3096,13,3097,2305,2260,0,0]Ag[463,14,1693,0,497,0,0]Ak[3096,14,1694,1694,498,0,0]Aj[463,13,464,2336,2263,0,0]3Ag[463,12,464,0,3254,0,0]Aj[463,13,464,0,4346,3254,0]Aj[463,13,464,0,4679,3254,0]Al[3096,12,3097,1392,3255,0,0]Ao[3096,13,3097,1392,4347,3255,0]Ao[3096,13,3097,4848,4680,3255,0]Al[1095,14,1096,1096,3015,0,0]Ag[463,14,464,0,1152,0,0]Al[3096,14,3097,3061,1153,0,0]Ah[463,13,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,13,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Ag[463,14,1693,0,497,0,0]Ak[3096,14,1694,1694,498,0,0]Ai[3096,14,4460,0,4684,0,0]Ag[463,14,464,0,4445,0,0]Ag[463,14,464,0,4646,0,0]Al[3096,14,3097,1356,4447,0,0]Al[3096,14,3097,1356,4648,0,0]Ai[3096,14,3097,0,4361,0,0]Ai[3096,14,1173,0,4325,0,0]Ai[3096,14,3039,0,3002,0,0]Aj[463,13,464,2304,2259,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2260,0,0]Ah[463,14,1693,0,1835,0,0]Al[3096,13,3097,3097,3024,0,0]Al[3096,14,1694,1694,1836,0,0]Ac[463,4,464,0,0,0,0]Ag[463,2,1693,1694,0,0,0]Ae[3096,4,3097,0,0,0,0]Ae[3096,2,1694,0,0,0,0]Ac[519,7,520,0,0,0,0]:Ae[1095,2,1096,0,0,0,0]Ae[4772,7,4773,0,0,0,0]Am[463,13,464,3640,4753,1162,0]Am[463,13,464,4036,4356,1162,0]Am[463,13,464,4036,3044,1162,0]Am[463,13,464,4036,3239,1162,0]Am[463,13,464,4036,4355,1162,0]Am[463,13,464,4041,3257,1162,0]Am[463,13,464,4041,4122,1162,0]Aj[463,13,464,0,4448,1162,0]Ao[3096,13,3097,3641,4449,1162,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Al[1985,14,1986,1986,2293,0,0]Ai[463,13,464,1094,503,0,0]Ai[3096,14,3039,0,4109,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]Al[1985,14,1986,1986,2279,0,0]Ag[463,14,464,0,3041,0,0]Ag[463,14,464,0,4452,0,0]Al[3096,14,3097,1381,3042,0,0]Al[3096,14,3097,1381,4453,0,0]3210Ah[463,12,1693,0,1831,0,0]Al[3096,12,1694,1694,1832,0,0]Ah[463,12,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,12,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Al[3096,15,3097,3070,4754,0,0]Al[3096,15,3097,1120,3045,0,0]Al[3096,15,3097,1125,3258,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Ah[463,10,1693,1694,0,0,0]Af[3096,10,1694,0,0,0,0]Al[3096,15,3097,1756,4461,0,0]Ag[463,5,1693,1694,0,0,0]Ae[3096,5,1694,0,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Ag[463,5,3635,2358,0,0,0]Ah[3096,5,3636,2358,0,0,0]Al[1095,15,1096,1096,4852,0,0]Af[463,5,464,3640,0,0,0]5454Ag[463,10,464,1994,0,0,0];:Aj[463,15,464,4041,3257,0,0]Af[463,5,464,4041,0,0,0]Al[3096,15,3097,1125,3258,0,0]Al[3096,15,3097,1125,3942,0,0]Al[3096,15,3097,2002,3961,0,0]Ah[3096,5,3097,2002,0,0,0]Aj[463,15,464,4036,4356,0,0]Al[3096,15,3097,1356,3224,0,0]Af[463,5,464,1125,0,0,0]Ah[3096,5,3097,1125,0,0,0]Al[3096,15,3097,1756,2267,0,0]Ag[463,12,464,0,4967,0,0]Al[3096,12,3097,4258,4968,0,0]Ao[3096,13,3097,4258,5098,4968,0]Ao[3096,13,3097,4258,5103,4968,0]Ak[1195,14,1196,1196,134,0,0]An[1195,13,1196,1196,134,4324,0]An[2358,13,2359,2359,125,4324,0]Ak[2358,14,2359,2359,125,0,0]Ao[1095,13,1096,1096,3015,4324,0]An[1095,13,1683,1683,135,4324,0]An[1095,13,1779,1779,136,4324,0]Aj[463,13,464,0,1443,3208,0]Aj[463,13,464,0,1426,3208,0]Aj[463,13,464,0,3943,3208,0]Aj[463,13,464,0,4082,3208,0]Ai[463,13,464,0,510,3208,0]Ai[463,13,464,0,126,3208,0]Aj[463,13,464,0,2281,3208,0]Ao[3096,13,3097,1810,1444,3208,0]Ao[3096,13,3097,3070,4754,3208,0]Ao[3096,13,3097,1366,1427,3208,0]Ao[3096,13,3097,1120,3045,3208,0]Ao[3096,13,3097,1120,4245,3208,0]Ao[3096,13,3097,1125,3258,3208,0]Ao[3096,13,3097,3194,3944,3208,0]Ao[3096,13,3097,2305,4652,3208,0]Ao[3096,13,3097,1756,4750,3208,0]Ao[3096,13,3097,1784,4083,3208,0]An[3096,13,3097,3097,511,3208,0]An[3096,13,3097,3097,127,3208,0]Ao[3096,13,3097,3097,2282,3208,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,2305,2260,0,0]Aj[463,13,464,2336,2263,0,0]Ah[463,12,1693,0,3035,0,0]Ah[463,12,1693,0,3028,0,0]Al[3096,13,3097,2305,2264,0,0]Al[3096,12,1694,1694,3036,0,0]Al[3096,12,1694,1694,3029,0,0]Ao[1195,13,1380,1380,3962,1826,0]Ao[1195,13,1380,1380,1189,1826,0]Al[519,13,520,520,3931,1826,0]Aj[463,13,464,0,4210,1826,0]Am[463,13,464,2304,4219,1826,0]Aj[463,13,464,0,1443,1826,0]Aj[463,13,464,0,1426,1826,0]Aj[463,13,464,0,2294,1826,0]Aj[463,13,464,0,3217,1826,0]Aj[463,13,464,0,3041,1826,0]Aj[463,13,464,0,4452,1826,0]Aj[463,13,464,0,1867,1826,0]Aj[463,13,464,0,4073,1826,0]Aj[463,13,464,0,4471,1826,0]Aj[463,13,464,0,4777,1826,0]Aj[463,13,464,0,4792,1826,0]Aj[463,13,464,0,3943,1826,0]Aj[463,13,464,0,4332,1826,0]Aj[463,13,464,0,4976,1826,0]Aj[463,13,464,0,4679,1826,0]Ak[463,13,3635,0,3012,1826,0]Ak[463,13,3635,0,3938,1826,0]Ak[463,13,3635,0,4237,1826,0]Ak[463,13,3635,0,4741,1826,0]Ao[3096,13,3097,4481,4211,1826,0]Ao[3096,13,3097,4258,5098,1826,0]Ao[3096,13,3097,1810,1444,1826,0]Ao[3096,13,3097,1366,1427,1826,0]Ao[3096,13,3097,1366,3233,1826,0]Ao[3096,13,3097,1366,3207,1826,0]Ao[3096,13,3097,1381,2295,1826,0]Ao[3096,13,3097,1381,3218,1826,0]Ao[3096,13,3097,1381,3042,1826,0]Ao[3096,13,3097,1381,4453,1826,0]Ao[3096,13,3097,1125,1868,1826,0]Ao[3096,13,3097,2002,4357,1826,0]Ao[3096,13,3097,2002,4077,1826,0]Ao[3096,13,3097,3194,4472,1826,0]Ao[3096,13,3097,3194,4778,1826,0]Ao[3096,13,3097,3194,4793,1826,0]Ao[3096,13,3097,3194,3944,1826,0]Ao[3096,13,3097,1691,4333,1826,0]Ao[3096,13,3097,1691,4977,1826,0]Ao[3096,13,3097,4258,5103,1826,0]Ao[3096,13,3097,4848,4680,1826,0]An[3096,13,3636,148,3013,1826,0]Ao[3096,13,3636,1352,3939,1826,0]Ao[3096,13,3636,2358,4238,1826,0]Ao[3096,13,3636,3636,4742,1826,0]Ao[1985,13,1986,1986,2279,1826,0]Ao[1095,13,1382,1382,1190,1826,0]Ao[1095,13,1382,1382,4457,1826,0]Al[3096,13,3097,1784,4218,0,0]Al[3096,13,3097,1756,4240,0,0]Al[3096,13,3097,1756,4461,0,0]Al[3096,14,3097,1756,5009,0,0]Ai[3096,14,4749,0,4814,0,0]Ah[3096,14,4460,0,499,0,0]Ai[3096,14,4460,0,1184,0,0]Ai[3096,14,4460,0,1186,0,0]Ai[3096,14,4460,0,4684,0,0]Ah[463,12,1693,0,3035,0,0]Ah[463,12,1693,0,3028,0,0]Al[3096,12,1694,1694,3036,0,0]Al[3096,12,1694,1694,3029,0,0]Aj[463,13,464,4036,3237,0,0]Aj[463,13,464,4036,4860,0,0]Ah[463,13,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,13,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Ag[463,13,464,0,4471,0,0]Al[3096,13,3097,3194,4472,0,0]Ab[1985,3,0,0,0,0,0]:965Aj[463,13,464,3640,3211,0,0]Aj[463,13,464,1094,2275,0,0]Al[3096,14,3097,1756,5009,0,0]Ai[3096,14,4749,0,4814,0,0]Ah[3096,14,4460,0,499,0,0]Ai[3096,14,4460,0,1184,0,0]Ai[3096,14,4460,0,4684,0,0]Aj[463,13,464,4041,3243,0,0]Al[3096,13,3097,2002,3244,0,0]Ak[1195,14,1196,1196,134,0,0]Al[1195,14,1380,1380,1189,0,0]Al[3096,13,3097,3641,3212,0,0]Ah[463,12,1693,0,3035,0,0]Al[3096,12,1694,1694,3036,0,0]Am[1195,13,1196,1196,134,118,0]An[1195,13,1196,1196,3954,118,0]An[1195,13,1196,1196,3930,118,0]An[1195,13,1380,1380,3962,118,0]An[1195,13,1380,1380,1189,118,0]An[1195,13,1380,1380,4358,118,0]Ak[519,13,520,520,3931,118,0]An[3968,13,3969,3969,5010,118,0]Al[463,13,464,3640,4476,118,0]Al[463,13,464,3640,2274,118,0]Ai[463,13,464,0,4210,118,0]Al[463,13,464,4144,4916,118,0]Al[463,13,464,1094,2275,118,0]Al[463,13,464,1094,4644,118,0]Al[463,13,464,3640,3209,118,0]Al[463,13,464,3640,3211,118,0]Al[463,13,464,3640,1843,118,0]Al[463,13,464,3640,1419,118,0]Al[463,13,464,3640,3004,118,0]Al[463,13,464,3640,2247,118,0]Al[463,13,464,3640,4108,118,0]Al[463,13,464,3640,4113,118,0]Al[463,13,464,3640,4922,118,0]Al[463,13,464,3640,4753,118,0]Al[463,13,464,2304,2259,118,0]Al[463,13,464,2304,4219,118,0]Al[463,13,464,2304,1399,118,0]Al[463,13,464,4144,1418,118,0]Al[463,13,464,4144,3231,118,0]Al[463,13,464,4144,4853,118,0]Al[463,13,464,2336,2263,118,0]Al[463,13,464,2336,3240,118,0]Al[463,13,464,2336,4337,118,0]Ak[463,13,464,1094,503,118,0]Al[463,13,464,1094,4363,118,0]Al[463,13,464,4036,3237,118,0]Al[463,13,464,4036,4860,118,0]Al[463,13,464,4036,4356,118,0]Al[463,13,464,4036,3044,118,0]Al[463,13,464,4036,3239,118,0]Al[463,13,464,4036,4355,118,0]Al[463,13,464,1393,4123,118,0]Al[463,13,464,1137,3957,118,0]Al[463,13,464,4041,3243,118,0]Al[463,13,464,4041,3257,118,0]Al[463,13,464,4041,4122,118,0]Al[463,13,464,4041,1857,118,0]Ai[463,13,464,0,3234,118,0]Ai[463,13,464,0,4249,118,0]Ai[463,13,464,0,4468,118,0]Ai[463,13,464,0,4100,118,0]Ai[463,13,464,0,4346,118,0]Ai[463,13,464,0,1443,118,0]Ai[463,13,464,0,4919,118,0]Ai[463,13,464,0,1152,118,0]Ai[463,13,464,0,1426,118,0]Ai[463,13,464,0,2294,118,0]Ai[463,13,464,0,3217,118,0]Ai[463,13,464,0,3041,118,0]Ai[463,13,464,0,4452,118,0]Ai[463,13,464,0,1867,118,0]Ai[463,13,464,0,4073,118,0]Ai[463,13,464,0,4448,118,0]Ai[463,13,464,0,4462,118,0]Ai[463,13,464,0,4471,118,0]Ai[463,13,464,0,4777,118,0]Ai[463,13,464,0,4792,118,0]Ai[463,13,464,0,3943,118,0]Ai[463,13,464,0,4332,118,0]Ai[463,13,464,0,4116,118,0]Ai[463,13,464,0,4976,118,0]Ai[463,13,464,0,4067,118,0]Ai[463,13,464,0,3933,118,0]Ai[463,13,464,0,3025,118,0]Ai[463,13,464,0,4445,118,0]Ai[463,13,464,0,4646,118,0]Ai[463,13,464,0,4079,118,0]Ai[463,13,464,0,4082,118,0]Ai[463,13,464,0,4087,118,0]Ai[463,13,464,0,4812,118,0]Ai[463,13,464,0,3220,118,0]Ai[463,13,464,0,4679,118,0]Ah[463,13,464,0,510,118,0]Ah[463,13,464,0,126,118,0]Ai[463,13,464,0,2281,118,0]Ai[463,13,464,0,2291,118,0]Ai[463,13,3635,0,120,118,0]Aj[463,13,3635,0,3012,118,0]Aj[463,13,3635,0,1156,118,0]Aj[463,13,3635,0,3938,118,0]Aj[463,13,3635,0,1840,118,0]Aj[463,13,3635,0,4237,118,0]Aj[463,13,3635,0,4741,118,0]Aj[463,13,1693,0,1835,118,0]Ai[463,13,1693,0,497,118,0]Aj[463,13,1693,0,5068,118,0]Aj[463,13,1693,0,3936,118,0]Aj[463,13,1693,0,4816,118,0]Aj[463,13,1773,0,3252,118,0]Aj[463,13,1773,0,4221,118,0]Aj[463,13,1773,0,1169,118,0]Aj[463,13,1773,0,4675,118,0]Aj[463,13,1773,0,4914,118,0]Aj[463,13,1773,0,4677,118,0]Am[2358,13,2359,2359,125,118,0]An[2358,13,2359,2359,2250,118,0]An[3096,13,3097,4481,4211,118,0]An[3096,13,3097,3070,3018,118,0]An[3096,13,3097,1120,1407,118,0]An[3096,13,3097,2002,1861,118,0]An[3096,13,3097,2002,3238,118,0]An[3096,13,3097,2002,3244,118,0]An[3096,13,3097,3641,3212,118,0]An[3096,13,3097,1116,3235,118,0]An[3096,13,3097,1691,4250,118,0]An[3096,13,3097,2305,2260,118,0]An[3096,13,3097,2305,4217,118,0]An[3096,13,3097,2305,4655,118,0]An[3096,13,3097,2305,4228,118,0]An[3096,13,3097,1756,5128,118,0]An[3096,13,3097,4258,5098,118,0]An[3096,13,3097,1392,4469,118,0]An[3096,13,3097,1392,4101,118,0]An[3096,13,3097,1392,4347,118,0]An[3096,13,3097,1810,1444,118,0]An[3096,13,3097,1810,4920,118,0]An[3096,13,3097,3061,1153,118,0]An[3096,13,3097,3070,4754,118,0]An[3096,13,3097,1366,1427,118,0]An[3096,13,3097,1366,4112,118,0]An[3096,13,3097,1366,3233,118,0]An[3096,13,3097,1366,3040,118,0]An[3096,13,3097,1366,4752,118,0]An[3096,13,3097,1366,4808,118,0]An[3096,13,3097,1366,3207,118,0]An[3096,13,3097,1381,2295,118,0]An[3096,13,3097,1381,3218,118,0]An[3096,13,3097,1381,3042,118,0]An[3096,13,3097,1381,4453,118,0]An[3096,13,3097,1120,3045,118,0]An[3096,13,3097,1120,4245,118,0]An[3096,13,3097,1125,1868,118,0]An[3096,13,3097,1125,3258,118,0]An[3096,13,3097,1125,3942,118,0]An[3096,13,3097,2002,3961,118,0]An[3096,13,3097,2002,4357,118,0]An[3096,13,3097,2002,4077,118,0]An[3096,13,3097,3641,4449,118,0]An[3096,13,3097,3641,3038,118,0]An[3096,13,3097,3641,4323,118,0]An[3096,13,3097,3641,5005,118,0]An[3096,13,3097,3641,1174,118,0]An[3096,13,3097,1116,4463,118,0]An[3096,13,3097,3194,4472,118,0]An[3096,13,3097,3194,4778,118,0]An[3096,13,3097,3194,4793,118,0]An[3096,13,3097,3194,3944,118,0]An[3096,13,3097,1691,4333,118,0]An[3096,13,3097,1691,4118,118,0]An[3096,13,3097,1691,4977,118,0]An[3096,13,3097,1691,4069,118,0]An[3096,13,3097,1691,3934,118,0]An[3096,13,3097,1356,3026,118,0]An[3096,13,3097,1356,4338,118,0]An[3096,13,3097,1356,3224,118,0]An[3096,13,3097,1356,3247,118,0]An[3096,13,3097,1356,4084,118,0]An[3096,13,3097,1356,4447,118,0]An[3096,13,3097,1356,4648,118,0]An[3096,13,3097,1356,2253,118,0]An[3096,13,3097,2305,4652,118,0]An[3096,13,3097,2305,2264,118,0]An[3096,13,3097,2305,4080,118,0]An[3096,13,3097,2305,3928,118,0]An[3096,13,3097,2305,3241,118,0]An[3096,13,3097,1756,4240,118,0]An[3096,13,3097,1756,4461,118,0]An[3096,13,3097,1756,5009,118,0]An[3096,13,3097,1756,2267,118,0]An[3096,13,3097,1756,4750,118,0]An[3096,13,3097,1784,4451,118,0]An[3096,13,3097,1784,4218,118,0]An[3096,13,3097,1784,4083,118,0]An[3096,13,3097,1784,4088,118,0]Ak[3096,13,3097,0,4361,118,0]Ak[3096,13,3097,0,4813,118,0]An[3096,13,3097,4258,3221,118,0]An[3096,13,3097,4258,5103,118,0]An[3096,13,3097,4848,4680,118,0]Am[3096,13,3097,3097,511,118,0]Am[3096,13,3097,3097,127,118,0]An[3096,13,3097,3097,2282,118,0]An[3096,13,3097,3097,2292,118,0]An[3096,13,3097,3097,3024,118,0]An[3096,13,1689,1689,4251,118,0]An[3096,13,4961,4961,4859,118,0]An[3096,13,4961,4961,1171,118,0]An[3096,13,1694,1694,1836,118,0]Am[3096,13,1694,1694,498,118,0]An[3096,13,1694,1694,5069,118,0]An[3096,13,1694,1694,3937,118,0]An[3096,13,1694,1694,4819,118,0]An[3096,13,1774,1774,3253,118,0]An[3096,13,1774,1774,4222,118,0]Ak[3096,13,1774,0,1170,118,0]An[3096,13,1774,1774,4676,118,0]An[3096,13,1774,1774,4915,118,0]An[3096,13,1774,1774,4678,118,0]Al[3096,13,3636,148,121,118,0]Am[3096,13,3636,148,3013,118,0]An[3096,13,3636,1352,1157,118,0]An[3096,13,3636,1352,3939,118,0]An[3096,13,3636,2358,1841,118,0]An[3096,13,3636,2358,4238,118,0]An[3096,13,3636,3636,4742,118,0]An[3096,13,4710,4710,1172,118,0]An[3096,13,4710,4710,1175,118,0]An[1985,13,1986,1986,3256,118,0]Am[1985,13,1986,416,4362,118,0]An[1985,13,1986,1986,2279,118,0]An[1985,13,1986,1986,2293,118,0]An[1985,13,1986,1986,4089,118,0]An[1095,13,1096,1096,3015,118,0]An[1095,13,1096,1096,4852,118,0]Am[1095,13,1683,1683,135,118,0]An[1095,13,1382,1382,1190,118,0]An[1095,13,1382,1382,3963,118,0]An[1095,13,1382,1382,4457,118,0]An[1095,13,4178,4178,5054,118,0]An[1095,13,4178,4178,5055,118,0]Am[1095,13,1779,1779,136,118,0]Aj[463,13,464,3640,4922,0,0]Aj[463,13,464,1094,4363,0,0]Ag[463,13,464,0,4067,0,0]Al[3096,13,3097,1691,4069,0,0]Al[3096,14,3097,1756,5009,0,0]Ai[3096,14,4749,0,4814,0,0]Ah[3096,14,4460,0,499,0,0]Ai[3096,14,4460,0,1184,0,0]Af[463,5,464,3640,0,0,0]Al[1195,15,1196,1196,3930,0,0]Ae[2358,6,2359,0,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1356,0,0,0]Aj[463,15,464,3640,4753,0,0]Al[3096,15,3097,3070,4754,0,0]Af[463,5,464,2304,0,0,0]Ah[3096,5,3097,2305,0,0,0]Al[3096,15,3097,2002,3961,0,0]Af[463,5,464,2336,0,0,0]2Ah[3096,6,3097,1756,0,0,0]Ag[463,19,464,0,1443,0,0]Al[3096,19,3097,1810,1444,0,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]=Ah[463,12,1693,0,4117,0,0]>Ak[463,13,1773,0,4677,4117,0]>Al[3096,12,1694,1694,4119,0,0]>Ao[3096,13,1774,1774,4678,4119,0]Ao[1095,13,4178,4178,5055,4119,0]An[2358,13,2359,2359,125,3945,0]Ao[2358,13,2359,2359,2250,3945,0]Ag[463,14,464,0,3041,0,0]Ag[463,14,464,0,4452,0,0]Al[3096,14,3097,1381,3042,0,0]Al[3096,14,3097,1381,4453,0,0]Ag[463,13,464,0,4116,0,0]Al[3096,13,3097,1691,4118,0,0]Aj[463,13,464,1994,4320,0,0]0Ak[1985,13,1986,416,4362,0,0]Al[3096,13,3097,3641,3212,0,0]Al[1095,13,1382,1382,4457,0,0]Ae[1095,2,1096,0,0,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2264,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]6Ag[463,13,464,0,4471,0,0]Al[3096,13,3097,3194,4472,0,0]32Ak[1195,14,1196,1196,134,0,0]Ag[463,14,464,0,2291,0,0]Al[3096,14,3097,3097,2292,0,0]Al[1985,14,1986,1986,2293,0,0]Al[3096,13,3097,2002,1861,0,0]Al[3096,13,3097,4258,5098,0,0]Al[3096,13,3097,4258,5103,0,0]Aj[463,13,464,4041,3243,0,0]Al[3096,13,3097,2002,3244,0,0]<;Al[1195,14,1380,1380,1189,0,0]Ai[519,14,520,520,3931,0,0]Ah[463,13,1773,0,4675,0,0]Ah[463,13,1773,0,4677,0,0]Al[3096,13,1774,1774,4676,0,0]Al[3096,13,1774,1774,4678,0,0]76Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Af[463,5,464,4481,0,0,0]Ah[3096,5,3097,4481,0,0,0]Ag[463,15,464,0,4448,0,0]Ag[463,15,464,0,4079,0,0]Al[3096,15,3097,3641,4449,0,0]Al[3096,15,3097,2305,4080,0,0]Ah[3096,6,3097,2305,0,0,0]Ah[3096,5,3097,1784,0,0,0]Af[463,5,464,2304,0,0,0]Aj[463,15,464,4036,4355,0,0]Ag[463,5,1773,1774,0,0,0]Ae[3096,5,1774,0,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]Ah[3096,5,3097,2305,0,0,0]Al[3096,15,3097,1756,4750,0,0]?=5454Al[3096,15,3097,2305,4217,0,0]Ag[463,5,3635,2358,0,0,0]Ah[3096,5,3636,2358,0,0,0]Ah[3096,5,3097,1756,0,0,0]98Ah[3096,6,3097,1120,0,0,0]:9Af[463,5,464,1691,0,0,0]Ah[3096,5,3097,1691,0,0,0]Ae[3096,5,1689,0,0,0,0]Al[3096,13,3097,3641,3212,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]Al[1095,14,1096,1096,3015,0,0]Ae[3096,2,3097,0,0,0,0]Ag[463,13,464,0,4332,0,0]Al[3096,13,3097,1691,4333,0,0]Aj[463,12,464,1994,4320,0,0]Ab[4261,3,0,0,0,0,0]Ak[1195,14,1196,1196,134,0,0]Al[1195,14,1380,1380,3962,0,0]98Aj[463,13,464,2336,3240,0,0]Al[3096,13,3097,2305,3241,0,0]Ag[463,13,464,0,4777,0,0]Al[3096,13,3097,3194,4778,0,0];=Al[1195,14,1380,1380,1189,0,0]Ao[1095,13,1096,1096,4852,3050,0]Ag[463,15,464,0,3025,0,0]Af[463,5,464,1356,0,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1356,0,0,0]Af[463,6,464,3641,0,0,0]Ah[3096,6,3097,3641,0,0,0]Al[3096,15,3097,2305,4217,0,0]Ah[3096,5,3097,1784,0,0,0]Af[463,5,464,1381,0,0,0]Ah[3096,5,3097,1381,0,0,0]97Ae[1095,5,1382,0,0,0,0]:8Ah[3096,6,3097,1756,0,0,0]Af[463,5,464,1116,0,0,0]Ah[3096,5,3097,1116,0,0,0]Al[3096,15,3097,1366,4752,0,0]Af[463,5,464,1392,0,0,0]Ah[3096,5,3097,1392,0,0,0]Af[463,5,464,3194,0,0,0]Ah[3096,5,3097,3194,0,0,0]Ag[463,15,464,0,4448,0,0]Al[3096,15,3097,3641,4449,0,0]Af[463,5,464,3640,0,0,0]Aj[463,15,464,4036,3044,0,0]Aj[463,15,464,4036,3239,0,0]Aj[463,15,464,4041,3257,0,0]Aj[463,15,464,4041,4122,0,0]An[1195,13,1196,1196,134,4216,0]Ao[1195,13,1196,1196,3954,4216,0]Ao[1195,13,1196,1196,3930,4216,0]Am[463,13,464,3640,3211,4216,0]Am[463,13,464,3640,4922,4216,0]Am[463,13,464,3640,4753,4216,0]Am[463,13,464,2304,2259,4216,0]Am[463,13,464,2304,4219,4216,0]Am[463,13,464,4144,1418,4216,0]Al[463,13,464,1094,503,4216,0]Am[463,13,464,1094,4363,4216,0]Am[463,13,464,4036,4356,4216,0]Am[463,13,464,4036,3044,4216,0]Am[463,13,464,4036,3239,4216,0]Am[463,13,464,4036,4355,4216,0]Am[463,13,464,4041,3257,4216,0]Am[463,13,464,4041,4122,4216,0]Aj[463,13,464,0,1443,4216,0]Aj[463,13,464,0,4919,4216,0]Aj[463,13,464,0,1426,4216,0]Aj[463,13,464,0,2294,4216,0]Aj[463,13,464,0,3217,4216,0]Aj[463,13,464,0,3041,4216,0]Aj[463,13,464,0,4452,4216,0]Aj[463,13,464,0,1867,4216,0]Aj[463,13,464,0,4073,4216,0]Aj[463,13,464,0,4448,4216,0]Aj[463,13,464,0,4471,4216,0]Aj[463,13,464,0,4777,4216,0]Aj[463,13,464,0,4792,4216,0]Aj[463,13,464,0,3943,4216,0]Aj[463,13,464,0,4332,4216,0]Aj[463,13,464,0,4116,4216,0]Aj[463,13,464,0,4976,4216,0]Aj[463,13,464,0,4067,4216,0]Aj[463,13,464,0,3933,4216,0]Aj[463,13,464,0,3025,4216,0]Aj[463,13,464,0,4445,4216,0]Aj[463,13,464,0,4646,4216,0]Aj[463,13,464,0,4079,4216,0]Aj[463,13,464,0,4082,4216,0]Aj[463,13,464,0,4087,4216,0]Aj[463,13,464,0,4812,4216,0]Aj[463,13,464,0,3220,4216,0]Ai[463,13,464,0,510,4216,0]Ai[463,13,464,0,126,4216,0]Aj[463,13,464,0,2281,4216,0]Aj[463,13,3635,0,120,4216,0]Ak[463,13,3635,0,3012,4216,0]Ak[463,13,3635,0,1156,4216,0]Ak[463,13,3635,0,3938,4216,0]Ak[463,13,3635,0,1840,4216,0]Ak[463,13,3635,0,4237,4216,0]Ak[463,13,1773,0,1169,4216,0]Ak[463,13,1773,0,4675,4216,0]Ak[463,13,1773,0,4914,4216,0]Ak[463,13,1773,0,4677,4216,0]Ao[3096,13,3097,1810,1444,4216,0]Ao[3096,13,3097,1810,4920,4216,0]Ao[3096,13,3097,3070,4754,4216,0]Ao[3096,13,3097,1366,1427,4216,0]Ao[3096,13,3097,1366,4112,4216,0]Ao[3096,13,3097,1366,3233,4216,0]Ao[3096,13,3097,1366,3040,4216,0]Ao[3096,13,3097,1366,4752,4216,0]Ao[3096,13,3097,1366,4808,4216,0]Ao[3096,13,3097,1366,3207,4216,0]Ao[3096,13,3097,1381,2295,4216,0]Ao[3096,13,3097,1381,3218,4216,0]Ao[3096,13,3097,1381,3042,4216,0]Ao[3096,13,3097,1381,4453,4216,0]Ao[3096,13,3097,1120,3045,4216,0]Ao[3096,13,3097,1120,4245,4216,0]Ao[3096,13,3097,1125,1868,4216,0]Ao[3096,13,3097,1125,3258,4216,0]Ao[3096,13,3097,1125,3942,4216,0]Ao[3096,13,3097,2002,4357,4216,0]Ao[3096,13,3097,2002,4077,4216,0]Ao[3096,13,3097,3641,4449,4216,0]Ao[3096,13,3097,3641,3038,4216,0]Ao[3096,13,3097,3641,4323,4216,0]Ao[3096,13,3097,3641,5005,4216,0]Ao[3096,13,3097,3194,4472,4216,0]Ao[3096,13,3097,3194,4778,4216,0]Ao[3096,13,3097,3194,4793,4216,0]Ao[3096,13,3097,3194,3944,4216,0]Ao[3096,13,3097,1691,4333,4216,0]Ao[3096,13,3097,1691,4118,4216,0]Ao[3096,13,3097,1691,4977,4216,0]Ao[3096,13,3097,1691,4069,4216,0]Ao[3096,13,3097,1691,3934,4216,0]Ao[3096,13,3097,1356,3026,4216,0]Ao[3096,13,3097,1356,3224,4216,0]Ao[3096,13,3097,1356,3247,4216,0]Ao[3096,13,3097,1356,4084,4216,0]Ao[3096,13,3097,1356,4447,4216,0]Ao[3096,13,3097,1356,4648,4216,0]Ao[3096,13,3097,1356,2253,4216,0]Ao[3096,13,3097,2305,4652,4216,0]Ao[3096,13,3097,2305,4080,4216,0]Ao[3096,13,3097,1756,4461,4216,0]Ao[3096,13,3097,1756,5009,4216,0]Ao[3096,13,3097,1756,2267,4216,0]Ao[3096,13,3097,1756,4750,4216,0]Ao[3096,13,3097,1784,4083,4216,0]Ao[3096,13,3097,1784,4088,4216,0]Al[3096,13,3097,0,4361,4216,0]Al[3096,13,3097,0,4813,4216,0]Ao[3096,13,3097,4258,3221,4216,0]Ao[3096,13,3097,4258,5103,4216,0]An[3096,13,3097,3097,511,4216,0]An[3096,13,3097,3097,127,4216,0]Ao[3096,13,3097,3097,2282,4216,0]Ao[3096,13,3097,3097,3024,4216,0]Ao[3096,13,1689,1689,4251,4216,0]Ao[3096,13,4961,4961,4859,4216,0]Ao[3096,13,4961,4961,1171,4216,0]Al[3096,13,1774,0,1170,4216,0]Ao[3096,13,1774,1774,4676,4216,0]Ao[3096,13,1774,1774,4915,4216,0]Ao[3096,13,1774,1774,4678,4216,0]Am[3096,13,3636,148,121,4216,0]An[3096,13,3636,148,3013,4216,0]Ao[3096,13,3636,1352,1157,4216,0]Ao[3096,13,3636,1352,3939,4216,0]Ao[3096,13,3636,2358,1841,4216,0]Ao[3096,13,3636,2358,4238,4216,0]Ao[3096,13,4710,4710,1175,4216,0]Ao[1985,13,1986,1986,2279,4216,0]Ao[1985,13,1986,1986,2293,4216,0]Ao[1985,13,1986,1986,4089,4216,0]Ao[1095,13,1096,1096,4852,4216,0]Ao[1095,13,1382,1382,4457,4216,0]Ao[1095,13,4178,4178,5054,4216,0]Ao[1095,13,4178,4178,5055,4216,0]Af[463,7,464,1994,0,0,0]Ag[463,13,464,0,4332,0,0]Al[3096,13,3097,1691,4333,0,0]Ah[463,12,1693,0,3035,0,0]Al[3096,12,1694,1694,3036,0,0]Al[1985,14,1986,1986,2279,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]10Ae[1095,7,1096,0,0,0,0]Aj[463,13,464,2304,2259,0,0]Ae[4261,7,4262,0,0,0,0]Ae[1195,7,1196,0,0,0,0]Al[3096,13,3097,3641,3212,0,0]Aj[463,13,464,3640,3211,0,0]1Al[3096,13,3097,2002,4357,0,0]Al[1195,13,1380,1380,1189,0,0]Al[1195,14,1380,1380,3962,0,0]Aj[463,12,464,1994,1852,0,0]Am[463,13,464,1393,4123,1852,0]Am[463,13,464,1137,3957,1852,0]Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Af[463,5,464,1094,0,0,0]Ag[463,15,464,0,3025,0,0]Af[463,5,464,1356,0,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1356,0,0,0]Ag[463,15,464,0,4448,0,0]Al[3096,15,3097,3641,4449,0,0]Ah[3096,5,3097,2305,0,0,0]Al[3096,15,3097,3641,1174,0,0]1Ag[463,15,464,0,4079,0,0]Al[3096,15,3097,2305,4080,0,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]32Al[3096,15,3097,3641,3038,0,0]><><><21Ag[463,5,1773,1774,0,0,0]Ae[3096,5,1774,0,0,0,0]10Af[463,5,464,4848,0,0,0]Ah[3096,5,3097,4848,0,0,0]Al[3096,15,4710,4710,1172,0,0]Al[3096,15,3097,1366,4752,0,0]6Al[3096,15,3097,1756,4461,0,0]Ag[463,12,464,0,2287,0,0]Aj[463,13,464,0,4210,2287,0]Aj[463,13,464,0,4100,2287,0]Al[3096,12,3097,1392,2288,0,0]Ao[3096,13,3097,4481,4211,2288,0]Ao[3096,13,3097,1392,4101,2288,0]Ae[3968,7,3969,0,0,0,0]Aj[463,13,464,3640,3211,0,0]Al[3096,13,3097,3641,3212,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]32An[1195,13,1196,1196,134,4334,0]An[2358,13,2359,2359,125,4334,0]Ao[2358,13,2359,2359,2250,4334,0]Ao[1095,13,1096,1096,3015,4334,0]An[1095,13,1683,1683,135,4334,0]An[1095,13,1779,1779,136,4334,0]Ak[1985,13,1986,416,4362,0,0]Ag[463,13,464,0,4471,0,0]Al[3096,13,3097,3194,4472,0,0]:9Ae[3096,2,3097,0,0,0,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,2305,2260,0,0]?>43Ae[4261,7,4262,0,0,0,0]6Al[1095,14,1096,1096,3015,0,0]70Ae[1195,7,1196,0,0,0,0]Ag[463,13,464,0,4116,0,0]Ag[463,13,464,0,4067,0,0]Al[3096,13,3097,1691,4118,0,0]Al[3096,13,3097,1691,4069,0,0]Ag[463,14,464,0,4116,0,0]Al[3096,14,3097,1691,4118,0,0]53Aj[463,13,464,4041,3243,0,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]Ag[463,15,464,0,4448,0,0]Al[3096,15,3097,1366,4752,0,0]Al[3096,15,3097,3641,4449,0,0]Ah[463,10,3635,3636,0,0,0]Af[3096,10,3636,0,0,0,0]Ag[463,5,3635,3636,0,0,0]Ae[3096,5,3636,0,0,0,0]Ah[463,10,1693,1694,0,0,0]Af[3096,10,1694,0,0,0,0]Ag[463,15,464,0,4079,0,0]Al[3096,15,3097,2305,4080,0,0]Ag[463,10,464,3641,0,0,0]Ai[3096,10,3097,3641,0,0,0]Ah[3096,6,3097,1756,0,0,0]Ah[3096,6,3097,1366,0,0,0]Af[463,6,464,3640,0,0,0]Ah[3096,6,3097,3070,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]10Aj[463,15,464,3640,4753,0,0]Al[3096,15,3097,3070,4754,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,14,3097,1381,3042,0,0]Ah[463,14,3635,0,4741,0,0]Al[3096,14,3636,3636,4742,0,0]Aj[463,13,464,3640,3211,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]10Al[3096,13,3097,3070,3018,0,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,2305,2260,0,0]Ab[4772,3,0,0,0,0,0]Ao[1095,13,1096,1096,4852,3050,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]Af[463,5,464,3194,0,0,0]Ah[3096,5,3097,3194,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]54Ai[3096,10,3097,1756,0,0,0]Al[3096,15,3097,3641,1174,0,0]7600Al[3096,15,3097,1120,4245,0,0]4365Al[3096,15,4710,4710,1172,0,0]Ae[1095,9,1096,0,0,0,0]:9Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]<;<;Ah[3096,6,3097,1366,0,0,0]21Al[1195,15,1196,1196,3954,0,0]Ac[463,5,464,0,0,0,0]Ae[3096,5,3097,0,0,0,0]Ag[463,15,464,0,4079,0,0]Ag[463,5,1693,1694,0,0,0]Al[3096,15,3097,2305,4080,0,0]Al[3096,15,3097,1756,4750,0,0]Ae[3096,5,1694,0,0,0,0]An[1195,13,1196,1196,134,4324,0]An[2358,13,2359,2359,125,4324,0]Ao[1095,13,1096,1096,3015,4324,0]An[1095,13,1683,1683,135,4324,0]An[1095,13,1779,1779,136,4324,0]Ag[463,13,464,0,4471,0,0]Al[3096,13,3097,3194,4472,0,0]Ag[463,13,464,0,1443,0,0]Al[3096,13,3097,1810,1444,0,0]Aj[463,14,464,2304,4219,0,0]Aj[463,13,464,3640,4922,0,0]Ag[463,13,464,0,4332,0,0]Al[3096,13,3097,1691,4333,0,0]Ag[463,13,464,0,4210,0,0]Al[3096,13,3097,4481,4211,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]7Al[3096,13,3097,3641,3212,0,0]Aj[463,13,464,3640,3211,0,0]Ah[463,13,1773,0,4675,0,0]Ah[463,13,1773,0,4677,0,0]Al[3096,13,1774,1774,4676,0,0]Al[3096,13,1774,1774,4678,0,0]45;:Ao[3968,13,3969,3969,5010,4806,0]Ag[463,13,464,0,4462,0,0]Al[3096,13,3097,1116,4463,0,0]Ae[1095,6,1096,0,0,0,0]Af[463,5,464,4144,0,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]10Al[3096,15,3097,3641,3038,0,0]Ae[3096,5,4961,0,0,0,0]Af[463,5,464,4036,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Al[3096,15,4710,4710,1172,0,0]Aj[463,14,464,2304,4219,0,0]Ai[463,13,464,0,510,3006,0]Ai[463,13,464,0,126,3006,0]An[3096,13,3097,3097,511,3006,0]An[3096,13,3097,3097,127,3006,0]Ao[2358,13,2359,2359,2250,3248,0]Ag[463,13,464,0,4792,0,0]Al[3096,13,3097,3194,4793,0,0]Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Aj[463,13,464,3640,3211,0,0]Ag[463,12,464,0,4747,0,0]Al[3096,12,3097,3641,4748,0,0]Ag[463,13,464,0,4471,0,0]Al[3096,13,3097,3194,4472,0,0]Ag[463,14,464,0,3041,0,0]Al[3096,14,3097,1381,3042,0,0]Ah[463,12,3635,0,3213,0,0]Aj[463,13,3635,0,120,3213,0]Ak[463,13,3635,0,1156,3213,0]Ak[463,13,3635,0,1840,3213,0]Al[3096,12,3636,3636,3214,0,0]Am[3096,13,3636,148,121,3214,0]Ao[3096,13,3636,1352,1157,3214,0]Ao[3096,13,3636,2358,1841,3214,0]Aj[463,14,464,2304,4219,0,0]Al[3096,13,3097,2002,1861,0,0]Ah[3096,2,4256,4040,0,0,0]Ae[1195,7,1196,0,0,0,0]==Ai[463,13,464,1094,503,0,0]Ak[1985,13,1986,416,4362,0,0]032Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Ae[3096,2,3097,0,0,0,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Ag[463,10,464,4258,0,0,0]Ai[3096,10,3097,4258,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]Ag[463,15,464,0,4079,0,0]Al[3096,15,3097,2305,4080,0,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]Af[463,5,464,1691,0,0,0]Ah[3096,5,3097,1691,0,0,0]Ah[463,12,1693,0,3035,0,0]Al[3096,12,1694,1694,3036,0,0]Aj[463,13,464,2304,2259,0,0]Al[3096,13,3097,3641,3212,0,0]Al[3096,13,3097,2305,2260,0,0]Al[3096,13,3097,3097,3024,0,0]Ah[463,13,3635,0,4237,0,0]Al[3096,13,3636,2358,4238,0,0]Aj[463,13,464,1994,3048,0,0]0Aj[463,13,464,3640,3211,0,0]6Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]Ag[463,13,464,0,4471,0,0]Al[3096,13,3097,3194,4472,0,0]Al[1095,14,1096,1096,3015,0,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]Al[3096,15,4710,4710,1172,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]10Al[3096,15,3097,1366,4808,0,0]Al[3096,15,3097,3641,3038,0,0]Al[3096,15,3097,3641,4323,0,0]Ah[3096,5,3097,3641,0,0,0]Al[3096,15,3097,1366,4752,0,0]Ag[463,15,464,0,3025,0,0]Al[3096,15,3097,1356,3026,0,0]Ah[3096,5,3097,1756,0,0,0]Ae[3968,5,3969,0,0,0,0]Al[1095,13,1096,1096,3015,0,0]Aj[463,13,464,3640,3211,0,0]Ah[463,12,1693,0,1853,0,0]Ak[463,13,1773,0,3252,1853,0]Al[3096,12,1694,1694,1854,0,0]Ao[3096,13,1774,1774,3253,1854,0]Ah[3096,7,4894,4893,0,0,0]0Al[3096,13,3097,3641,3212,0,0]6Ai[463,13,464,1094,503,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]Ao[3968,13,3969,3969,5010,4806,0]0Ag[463,13,464,0,4067,0,0]Al[3096,13,3097,1691,4069,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]10Ag[463,13,464,0,4777,0,0]Al[3096,13,3097,3194,4778,0,0]Am[1195,13,1196,1196,134,485,0]Am[2358,13,2359,2359,125,485,0]An[1095,13,1096,1096,3015,485,0]Am[1095,13,1683,1683,135,485,0]Am[1095,13,1779,1779,136,485,0]??>An[1195,13,1196,1196,134,4334,0]An[2358,13,2359,2359,125,4334,0]Ao[2358,13,2359,2359,2250,4334,0]Ao[1095,13,1096,1096,3015,4334,0]An[1095,13,1683,1683,135,4334,0]An[1095,13,1779,1779,136,4334,0]Ag[463,13,464,0,4116,0,0]Al[3096,13,3097,1691,4118,0,0]Ag[463,19,464,0,4812,0,0]Ai[3096,19,3097,0,4813,0,0]Ae[1095,5,4178,0,0,0,0]0Ag[463,13,464,0,4332,0,0]Al[3096,13,3097,1691,4333,0,0]Ag[463,13,464,0,4067,0,0]Al[3096,13,3097,1691,4069,0,0]Aj[463,13,464,2304,2259,0,0]Aj[463,13,464,2336,2263,0,0]Al[3096,13,3097,2305,2264,0,0]Al[3096,13,3097,3641,3212,0,0]Ao[3968,13,3969,3969,5010,4806,0];:Ag[463,5,1693,1694,0,0,0]Ae[3096,5,1694,0,0,0,0]Ah[463,15,1773,0,1169,0,0]Ai[3096,15,1774,0,1170,0,0]?>?>Aj[463,13,464,3640,3211,0,0]6Ag[463,13,464,0,4471,0,0]Al[3096,13,3097,3194,4472,0,0]Ae[3968,7,3969,0,0,0,0]Ae[4261,7,4262,0,0,0,0]Ag[463,14,464,0,3217,0,0]Al[3096,14,3097,1381,3218,0,0]?434343>=>=Al[3096,14,4961,4961,4859,0,0]54Ai[3096,18,3097,3194,0,0,0]") \ No newline at end of file diff --git a/pr/561/docs/search.index/function/37913739753b.js b/pr/561/docs/search.index/function/37913739753b.js deleted file mode 100644 index f0575514d..000000000 --- a/pr/561/docs/search.index/function/37913739753b.js +++ /dev/null @@ -1 +0,0 @@ -rd_("Bf[\"{{{AHEf{ANK`}}{AHEf{ANK`}}}D@n}\",[]]Bf[\"{{{AHEf{BEAj}}{AHEf{BEAj}}}D@n}\",[]]Bd[\"{{{AHEf{KAd}}{AHEf{KAd}}}D@n}\",[]]Bd[\"{{{AHEf{CNn}}{AHEf{CNn}}}D@n}\",[]]Bf[\"{{{AHEf{BB@n}}{AHEf{BB@n}}}D@n}\",[]]Bf[\"{{{AHEf{BB@`}}{AHEf{BB@`}}}D@n}\",[]]Bf[\"{{{AHEf{AGLh}}{AHEf{AGLh}}}D@n}\",[]]Bf[\"{{{AHEf{AIDn}}{AHEf{AIDn}}}D@n}\",[]]Bf[\"{{{AHEf{BAOn}}{AHEf{BAOn}}}D@n}\",[]]Bf[\"{{{AHEf{AIGb}}{AHEf{AIGb}}}D@n}\",[]]Bf[\"{{{AHEf{B@C`}}{AHEf{B@C`}}}D@n}\",[]]Bd[\"{{{AHEf{KDf}}{AHEf{KDf}}}D@n}\",[]]Bf[\"{{{AHEf{BFFf}}{AHEf{BFFf}}}D@n}\",[]]Bd[\"{{{AHEf{I@`}}{AHEf{I@`}}}D@n}\",[]]Bd[\"{{{AHEf{KBd}}{AHEf{KBd}}}D@n}\",[]]Bf[\"{{{AHEf{AANl}}{AHEf{AANl}}}D@n}\",[]]Bf[\"{{{AHEf{AIBb}}{AHEf{AIBb}}}D@n}\",[]]Bf[\"{{{AHEf{AGLb}}{AHEf{AGLb}}}D@n}\",[]]Bd[\"{{{AHEf{NIf}}{AHEf{NIf}}}D@n}\",[]]Bf[\"{{{AHEf{AOLn}}{AHEf{AOLn}}}D@n}\",[]]Bf[\"{{{AHEf{BBKh}}{AHEf{BBKh}}}D@n}\",[]]Bf[\"{{{AHEf{ANLj}}{AHEf{ANLj}}}D@n}\",[]]Bf[\"{{{AHEf{ANKf}}{AHEf{ANKf}}}D@n}\",[]]Bf[\"{{{AHEf{AGJb}}{AHEf{AGJb}}}D@n}\",[]]Bf[\"{{{AHEf{BBKb}}{AHEf{BBKb}}}D@n}\",[]]Bf[\"{{{AHEf{BDDd}}{AHEf{BDDd}}}D@n}\",[]]Bf[\"{{{AHEf{AOMj}}{AHEf{AOMj}}}D@n}\",[]]Bf[\"{{{AHEf{AON`}}{AHEf{AON`}}}D@n}\",[]]Bf[\"{{{AHEf{AONj}}{AHEf{AONj}}}D@n}\",[]]Bf[\"{{{AHEf{BEI`}}{AHEf{BEI`}}}D@n}\",[]]Bd[\"{{{AHEf{COl}}{AHEf{COl}}}D@n}\",[]]Bb[\"{{{AHEf{Ol}}{AHEf{Ol}}}D@n}\",[]]Bf[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}D@n}\",[]]Bf[\"{{{AHEf{BGI`}}{AHEf{BGI`}}}D@n}\",[]]Bd[\"{{{AHEf{IBb}}{AHEf{IBb}}}D@n}\",[]]Bd[\"{{{AHEf{KDh}}{AHEf{KDh}}}D@n}\",[]]Bf[\"{{{AHEf{BFFh}}{AHEf{BFFh}}}D@n}\",[]]Bd[\"{{{AHEf{I@b}}{AHEf{I@b}}}D@n}\",[]]Bf[\"{{{AHEf{BEAl}}{AHEf{BEAl}}}D@n}\",[]]Bd[\"{{{AHEf{KBf}}{AHEf{KBf}}}D@n}\",[]]Bf[\"{{{AHEf{AIDb}}{AHEf{AIDb}}}D@n}\",[]]Bf[\"{{{AHEf{AGL`}}{AHEf{AGL`}}}D@n}\",[]]Bf[\"{{{AHEf{BEAh}}{AHEf{BEAh}}}D@n}\",[]]Bf[\"{{{AHEf{BEHh}}{AHEf{BEHh}}}D@n}\",[]]Bf[\"{{{AHEf{AI@n}}{AHEf{AI@n}}}D@n}\",[]]Bf[\"{{{AHEf{AANn}}{AHEf{AANn}}}D@n}\",[]]Bf[\"{{{AHEf{AIBd}}{AHEf{AIBd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLd}}{AHEf{AGLd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}D@n}\",[]]Bf[\"{{{AHEf{BABb}}{AHEf{BABb}}}D@n}\",[]]Bd[\"{{{AHEf{NIh}}{AHEf{NIh}}}D@n}\",[]]Bf[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}D@n}\",[]]Bf[\"{{{AHEf{ANLh}}{AHEf{ANLh}}}D@n}\",[]]Bf[\"{{{AHEf{ANNn}}{AHEf{ANNn}}}D@n}\",[]]Bf[\"{{{AHEf{BB@b}}{AHEf{BB@b}}}D@n}\",[]]Bf[\"{{{AHEf{AOMf}}{AHEf{AOMf}}}D@n}\",[]]Bf[\"{{{AHEf{BBKj}}{AHEf{BBKj}}}D@n}\",[]]Bf[\"{{{AHEf{AGKl}}{AHEf{AGKl}}}D@n}\",[]]Bf[\"{{{AHEf{BAKn}}{AHEf{BAKn}}}D@n}\",[]]Bf[\"{{{AHEf{ANLl}}{AHEf{ANLl}}}D@n}\",[]]Bf[\"{{{AHEf{ANKh}}{AHEf{ANKh}}}D@n}\",[]]Bf[\"{{{AHEf{AGJd}}{AHEf{AGJd}}}D@n}\",[]]Bf[\"{{{AHEf{BAMl}}{AHEf{BAMl}}}D@n}\",[]]Bf[\"{{{AHEf{AIC`}}{AHEf{AIC`}}}D@n}\",[]]Bf[\"{{{AHEf{AIEn}}{AHEf{AIEn}}}D@n}\",[]]Bf[\"{{{AHEf{AONd}}{AHEf{AONd}}}D@n}\",[]]Bf[\"{{{AHEf{BBKf}}{AHEf{BBKf}}}D@n}\",[]]Bf[\"{{{AHEf{BDDh}}{AHEf{BDDh}}}D@n}\",[]]Bf[\"{{{AHEf{BDE`}}{AHEf{BDE`}}}D@n}\",[]]Bf[\"{{{AHEf{AOMl}}{AHEf{AOMl}}}D@n}\",[]]Bf[\"{{{AHEf{AAKf}}{AHEf{AAKf}}}D@n}\",[]]Bf[\"{{{AHEf{BEAd}}{AHEf{BEAd}}}D@n}\",[]]Bf[\"{{{AHEf{AONb}}{AHEf{AONb}}}D@n}\",[]]Bf[\"{{{AHEf{AONl}}{AHEf{AONl}}}D@n}\",[]]Bf[\"{{{AHEf{BB@j}}{AHEf{BB@j}}}D@n}\",[]]Bf[\"{{{AHEf{BEIb}}{AHEf{BEIb}}}D@n}\",[]]Bd[\"{{{AHEf{COn}}{AHEf{COn}}}D@n}\",[]]Bb[\"{{{AHEf{On}}{AHEf{On}}}D@n}\",[]]Bf[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}D@n}\",[]]Bf[\"{{{AHEf{AGJ`}}{AHEf{AGJ`}}}D@n}\",[]]Bf[\"{{{AHEf{BABn}}{AHEf{BABn}}}D@n}\",[]]Bf[\"{{{AHEf{BENn}}{AHEf{BENn}}}D@n}\",[]]Bd[\"{{{AHEf{IBf}}{AHEf{IBf}}}D@n}\",[]]Bf[\"{{{AHEf{BGIb}}{AHEf{BGIb}}}D@n}\",[]]Bd[\"{{{AHEf{IBd}}{AHEf{IBd}}}D@n}\",[]]Bf[\"{{{AHEf{AONn}}{AHEf{AONn}}}D@n}\",[]]Ai[\"{{{AHEf{CNn}}}KBd}\",[]]Aj[\"{{{AHEf{BB@n}}}KBd}\",[]]Ak[\"{{{AHEf{AIDj}}}AAMb}\",[]]Ak[\"{{{AHEf{BEO`}}}AAMb}\",[]]Ak[\"{{{AHEf{AIEf}}}AAMb}\",[]]o[\"{KAhKBf}\",[]]A`[\"{AGGdKBf}\",[]]A`[\"{AGIhKBf}\",[]]A`[\"{B@AfKBf}\",[]]A`[\"{B@@hKBf}\",[]]Aa[\"{AALjAAMd}\",[]]Aa[\"{AAObAAMd}\",[]]Aa[\"{AAJjAAMd}\",[]]A`[\"{NGnAAMd}\",[]]A`[\"{ANN`NGf}\",[]]A`[\"{CNfAAKf}\",[]]Ac[\"{{AANlAANl}}\",[]]Ac[\"{{AIBbAIBb}}\",[]]Ac[\"{{BBL`AGLb}}\",[]]Bc[\"{{AANnAANn}c{}}\",[\"Add::Output\"]]Bc[\"{{AIBdAIBd}c{}}\",[\"Add::Output\"]]Bc[\"{{BBLbAGLd}c{}}\",[\"Add::Output\"]]Be[\"{{{AHEf{KDf}}{AHEf{KDf}}}AALh}\",[]]Be[\"{{{AHEf{KBd}}{AHEf{KBd}}}AALh}\",[]]Bg[\"{{{AHEf{ANLj}}{AHEf{ANLj}}}AALh}\",[]]Bg[\"{{{AHEf{AON`}}{AHEf{AON`}}}AALh}\",[]]Be[\"{{{AHEf{COl}}{AHEf{COl}}}AALh}\",[]]Bc[\"{{{AHEf{Ol}}{AHEf{Ol}}}AALh}\",[]]Bg[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}AALh}\",[]]Be[\"{{{AHEf{KDh}}{AHEf{KDh}}}AALh}\",[]]Bg[\"{{{AHEf{BEAl}}{AHEf{BEAl}}}AALh}\",[]]Be[\"{{{AHEf{KBf}}{AHEf{KBf}}}AALh}\",[]]Bg[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}AALh}\",[]]Bg[\"{{{AHEf{BABb}}{AHEf{BABb}}}AALh}\",[]]Bg[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}AALh}\",[]]Bg[\"{{{AHEf{ANLl}}{AHEf{ANLl}}}AALh}\",[]]Bg[\"{{{AHEf{BDE`}}{AHEf{BDE`}}}AALh}\",[]]Bg[\"{{{AHEf{BEAd}}{AHEf{BEAd}}}AALh}\",[]]Bg[\"{{{AHEf{AONb}}{AHEf{AONb}}}AALh}\",[]]Be[\"{{{AHEf{COn}}{AHEf{COn}}}AALh}\",[]]Bc[\"{{{AHEf{On}}{AHEf{On}}}AALh}\",[]]Bg[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}AALh}\",[]]o[\"{AAMbOl}\",[]]o[\"{AAMdOn}\",[]]n[\"{KAjOn}\",[]]o[\"{AGHbOn}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AALnKB`}\",[]]A`[\"{AANjKB`}\",[]]Bh[\"{{{AHEf{A@l}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANN`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@d}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGAl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFF`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFFl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAJf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Nn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KAd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AICn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BENb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIE`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAMj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{CNn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@n}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEO`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGLh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIDn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAOn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Cb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANNf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@C`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NHb}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{KDf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFFf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Cd[\"{{{AHEf{I@`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{KBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AIBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGLb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBL`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOLn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBKh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBMd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBNf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEDj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEFh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANLj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAM`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{B@Bd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BFMh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOLb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANKf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AGJb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBKb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BDDd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AOMj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AON`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AONj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEI`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AIBh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BDHf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{COl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{Ol}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AAMb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{O`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGHh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{I@h}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANL`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NF`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAAb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BE@b}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BGI`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANKl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEIh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{IBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFEl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{AIAh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KDh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BFFh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{I@b}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{KBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Al}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGL`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEHh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AI@n}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIBd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBLb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BABb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NIh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANLh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANNn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@b}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOMf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBKj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAKn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGAb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBNh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEDl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEFj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAMb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Bh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFMj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOLf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGJd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAMl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIC`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIEn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AONd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBKf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDDh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAIj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDE`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOMl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANJl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAAh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGAj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAKf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBKn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Nl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AONb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AONl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@j}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BEIb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIBj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGMf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BDHh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{COn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bg[\"{{{AHEf{On}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAMd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGJ`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BABn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BENn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGIb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEIn}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{IBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{BFEn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bg[\"{{{AHEf{Ob}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGHj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{I@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{NFb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAAd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BE@d}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@l}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AALn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AANj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AONn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bd[\"{{{AHEf{BFF`}}}{{KB`{AIEl}}}}\",[]]Ak[\"{{{AHEf{B@Al}}}AAJb}\",[]]A`[\"{AANlCLf}\",[]]A`[\"{AANnCLf}\",[]]Aj[\"{{{AHEf{BAAh}}}JNf}\",[]]A`[\"{BGAjCLf}\",[]]o[\"{CNfCLf}\",[]]A`[\"{AALnJNf}\",[]]Ce[\"{{{AHEf{CEdBFMh}}{Nn{AAMn}}}{{AHEf{CEdBFMh}}}}\",[]]Ce[\"{{{AHEf{CEdBFMj}}{Nn{AAN`}}}{{AHEf{CEdBFMj}}}}\",[]]8Af[\"{{AAJbCLf}BB@d}\",[]]Ag[\"{{}{{Nn{BGAl}}}}\",[]]Ae[\"{{JNfCLd}B@Ml}\",[]]Cd[\"{{BAM`{KB`{B@Bd}}AGMb{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Ah[\"{{{Of{IEb}}}AIDd}\",[]]A`[\"{NG`BBMd}\",[]]Ah[\"{{{Nn{NDn}}}BAM`}\",[]]Bc[\"{{{Nn{B@Bf}}{Nn{BE@f}}}B@Bd}\",[]]Ai[\"{{{Nn{AOLd}}}AOLb}\",[]]B`[\"{{{AHEf{{JL`{Nd}}}}}AON`}\",[]]Ae[\"{{CLdJNf}BDHf}\",[]]Ag[\"{{COlOlCLf}AAMb}\",[]]Aj[\"{{{Nn{AGHh}}CLb}O`}\",[]]An[\"{{{Nn{ANL`}}NEdCLb}I@h}\",[]]An[\"{{{Nn{BAAb}}NEdCLb}NF`}\",[]]Ae[\"{{JNfCLd}B@Mn}\",[]]Ah[\"{{{Of{IEb}}}AIDf}\",[]]Bm[\"{{{Nn{BAMb}}{KB`{{Nn{B@Bh}}}}D@n}AAJh}\",[]]A`[\"{JNfBH@h}\",[]]o[\"{{}BGLl}\",[]]A`[\"{NG`BBMf}\",[]]Ah[\"{{{Nn{NE`}}}BAMb}\",[]]Bc[\"{{{Nn{B@Bj}}{Nn{BE@h}}}B@Bh}\",[]]Ai[\"{{{Nn{AOLh}}}AOLf}\",[]]Ek[\"{{AAI`{AHEf{c}}{AHEf{{JL`{CLd}}}}D@n}{{KBj{{JNd{BAAh{KB`{AAI`}}}}BEAd}}}{BEEfIDh}}\",[\"\"]]B`[\"{{{AHEf{{JL`{Nd}}}}}AONb}\",[]]Af[\"{{BEIbKDb}BB@j}\",[]]A`[\"{JNfBGMf}\",[]]Ae[\"{{CLdJNf}BDHh}\",[]]Ag[\"{{COnOnCLf}AAMd}\",[]]Am[\"{{AIEl{KB`{KAb}}}AGJ`}\",[]]Aj[\"{{{Nn{AGHj}}CLb}Ob}\",[]]An[\"{{{Nn{ANLb}}NEdCLb}I@j}\",[]]An[\"{{{Nn{BAAd}}NEdCLb}NFb}\",[]]Aj[\"{AIG`{{KBl{BB@l}}}}\",[]]Aa[\"{BDH`BGGd}\",[]]Aa[\"{BDHdBGGf}\",[]]o[\"{COlCOl}\",[]]o[\"{COnCOn}\",[]]Ak[\"{{{AHEf{AIFd}}}AIFb}\",[]]Ai[\"{{{AHEf{NGh}}}NEd}\",[]]0Aj[\"{{{AHEf{B@Cb}}}NEd}\",[]]Ak[\"{{{AHEf{BABj}}}AIFb}\",[]]Ak[\"{{{AHEf{AIFf}}}AIFb}\",[]]Ak[\"{{{AHEf{BABl}}}AIFb}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLbAAJb}\",[]]Bg[\"{{{AHEf{AIAh}}KBf}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLdAAJb}\",[]]Ah[\"{A@n{{KBn{HOj}}}}\",[]]Ah[\"{AA`{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Aa[\"{B@@hAIEl}\",[]]Aa[\"{AALnAIEl}\",[]]Aa[\"{BB@jBEIb}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{AAIjHOn}\",[]]Am[\"{{{AHEf{CEdAALd}}}HOj}\",[]]Am[\"{{{AHEf{CEdAAJn}}}HOj}\",[]]Al[\"{{{AHEf{CEdCNn}}}HOj}\",[]]Am[\"{{{AHEf{CEdBB@n}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIDj}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIEf}}}HOj}\",[]]Al[\"{{{AHEf{CEdJOn}}}HOj}\",[]]A`[\"{cc{}}\",[\"T\"]]0000000000000000000000Aa[\"{BBKhBEAj}\",[]]111111111111111Aa[\"{AGLhBB@`}\",[]]2Aa[\"{AIDnAGLh}\",[]]Aa[\"{BBKhAGLh}\",[]]4Aa[\"{BBKhAIDn}\",[]]Aa[\"{AGLhBAOn}\",[]]6666Aa[\"{B@C`AIGb}\",[]]Aa[\"{AOLnAIGb}\",[]]Aa[\"{BBKhAIGb}\",[]]9Aa[\"{BBKhB@C`}\",[]]:::::::A`[\"{BEI`KDf}\",[]]n[\"{NdKDf}\",[]]o[\"{CLbKDf}\",[]]A`[\"{AAMbKDf}\",[]]o[\"{CLdKDf}\",[]]????Al[\"{cKBd{{CN`{CLd}}}}\",[\"T\"]]A`[\"{cc{}}\",[\"T\"]]00000A`[\"{IAjBBKh}\",[]]A`[\"{I@fBBKh}\",[]]2Aa[\"{ANKdBBKh}\",[]]3333A`[\"{KDfANLj}\",[]]444444Aa[\"{BFFfANKf}\",[]]Aa[\"{BBNjANKf}\",[]]6A`[\"{IAjBBKb}\",[]]777Aa[\"{BEIhAOMj}\",[]]88A`[\"{KDfBEI`}\",[]]99999A`[\"{KDfAAMb}\",[]]::::::::::::Aa[\"{ANOdANKl}\",[]];;;;A`[\"{BDF`IBb}\",[]]A`[\"{BDGhIBb}\",[]]A`[\"{BBLdIBb}\",[]]A`[\"{BAMnIBb}\",[]]A`[\"{BAO`IBb}\",[]]A`[\"{BBMnIBb}\",[]]A`[\"{BGD`IBb}\",[]]A`[\"{BDDjIBb}\",[]]A`[\"{AICfIBb}\",[]]A`[\"{BGJ`IBb}\",[]]A`[\"{BGHnIBb}\",[]]A`[\"{cc{}}\",[\"T\"]]00000000000000000000000o[\"{CLdKDh}\",[]]A`[\"{AAMdKDh}\",[]]o[\"{CLbKDh}\",[]]n[\"{NdKDh}\",[]]4A`[\"{BEIbKDh}\",[]]5555Al[\"{cKBf{{CN`{CLd}}}}\",[\"T\"]]666666666666666666Aa[\"{BB@jBBKj}\",[]]77777A`[\"{AGL`IBl}\",[]]88888A`[\"{KDhANLl}\",[]]99999Aa[\"{BBNjANKh}\",[]]Aa[\"{BFFhANKh}\",[]];;;;;Aa[\"{BB@jBBKf}\",[]]<<<<>>>>>A`[\"{IBfBB@j}\",[]]A`[\"{KDhBEIb}\",[]]A`[\"{cc{}}\",[\"T\"]]00000A`[\"{KDhAAMd}\",[]]111111A`[\"{BABnIBf}\",[]]222Aa[\"{ANOdANKn}\",[]]3333A`[\"{BGJ`IBd}\",[]]A`[\"{BDF`IBd}\",[]]A`[\"{AICfIBd}\",[]]A`[\"{BDGhIBd}\",[]]7A`[\"{BBLdIBd}\",[]]A`[\"{BAO`IBd}\",[]]A`[\"{BBMnIBd}\",[]]A`[\"{BGHnIBd}\",[]]A`[\"{BDDjIBd}\",[]]A`[\"{BAMnIBd}\",[]]A`[\"{BGD`IBd}\",[]]>>>>>>>>>>>>An[\"{{{AHEf{c}}}AIG`CLl}\",[\"S\"]]??????????????Bm[\"{{{AHEf{KDf}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bk[\"{{{AHEf{KBd}}{AHEf{CEdc}}}HOjKA`}\",[\"H\"]]Bn[\"{{{AHEf{ANLj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AON`}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{COl}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bl[\"{{{AHEf{Ol}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AAMb}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{KDh}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BEAl}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bk[\"{{{AHEf{KBf}}{AHEf{CEdc}}}HOjKA`}\",[\"H\"]]Bn[\"{{{AHEf{AGLj}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BABb}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AIGd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{ANLl}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BDE`}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{BEAd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AONb}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bm[\"{{{AHEf{COn}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bl[\"{{{AHEf{On}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AAMd}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Bn[\"{{{AHEf{AGJ`}}{AHEf{CEdc}}}HOjKA`}\",[\"__H\"]]Aa[\"{{}c{}}\",[\"U\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n[\"{{}HOj}\",[]]0000Cc[\"{{{AHEf{CEdJOn}}JNf}{{KBj{{KB`{I@b}}AGLj}}}}\",[]]Cf[\"{{{AHEf{CEdBA@`}}}{{KB`{c}}}{}}\",[\"Iterator::Item\"]]Dl[\"{{{AHEf{BE@f}}HOh{AHEf{CEd{JL`{Nd}}}}}{{KBj{{AHEf{{JL`{Nd}}}}ANKl}}}}\",[]]Bh[\"{{{AHEf{CEdNHj}}On}{{KB`{AAMd}}}}\",[]]Dl[\"{{{AHEf{BE@h}}HOh{AHEf{CEd{JL`{Nd}}}}}{{KBj{{AHEf{{JL`{Nd}}}}ANKn}}}}\",[]]Bf[\"{{{AHEf{AIAf}}KBd}{{KB`{CNn}}}}\",[]]Bf[\"{{{AHEf{CNn}}}{{KBj{HOjAI@h}}}}\",[]]A`[\"{AIBbCLf}\",[]]Am[\"{{{AHEf{CEdAIAh}}}HOj}\",[]]A`[\"{AIBdCLf}\",[]]Ck[\"{{{AAd{{AHEf{CEdAI@`}}}}{AHEf{CEdNDb}}}{{COf{HOj}}}}\",[]]Dk[\"{{{AAd{{AHEf{CEdBBO`}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAALd}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAALf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAIAb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdNFf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdKAf}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAGGh}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdAAHn}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdB@Ad}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdB@An}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdJNn}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dk[\"{{{AAd{{AHEf{CEdBAMj}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Dj[\"{{{AAd{{AHEf{CEdNHb}}}}{AHEf{CEdNDb}}}{{COf{c}}}{}}\",[\"Future::Output\"]]Bf[\"{{{AHEf{CEdAIAh}}}{{KB`{IBl}}}}\",[]]De[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{Nd}}}}}{{KBj{{KB`{JNf}}AGLh}}}}\",[]]Bm[\"{{{AHEf{CEdAIDl}}D@n}{{KBj{JOnBABb}}}}\",[]]Bo[\"{{COn{AHEf{CEdc}}}{{KBj{BENnIBf}}}Oh}\",[\"R\"]]Bf[\"{{{AHEf{CEdAGId}}}{{KB`{HOn}}}}\",[]]Ec[\"{{{AHEf{BB@l}}AIG`{AHEf{CEd{JL`{AIBl}}}}{AHEf{CEd{JL`{AALn}}}}}{{KBl{JNf}}}}\",[]]Cn[\"{{{AHEf{BE@f}}HOh{AHEf{CEd{AAj{Nd}}}}}{{KBj{HOjANKl}}}}\",[]]Cn[\"{{{AHEf{BE@h}}HOh{AHEf{CEd{AAj{Nd}}}}}{{KBj{HOjANKn}}}}\",[]]C`[\"{{{AHEf{CEdAGId}}HOnD@n}{{KBj{HOjBEAl}}}}\",[]]Cc[\"{{{AHEf{BB@l}}AIG`{AHEf{AANj}}}{{KBl{HOj}}}}\",[]]Bn[\"{{{AHEf{CEdBFMh}}CLd}{{AHEf{CEdBFMh}}}}\",[]]Bn[\"{{{AHEf{CEdBFMj}}CLd}{{AHEf{CEdBFMj}}}}\",[]]Aj[\"{{{AHEf{AIAf}}}COl}\",[]]Aj[\"{{{AHEf{AIAh}}}COn}\",[]]Cn[\"{{{AHEf{NDn}}{AHEf{{JL`{Nd}}}}{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Cn[\"{{{AHEf{NE`}}{AHEf{{JL`{Nd}}}}{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]A`[\"{BB@dCLf}\",[]]A`[\"{AANfJNf}\",[]]A`[\"{AANhJNf}\",[]]o[\"{IDdD@n}\",[]]Bm[\"{{{AHEf{CEdAIDj}}KDf}{{KBj{HOjAOLn}}}}\",[]]Bm[\"{{{AHEf{CEdBEO`}}KDf}{{KBj{HOjAOLn}}}}\",[]]Bm[\"{{{AHEf{CEdAIDl}}KDh}{{KBj{HOjAOMf}}}}\",[]]Bn[\"{{{AHEf{AIFl}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BANl}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BDHf}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{AIFn}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BANn}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bn[\"{{{AHEf{BDHh}}{AHEf{CL`}}}{{KB`{HOn}}}}\",[]]Bd[\"{{{AHEf{BDEf}}}{{KB`{BA@`}}}}\",[]]Bg[\"{{{Nn{BDOn}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{AGHh}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{ANL`}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{BAAb}}NEdCLb}{{Of{AIAj}}}}\",[]]Bg[\"{{{Nn{BE@`}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{AGHj}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{ANLb}}NEdCLb}{{Of{AIAl}}}}\",[]]Bg[\"{{{Nn{BAAd}}NEdCLb}{{Of{AIAl}}}}\",[]]Ai[\"{BEN`{{Nn{BE@`}}}}\",[]]o[\"{I@`HOn}\",[]]A`[\"{AANlCLf}\",[]]o[\"{NIfJNf}\",[]]o[\"{I@bHOn}\",[]]A`[\"{AANnCLf}\",[]]o[\"{NIhJNf}\",[]]Aa[\"{ANJlBBKj}\",[]]Ai[\"{{{AHEf{A@l}}}A@l}\",[]]Ak[\"{{{AHEf{ANN`}}}ANN`}\",[]]Ak[\"{{{AHEf{ANK`}}}ANK`}\",[]]Ak[\"{{{AHEf{AIAf}}}AIAf}\",[]]Ak[\"{{{AHEf{BFFl}}}BFFl}\",[]]Ak[\"{{{AHEf{BEAj}}}BEAj}\",[]]Ak[\"{{{AHEf{AAJf}}}AAJf}\",[]]Ak[\"{{{AHEf{B@Nn}}}B@Nn}\",[]]Ai[\"{{{AHEf{KAd}}}KAd}\",[]]Ai[\"{{{AHEf{CNn}}}CNn}\",[]]Ak[\"{{{AHEf{BB@n}}}BB@n}\",[]]Ak[\"{{{AHEf{BB@`}}}BB@`}\",[]]Ak[\"{{{AHEf{AGLh}}}AGLh}\",[]]Ak[\"{{{AHEf{AIDn}}}AIDn}\",[]]Ak[\"{{{AHEf{BAOn}}}BAOn}\",[]]Ak[\"{{{AHEf{AIGb}}}AIGb}\",[]]Ak[\"{{{AHEf{B@C`}}}B@C`}\",[]]Ai[\"{{{AHEf{KDf}}}KDf}\",[]]Ak[\"{{{AHEf{BFFf}}}BFFf}\",[]]Ai[\"{{{AHEf{KBd}}}KBd}\",[]]Ak[\"{{{AHEf{AANl}}}AANl}\",[]]Ak[\"{{{AHEf{AIBb}}}AIBb}\",[]]Ak[\"{{{AHEf{AGLb}}}AGLb}\",[]]Ak[\"{{{AHEf{BBL`}}}BBL`}\",[]]Ai[\"{{{AHEf{NIf}}}NIf}\",[]]Ak[\"{{{AHEf{AOLn}}}AOLn}\",[]]Ak[\"{{{AHEf{BBKh}}}BBKh}\",[]]Ak[\"{{{AHEf{BBNf}}}BBNf}\",[]]Ak[\"{{{AHEf{BEDj}}}BEDj}\",[]]Ak[\"{{{AHEf{BEFh}}}BEFh}\",[]]Ak[\"{{{AHEf{ANLj}}}ANLj}\",[]]Ak[\"{{{AHEf{BAM`}}}BAM`}\",[]]Ak[\"{{{AHEf{B@Bd}}}B@Bd}\",[]]Ak[\"{{{AHEf{BFMh}}}BFMh}\",[]]Ak[\"{{{AHEf{AOLb}}}AOLb}\",[]]Ak[\"{{{AHEf{ANKf}}}ANKf}\",[]]Ak[\"{{{AHEf{AGJb}}}AGJb}\",[]]Ak[\"{{{AHEf{BBKb}}}BBKb}\",[]]Ak[\"{{{AHEf{BDDd}}}BDDd}\",[]]Ak[\"{{{AHEf{AOMj}}}AOMj}\",[]]Ak[\"{{{AHEf{AON`}}}AON`}\",[]]Ak[\"{{{AHEf{AONj}}}AONj}\",[]]Ak[\"{{{AHEf{BEI`}}}BEI`}\",[]]Ak[\"{{{AHEf{AIBh}}}AIBh}\",[]]Ai[\"{{{AHEf{COl}}}COl}\",[]]Ag[\"{{{AHEf{Ol}}}Ol}\",[]]Ak[\"{{{AHEf{AAMb}}}AAMb}\",[]]Ag[\"{{{AHEf{O`}}}O`}\",[]]Ak[\"{{{AHEf{AGHh}}}AGHh}\",[]]Ai[\"{{{AHEf{I@h}}}I@h}\",[]]Ak[\"{{{AHEf{ANL`}}}ANL`}\",[]]Ai[\"{{{AHEf{NF`}}}NF`}\",[]]Ak[\"{{{AHEf{BAAb}}}BAAb}\",[]]Ai[\"{{{AHEf{IBb}}}IBb}\",[]]Ak[\"{{{AHEf{BDGn}}}BDGn}\",[]]Ak[\"{{{AHEf{BFEl}}}BFEl}\",[]]Ak[\"{{{AHEf{BDHb}}}BDHb}\",[]]Ai[\"{{{AHEf{KDh}}}KDh}\",[]]Ak[\"{{{AHEf{BFFh}}}BFFh}\",[]]Ak[\"{{{AHEf{BEAl}}}BEAl}\",[]]Ai[\"{{{AHEf{KBf}}}KBf}\",[]]Ak[\"{{{AHEf{B@Al}}}B@Al}\",[]]Ak[\"{{{AHEf{AIDb}}}AIDb}\",[]]Ak[\"{{{AHEf{AGL`}}}AGL`}\",[]]Ak[\"{{{AHEf{BEAh}}}BEAh}\",[]]Ak[\"{{{AHEf{BEHh}}}BEHh}\",[]]Ak[\"{{{AHEf{AI@n}}}AI@n}\",[]]Ak[\"{{{AHEf{AANn}}}AANn}\",[]]Ak[\"{{{AHEf{AIBd}}}AIBd}\",[]]Ak[\"{{{AHEf{AGLd}}}AGLd}\",[]]Ak[\"{{{AHEf{BBLb}}}BBLb}\",[]]Ak[\"{{{AHEf{AGLj}}}AGLj}\",[]]Ak[\"{{{AHEf{BABb}}}BABb}\",[]]Ai[\"{{{AHEf{NIh}}}NIh}\",[]]Ak[\"{{{AHEf{AIGd}}}AIGd}\",[]]Ak[\"{{{AHEf{ANLh}}}ANLh}\",[]]Ak[\"{{{AHEf{BB@b}}}BB@b}\",[]]Ak[\"{{{AHEf{AOMf}}}AOMf}\",[]]Ak[\"{{{AHEf{BBKj}}}BBKj}\",[]]Ak[\"{{{AHEf{AGKl}}}AGKl}\",[]]Ak[\"{{{AHEf{BAKn}}}BAKn}\",[]]Ak[\"{{{AHEf{BGAb}}}BGAb}\",[]]Ak[\"{{{AHEf{BBNh}}}BBNh}\",[]]Ak[\"{{{AHEf{BEDl}}}BEDl}\",[]]Ak[\"{{{AHEf{BEFj}}}BEFj}\",[]]Ak[\"{{{AHEf{ANLl}}}ANLl}\",[]]Ak[\"{{{AHEf{BAMb}}}BAMb}\",[]]Ak[\"{{{AHEf{B@Bh}}}B@Bh}\",[]]Ak[\"{{{AHEf{BFMj}}}BFMj}\",[]]Ak[\"{{{AHEf{AOLf}}}AOLf}\",[]]Ak[\"{{{AHEf{ANKh}}}ANKh}\",[]]Ak[\"{{{AHEf{AGJd}}}AGJd}\",[]]Ak[\"{{{AHEf{AIC`}}}AIC`}\",[]]Ak[\"{{{AHEf{AIEn}}}AIEn}\",[]]Ak[\"{{{AHEf{AONd}}}AONd}\",[]]Ak[\"{{{AHEf{BBKf}}}BBKf}\",[]]Ak[\"{{{AHEf{BDDh}}}BDDh}\",[]]Ak[\"{{{AHEf{AAIj}}}AAIj}\",[]]Ak[\"{{{AHEf{BDE`}}}BDE`}\",[]]Ak[\"{{{AHEf{AOMl}}}AOMl}\",[]]Ak[\"{{{AHEf{BBMb}}}BBMb}\",[]]Ak[\"{{{AHEf{BGAj}}}BGAj}\",[]]Ak[\"{{{AHEf{AAKf}}}AAKf}\",[]]Ak[\"{{{AHEf{BEAd}}}BEAd}\",[]]Ak[\"{{{AHEf{AONb}}}AONb}\",[]]Ak[\"{{{AHEf{AONl}}}AONl}\",[]]Ak[\"{{{AHEf{BB@j}}}BB@j}\",[]]Ak[\"{{{AHEf{BEIb}}}BEIb}\",[]]Ak[\"{{{AHEf{AIBj}}}AIBj}\",[]]Ak[\"{{{AHEf{BGMf}}}BGMf}\",[]]Ai[\"{{{AHEf{COn}}}COn}\",[]]Ag[\"{{{AHEf{On}}}On}\",[]]Ak[\"{{{AHEf{AAMd}}}AAMd}\",[]]Ak[\"{{{AHEf{AGJ`}}}AGJ`}\",[]]Ak[\"{{{AHEf{BABn}}}BABn}\",[]]Ak[\"{{{AHEf{BENn}}}BENn}\",[]]Ai[\"{{{AHEf{IBf}}}IBf}\",[]]Ai[\"{{{AHEf{IBd}}}IBd}\",[]]Ak[\"{{{AHEf{BDH`}}}BDH`}\",[]]Ak[\"{{{AHEf{BFEn}}}BFEn}\",[]]Ak[\"{{{AHEf{BDHd}}}BDHd}\",[]]Ag[\"{{{AHEf{Ob}}}Ob}\",[]]Ak[\"{{{AHEf{AGHj}}}AGHj}\",[]]Ai[\"{{{AHEf{I@j}}}I@j}\",[]]Ak[\"{{{AHEf{ANLb}}}ANLb}\",[]]Ai[\"{{{AHEf{NFb}}}NFb}\",[]]Ak[\"{{{AHEf{BAAd}}}BAAd}\",[]]Ai[\"{{{AHEf{IBn}}}IBn}\",[]]Ak[\"{{{AHEf{AALn}}}AALn}\",[]]Ak[\"{{{AHEf{AANj}}}AANj}\",[]]Ak[\"{{{AHEf{AONn}}}AONn}\",[]]Ak[\"{{{AHEf{BEN`}}}BEN`}\",[]]Ak[\"{{{AHEf{BBLj}}}BBLj}\",[]]Ak[\"{{{AHEf{BGGd}}}BGGd}\",[]]Ak[\"{{{AHEf{BGGf}}}BGGf}\",[]]Bn[\"{{{AHEf{AIAf}}KDf{AHEf{{JL`{Nd}}}}}HOj}\",[]]Bn[\"{{{AHEf{AAJf}}KDf{AHEf{{JL`{Nd}}}}}HOj}\",[]]Bf[\"{{{AHEf{CNn}}}{{KBj{HOjBAKl}}}}\",[]]Bf[\"{{{AHEf{CEdAIAh}}NEdKDhHOn}HOj}\",[]]Bj[\"{{{AHEf{AON`}}}{{AHEf{{JL`{Nd}}}}}}\",[]]Bj[\"{{{AHEf{AONb}}}{{AHEf{{JL`{Nd}}}}}}\",[]]Aa[\"{BB@jAIC`}\",[]]A`[\"{AAMbCLf}\",[]]A`[\"{AAMdCLf}\",[]]A`[\"{AONjD@n}\",[]]A`[\"{AONlD@n}\",[]]l[\"{NEf}\",[]]l[\"{NEh}\",[]]Ce[\"{{{AHEf{BEEf}}{AHEf{CEdOh}}}{{KBj{AONbBEAd}}}}\",[]]Ce[\"{{{AHEf{BH@h}}{AHEf{CEdOh}}}{{KBj{AONbBEAd}}}}\",[]]Bc[\"{{{AHEf{AIAh}}}{{AAj{KBf}}}}\",[]]Bd[\"{{{AHEf{IDj}}{AHEf{CL`}}}HOj}\",[]]Am[\"{{{AHEf{ANKb}}JNf}HOj}\",[]]Ai[\"{{{AHEf{IDl}}}HOj}\",[]]Bg[\"{{{AAd{{AHEf{CEdAI@`}}}}NEd}HOj}\",[]]Bm[\"{{{AHEf{CEdAIEf}}KDf}{{KBj{HOjAOLn}}}}\",[]]Bm[\"{{{AHEf{CEdAIEh}}KDh}{{KBj{HOjAOMf}}}}\",[]]Am[\"{AAJn{{KBj{HOjAIE`}}}}\",[]]Dc[\"{{{AHEf{CEdAAJh}}AAK`{AHEf{CEd{AAj{Nd}}}}}{{KBj{AANhAIEb}}}}\",[]]Bi[\"{{{AHEf{NGh}}{AAd{{Of{K@n}}}}}HOj}\",[]]Bj[\"{{{AHEf{B@Cb}}{AAd{{Of{K@n}}}}}HOj}\",[]]Bj[\"{{{AHEf{ANNf}}{AAd{{Of{K@n}}}}}HOj}\",[]]o[\"{A@lD@n}\",[]]Ak[\"{{{AHEf{AIAf}}}BBL`}\",[]]Ak[\"{{{AHEf{AAJf}}}B@Nn}\",[]]Aj[\"{{{AHEf{CNn}}}AGLb}\",[]]An[\"{{{AHEf{CEdAIAh}}}BBLb}\",[]]Ce[\"{{{AHEf{CEdAIDd}}{KB`{KDb}}}{{AHEf{CEdAIDd}}}}\",[]]Ce[\"{{{AHEf{CEdAIDf}}{KB`{KDb}}}{{AHEf{CEdAIDf}}}}\",[]]Ck[\"{{{AHEf{CEdAIEf}}{AHEf{{JL`{Nd}}}}}{{KBj{JNfAIGb}}}}\",[]]Ck[\"{{{AHEf{CEdAIEh}}{AHEf{{JL`{Nd}}}}}{{KBj{JNfAIGd}}}}\",[]]Bl[\"{{{AHEf{BENn}}{AHEf{CEdc}}}HOjJOl}\",[\"W\"]]Aj[\"{{{AHEf{AAJf}}}JNn}\",[]]An[\"{AAJn{{KBj{AIAbBBKh}}}}\",[]]Bh[\"{{{AHEf{CEdNHj}}On}{{KB`{AAMd}}}}\",[]]Fh[\"{{{AHEf{CEdAAJh}}AAK`NEd{AHEf{CEd{AAj{Nd}}}}{KB`{{Nn{B@Bh}}}}}{{KBj{{JNd{BDE`AIAh}}{Of{ANJl}}}}}}\",[]]Am[\"{AHEf{{AHEf{c}}}{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000o[\"{NIfJNf}\",[]]o[\"{NIhJNf}\",[]]A`[\"{A@lANK`}\",[]]Bc[\"{{AIElBAKjA@l}{{KBn{ANKb}}}}\",[]]Aj[\"{AIEl{{KBl{AAJf}}}}\",[]]B`[\"{{}{{KBj{HOj{Of{IAd}}}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}BBKh}\",[]]Be[\"{{{AHEf{AAJh}}}{{AHEf{BAMb}}}}\",[]]o[\"{NdBEI`}\",[]]A`[\"{AIBbCLf}\",[]]o[\"{B@BdNn}\",[]]o[\"{NdBEIb}\",[]]A`[\"{AIBdCLf}\",[]]o[\"{B@BhNn}\",[]]A`[\"{BB@jKB`}\",[]]Bl[\"{{{AHEf{CEdc}}}{{KBj{KDfBABn}}}Oh}\",[\"B\"]]Bl[\"{{{AHEf{CEdc}}}{{KBj{KBdBABn}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{AGJbBABn}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{BEI`BABn}}}Oh}\",[\"B\"]]Bm[\"{{{AHEf{CEdc}}}{{KBj{AAMbBABn}}}Oh}\",[\"B\"]]Bh[\"{{{AHEf{CEdc}}}{{KCb{KDh}}}Oh}\",[\"B\"]]Bh[\"{{{AHEf{CEdc}}}{{KCb{KBf}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AGJd}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AIC`}}}Oh}\",[\"B\"]]Ek[\"{{{AHEf{CEd{K@l{AAI`}}}}{AHEf{c}}{AHEf{{JL`{CLd}}}}D@n}{{KBj{BBMbBEAd}}}{BEEfIDh}}\",[\"\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{BEIb}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AAMd}}}Oh}\",[\"B\"]]Bi[\"{{{AHEf{CEdc}}}{{KCb{AGIf}}}Oh}\",[\"B\"]]A`[\"{AALnKB`}\",[]]Bk[\"{{{AHEf{KDf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KBd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGJb}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{BEI`}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAMb}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KDh}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bk[\"{{{AHEf{KBf}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGJd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AIC`}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAIj}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{BEIb}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AAMd}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bl[\"{{{AHEf{AGIl}}{AHEf{CEdc}}}HOjJOl}\",[\"B\"]]Bj[\"{{{AHEf{CEdAIEf}}}{{KBj{HOjAOLn}}}}\",[]]Bj[\"{{{AHEf{CEdAIEh}}}{{KBj{HOjANLh}}}}\",[]]An[\"{{{AHEf{ANOb}}AAJb}HOj}\",[]]Ea[\"{{{AHEf{CEdAAJh}}NEdAGJ`{KB`{AONl}}AAI`{AHEf{CEd{AAj{Nd}}}}}{{KB`{B@Nj}}}}\",[]]o[\"{CNbNEf}\",[]]o[\"{CNdNEh}\",[]]A`[\"{AAJnHOj}\",[]]Ba[\"{{{AHEf{CEdAAJh}}AAK`}HOj}\",[]]Bh[\"{{{AHEf{AIFl}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BANl}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BDHf}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{AIFn}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BANn}}{AHEf{CL`}}HOn}HOj}\",[]]Bh[\"{{{AHEf{BDHh}}{AHEf{CL`}}HOn}HOj}\",[]]A`[\"{AGHnD@n}\",[]]o[\"{I@`CLf}\",[]]o[\"{I@bCLf}\",[]]Ce[\"{{{AHEf{CEdAIAj}}NEdNEdCLfD@n{AHEf{B@Aj}}}HOj}\",[]]Cc[\"{{{AHEf{CEdO`}}NEdNEdCLfD@n{AHEf{B@Aj}}}HOj}\",[]]Cd[\"{{{AHEf{CEdI@h}}NEdNEdCLfD@n{AHEf{B@Aj}}}HOj}\",[]]Cd[\"{{{AHEf{CEdNF`}}NEdNEdCLfD@n{AHEf{B@Aj}}}HOj}\",[]]Ce[\"{{{AHEf{CEdAIAl}}NEdNEdCLfD@n{AHEf{B@Al}}}HOj}\",[]]Cc[\"{{{AHEf{CEdOb}}NEdNEdCLfD@n{AHEf{B@Al}}}HOj}\",[]]Cd[\"{{{AHEf{CEdI@j}}NEdNEdCLfD@n{AHEf{B@Al}}}HOj}\",[]]Cd[\"{{{AHEf{CEdNFb}}NEdNEdCLfD@n{AHEf{B@Al}}}HOj}\",[]]o[\"{CNbNEf}\",[]]o[\"{CNdNEh}\",[]]o[\"{BDI`Nd}\",[]]A`[\"{BBKbHOn}\",[]]A`[\"{BDDdHOn}\",[]]A`[\"{BBKfHOn}\",[]]A`[\"{BDDhHOn}\",[]]A`[\"{BB@jKDb}\",[]]Aa[\"{BALbBBKj}\",[]]Aa[\"{AGGdBEAh}\",[]]Bg[\"{{{AHEf{AAJf}}AGMb}{{KBl{HOj}}}}\",[]]A`[\"{AAJnHOj}\",[]]Cf[\"{{{AHEf{CEdAAJh}}AAK`{AHEf{CEd{AAj{Nd}}}}}AANh}\",[]]l[\"{NEf}\",[]]Ak[\"{{{AHEf{AGJ`}}}AIEl}\",[]]l[\"{NEh}\",[]]An[\"{{AAJdA@l}{{KBn{HOj}}}}\",[]]B`[\"{{B@BdAIEl}{{KBl{AAJf}}}}\",[]]Bb[\"{B@B`{{KBj{HOj{Of{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BEAj}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BB@`}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AGLh}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AIDn}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BAOn}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{AIGb}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{B@C`}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BBKh}}}{{KB`{{AHEf{IAd}}}}}}\",[]]Bk[\"{{{AHEf{BBKj}}}{{KB`{{AHEf{IAd}}}}}}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AANjKB`}\",[]]Bg[\"{{{AHEf{CNn}}}{{KBj{AID`AI@h}}}}\",[]]Aa[\"{B@AfAIDb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]A`[\"{AALnJNf}\",[]]Aa[\"{AGLbAANl}\",[]]Aa[\"{BBL`AANl}\",[]]Aa[\"{AGLdAANn}\",[]]Aa[\"{BBLbAANn}\",[]]3210Dh[\"{{{AHEf{NDn}}{AHEf{{JL`{Nd}}}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjANKl}}}}\",[]]Dh[\"{{{AHEf{NE`}}{AHEf{{JL`{Nd}}}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjANKn}}}}\",[]]Aj[\"{{{AHEf{AIAj}}}CLf}\",[]]Ah[\"{{{AHEf{O`}}}CLf}\",[]]Ai[\"{{{AHEf{I@h}}}CLf}\",[]]Ai[\"{{{AHEf{NF`}}}CLf}\",[]]Aj[\"{{{AHEf{AIAl}}}CLf}\",[]]Ah[\"{{{AHEf{Ob}}}CLf}\",[]]Ai[\"{{{AHEf{I@j}}}CLf}\",[]]Ai[\"{{{AHEf{NFb}}}CLf}\",[]]Aj[\"{{{AHEf{BFLf}}}JNf}\",[]]Aj[\"{{{AHEf{BFLh}}}JNf}\",[]]Aj[\"{{{AHEf{BGLl}}}JNf}\",[]]Aj[\"{{{AHEf{BGMf}}}JNf}\",[]]o[\"{A@lJNf}\",[]]n[\"{{}ND`}\",[]]0o[\"{OjAAId}\",[]]111Ba[\"{{AHEf{AHEf{c}}}AALh{}}\",[\"K\"]]0000000000000000000Cg[\"{{{AHEf{AAJf}}AIEl{AHEf{CL`}}}{{KBj{AIAbAOMj}}}}\",[]]Dl[\"{{{AHEf{CEdAAJh}}NEdAOLfAIEl{AHEf{CL`}}}{{KBj{{JNd{BDE`AIAh}}AOMl}}}}\",[]]Bd[\"{{{AHEf{AAJn}}}{{KB`{BDEd}}}}\",[]]Dm[\"{{{AHEf{AGKf}}KBdCLf{AHEf{{JL`{Nd}}}}{AHEf{CEdAAI`}}}{{KBj{HOjANKl}}}}\",[]]Ca[\"{{{AHEf{AGJh}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Bd[\"{{{AHEf{AAK`}}}{{KB`{BDEf}}}}\",[]]Dm[\"{{{AHEf{AGKh}}KBfCLf{AHEf{{JL`{Nd}}}}{AHEf{CEdAAI`}}}{{KBj{HOjANKn}}}}\",[]]Ca[\"{{{AHEf{AGJj}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]o[\"{{}ANO`}\",[]]n[\"{{}IDj}\",[]]o[\"{{}ANKb}\",[]]o[\"{{}B@Ml}\",[]]o[\"{{}B@Nn}\",[]]n[\"{{}KDf}\",[]]n[\"{{}KBd}\",[]]o[\"{{}AANl}\",[]]o[\"{{}AIBb}\",[]]o[\"{{}AGLb}\",[]]o[\"{{}BBL`}\",[]]n[\"{{}NIf}\",[]]o[\"{{}AOLn}\",[]]o[\"{{}BBNf}\",[]]o[\"{{}BEDj}\",[]]o[\"{{}BEFh}\",[]]o[\"{{}ANLj}\",[]]o[\"{{}BAM`}\",[]]o[\"{{}BFMh}\",[]]o[\"{{}BDHf}\",[]]o[\"{{}AGHh}\",[]]o[\"{{}ANL`}\",[]]o[\"{{}BAAb}\",[]]o[\"{{}BE@b}\",[]]o[\"{{}B@Mn}\",[]]o[\"{{}BGLl}\",[]]n[\"{{}KDh}\",[]]n[\"{{}KBf}\",[]]o[\"{{}AIDb}\",[]]o[\"{{}AI@n}\",[]]o[\"{{}AANn}\",[]]o[\"{{}AIBd}\",[]]o[\"{{}AGLd}\",[]]o[\"{{}BBLb}\",[]]n[\"{{}NIh}\",[]]o[\"{{}BB@b}\",[]]o[\"{{}AOMf}\",[]]o[\"{{}BBNh}\",[]]o[\"{{}BEDl}\",[]]o[\"{{}BEFj}\",[]]o[\"{{}ANLl}\",[]]o[\"{{}BAMb}\",[]]o[\"{{}BFMj}\",[]]o[\"{{}BGMf}\",[]]o[\"{{}BDHh}\",[]]o[\"{{}AGHj}\",[]]o[\"{{}ANLb}\",[]]o[\"{{}BAAd}\",[]]o[\"{{}BE@d}\",[]]o[\"{{}AALn}\",[]]n[\"{{}IDl}\",[]]o[\"{{}BBLj}\",[]]o[\"{{}B@Nl}\",[]]Ak[\"{{{AHEf{BAAh}}}AONb}\",[]]Ak[\"{{{AHEf{BBMb}}}AONb}\",[]]Aa[\"{BGAjAONb}\",[]]Aa[\"{BEIdAONb}\",[]]A`[\"{CNfAONb}\",[]]A`[\"{ID`AONb}\",[]]A`[\"{IDdAONb}\",[]]Aa[\"{BDI`AONb}\",[]]Cg[\"{{{AHEf{AGKf}}KBdCLf{AHEf{CEd{JL`{Nd}}}}JNf}HOj}\",[]]Ca[\"{{{AHEf{AGJh}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Cg[\"{{{AHEf{AGKh}}KBfCLf{AHEf{CEd{JL`{Nd}}}}JNf}HOj}\",[]]Ca[\"{{{AHEf{AGJj}}JNf{AHEf{CEd{JL`{Nd}}}}}HOj}\",[]]Aj[\"{{{AHEf{AIDj}}}D@n}\",[]]Aj[\"{{{AHEf{BEO`}}}D@n}\",[]]Ak[\"{{{AHEf{AIAj}}}BE@b}\",[]]Ai[\"{{{AHEf{O`}}}BE@b}\",[]]Aj[\"{{{AHEf{I@h}}}BE@b}\",[]]Aj[\"{{{AHEf{NF`}}}BE@b}\",[]]Ak[\"{{{AHEf{AIAl}}}BE@d}\",[]]Ai[\"{{{AHEf{Ob}}}BE@d}\",[]]Aj[\"{{{AHEf{I@j}}}BE@d}\",[]]Aj[\"{{{AHEf{NFb}}}BE@d}\",[]]Bn[\"{{{AHEf{CEdBBNf}}CLb}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}CLb}{{AHEf{CEdBBNh}}}}\",[]]Bf[\"{{{AHEf{CEdAIAj}}NEdCLfCLf}HOj}\",[]]Bd[\"{{{AHEf{CEdO`}}NEdCLfCLf}HOj}\",[]]Bf[\"{{{AHEf{CEdAIAl}}NEdCLfCLf}HOj}\",[]]Bd[\"{{{AHEf{CEdOb}}NEdCLfCLf}HOj}\",[]]Aj[\"{{{AHEf{AIAf}}}KAf}\",[]]Bc[\"{{{AHEf{AALf}}}{{KB`{KBd}}}}\",[]]Aa[\"{BGAjAONb}\",[]]Aa[\"{BEIdAONb}\",[]]A`[\"{CNfAONb}\",[]]A`[\"{ID`AONb}\",[]]Aa[\"{BDI`AONb}\",[]]Aj[\"{{{AHEf{AIEf}}}NHb}\",[]]Bn[\"{{{AHEf{AIEh}}}{{KBj{{KB`{KDh}}AOMf}}}}\",[]]o[\"{A@lJNf}\",[]]o[\"{IDjJNf}\",[]]Am[\"{{{AHEf{CEdAIAh}}}NHj}\",[]]Aj[\"{{{AHEf{AGKf}}}JNf}\",[]]Aj[\"{{{AHEf{AGKh}}}JNf}\",[]]A`[\"{AHEfKDd}\",[]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Bd[\"{{{AHEf{BFFl}}}{{KB`{AIAf}}}}\",[]]Bc[\"{{{AHEf{BB@n}}}{{KB`{CNn}}}}\",[]]Bn[\"{{{AHEf{CEdAOLb}}CLd}{{AHEf{CEdAOLb}}}}\",[]]Bn[\"{{{AHEf{CEdAOLf}}CLd}{{AHEf{CEdAOLf}}}}\",[]]A`[\"{BGAjCLd}\",[]]A`[\"{BEIdCLd}\",[]]o[\"{CNfCLd}\",[]]o[\"{ID`CLd}\",[]]A`[\"{AGHnKB`}\",[]]Aa[\"{AANjAHEf}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Aa[\"{BB@dAAJb}\",[]]A`[\"{JOnBB@b}\",[]]Aa[\"{AGLbAIBb}\",[]]Aa[\"{BBL`AIBb}\",[]]Aa[\"{AGLdAIBd}\",[]]Aa[\"{BBLbAIBd}\",[]]3210Bg[\"{{{AHEf{CEdc}}JNf}AON`{OhIDh}}\",[\"\"]]Bg[\"{{{AHEf{CEdc}}JNf}AONb{OhIDh}}\",[\"\"]]o[\"{{}BBMd}\",[]]o[\"{{}BBMf}\",[]]A`[\"{CLfBGLl}\",[]]Cd[\"{{{AHEf{CL`}}}{{KBn{ANN`c}}}{}}\",[\"FromStr::Err\"]]Cd[\"{{{AHEf{CL`}}}{{KBn{ANK`c}}}{}}\",[\"FromStr::Err\"]]o[\"{CLdKDf}\",[]]o[\"{CLdKDh}\",[]]Al[\"{CLf{{KBj{KDfBFFf}}}}\",[]]Al[\"{CLf{{KBj{KDhBFFh}}}}\",[]]Aa[\"{BFDnANKj}\",[]]Aa[\"{BH@jB@Oj}\",[]]Aa[\"{BFE`ANKj}\",[]]Aa[\"{BH@lB@Oj}\",[]]Af[\"{{}{{KB`{Ab}}}}\",[]]0000Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]Bo[\"{{{AHEf{CEdBEFh}}AAJb}{{AHEf{CEdBEFh}}}}\",[]]Bo[\"{{{AHEf{CEdBEFj}}AAJb}{{AHEf{CEdBEFj}}}}\",[]]Ao[\"{{{Of{AIAj}}}{{Of{Nl}}}}\",[]]Am[\"{{{Of{O`}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{I@h}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{NF`}}}{{Of{Nl}}}}\",[]]Ao[\"{{{Of{AIAl}}}{{Of{Nl}}}}\",[]]Am[\"{{{Of{Ob}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{I@j}}}{{Of{Nl}}}}\",[]]An[\"{{{Of{NFb}}}{{Of{Nl}}}}\",[]]Aj[\"{{{AHEf{BFFl}}}D@n}\",[]]Bo[\"{{{AHEf{CEdBFMh}}AAJb}{{AHEf{CEdBFMh}}}}\",[]]Bo[\"{{{AHEf{CEdBFMj}}AAJb}{{AHEf{CEdBFMj}}}}\",[]]Bc[\"{{{AHEf{AIAb}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AIAf}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AAJn}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AAK`}}}{{KB`{KAb}}}}\",[]]Bc[\"{{{AHEf{AGJ`}}}{{KB`{KAb}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bc[\"{{{AHEf{AGId}}}{{KB`{JNf}}}}\",[]]Am[\"{{{AHEf{ANOb}}JNf}HOj}\",[]]Aj[\"{{{AHEf{AIAf}}}NFf}\",[]]Bg[\"{{{AHEf{AIEf}}}{{KBj{CCnAOLn}}}}\",[]]Bg[\"{{{AHEf{AIEh}}}{{KBj{CCnAOMf}}}}\",[]]A`[\"{B@ObKB`}\",[]]A`[\"{B@OdKB`}\",[]]A`[\"{AGHnKB`}\",[]]A`[\"{ANJlKB`}\",[]]Ck[\"{{{AHEf{CEdBAM`}}{KB`{{IEf{Nd}}}}}{{AHEf{CEdBAM`}}}}\",[]]Ck[\"{{{AHEf{CEdBAMb}}{KB`{{IEf{Nd}}}}}{{AHEf{CEdBAMb}}}}\",[]]A`[\"{BE@bKB`}\",[]]A`[\"{BE@dKB`}\",[]]Ac[\"{AHEfc{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Ao[\"{c{{KBj{e}}}{}{}}\",[\"U\",\"T\"]]000000000000000000000000000000000000000000000000000Al[\"{HOh{{KBj{KDfBFFf}}}}\",[]]Al[\"{JNf{{KBj{KDfBFFf}}}}\",[]]2Al[\"{CLf{{KBj{KDfBFFf}}}}\",[]]333333333333333Aj[\"{AAJb{{KBj{ANLj}}}}\",[]]44444Ai[\"{CLf{{KBj{AGJb}}}}\",[]]5555555555555555555555555555Aj[\"{AOL`{{KBj{BDGn}}}}\",[]]Bb[\"{{{Nn{AOL`}}}{{KBj{BDGn}}}}\",[]]777Bb[\"{{{Nn{B@Bb}}}{{KBj{BDHb}}}}\",[]]Aj[\"{B@Bb{{KBj{BDHb}}}}\",[]]999999999999999999999Al[\"{JNf{{KBj{KDhBFFh}}}}\",[]]Al[\"{HOh{{KBj{KDhBFFh}}}}\",[]]Al[\"{CLf{{KBj{KDhBFFh}}}}\",[]]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Bm[\"{AOL`{{KBj{BDH`c}}}{}}\",[\"TryFrom::Error\"]]Ce[\"{{{Nn{AOL`}}}{{KBj{BDH`c}}}{}}\",[\"TryFrom::Error\"]]Ao[\"{c{{KBj{e}}}{}{}}\",[\"U\",\"T\"]]0Ce[\"{{{Nn{B@Bb}}}{{KBj{BDHdc}}}{}}\",[\"TryFrom::Error\"]]Bm[\"{B@Bb{{KBj{BDHdc}}}{}}\",[\"TryFrom::Error\"]]22222222222222222222222Aj[\"{{}{{KBj{c}}}{}}\",[\"U\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cd[\"{{{AAd{{AHEf{CEdc}}}}{AHEf{CEdNDb}}}COf{}}\",[\"F\"]]000000000Cc[\"{{{AHEf{BB@l}}AIG`{AHEf{AANj}}}{{KBl{HOj}}}}\",[]]Bk[\"{{{AHEf{BFLf}}AON`}{{KBj{HOjAIBh}}}}\",[]]Bk[\"{{{AHEf{BFLh}}AONb}{{KBj{HOjAIBj}}}}\",[]]0Bk[\"{{{AHEf{BGLl}}AONb}{{KBj{HOjAIBj}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AAHn}\",[]]Bi[\"{{{AHEf{CEdB@Cd}}}{{KBj{KDfIB`}}}}\",[]]Bi[\"{{{AHEf{CEdB@Cd}}}{{KBj{COlIB`}}}}\",[]]Bh[\"{{{AHEf{CEdB@Cd}}}{{KBj{OlIB`}}}}\",[]]Bj[\"{{{AHEf{CEdB@Cd}}}{{KBj{AAMbIB`}}}}\",[]]Bf[\"{{{AHEf{CEdB@Cd}}}{{KC`{KDh}}}}\",[]]Bf[\"{{{AHEf{CEdB@Cd}}}{{KC`{COn}}}}\",[]]Be[\"{{{AHEf{CEdB@Cd}}}{{KC`{On}}}}\",[]]Bg[\"{{{AHEf{CEdB@Cd}}}{{KC`{AAMd}}}}\",[]]Aa[\"{ANK`BFFd}\",[]]Bc[\"{{{AHEf{AIAj}}}{{Of{AIAj}}}}\",[]]Ba[\"{{{AHEf{O`}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{I@h}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{NF`}}}{{Of{AIAj}}}}\",[]]Bc[\"{{{AHEf{AIAl}}}{{Of{AIAl}}}}\",[]]Ba[\"{{{AHEf{Ob}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{I@j}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{NFb}}}{{Of{AIAl}}}}\",[]]A`[\"{AANlCLf}\",[]]An[\"{{{AHEf{CEdAIAh}}}AGId}\",[]]A`[\"{AANnCLf}\",[]]C`[\"{{{AHEf{CEdAON`}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]C`[\"{{{AHEf{CEdAONb}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]Ah[\"{Nd{{KB`{AONj}}}}\",[]]Ah[\"{Nd{{KB`{AONl}}}}\",[]]Ah[\"{Nd{{KB`{AONn}}}}\",[]]A`[\"{AAMbCOl}\",[]]A`[\"{AAMdCOn}\",[]]Bi[\"{AIAb{{KBj{{JNd{AIAfBBO`}}AIAb}}}}\",[]]Aa[\"{{}c{}}\",[\"I\"]]o[\"{COlD@n}\",[]]o[\"{COnD@n}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]21Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Bn[\"{{{AHEf{CEdB@Bd}}D@n}{{AHEf{CEdB@Bd}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}D@n}{{AHEf{CEdB@Bh}}}}\",[]]Bl[\"{{{AHEf{NGh}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{B@Cb}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{ANNf}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Ak[\"{{{AHEf{AIAf}}}AALd}\",[]]Bc[\"{{{AHEf{AIAf}}AIElAID`}AALf}\",[]]Ce[\"{{{AHEf{CEdAIAh}}AGJ`AIDbNEd}{{KBj{KBfAGKl}}}}\",[]]43Bm[\"{{{AHEf{CEdAIAh}}KBf}{{KBj{HOjAI@n}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdBFF`}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBDD`}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdAICn}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBENb}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]Ec[\"{{{AHEf{CEdAIDj}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBj{JNfAGLh}}}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEdNGb}}}{{COf{{KBl{HOj}}}}}}\",[]]Ef[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Fg[\"{{{AHEf{CEdBAKh}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{AIBl}}}}{AHEf{CEd{JL`{AALn}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Dn[\"{{{AAd{{AHEf{CEdAGM`}}}}{AHEf{AANj}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]>=Cd[\"{{{AHEf{CEdBAM`}}{Nn{NDn}}}{{AHEf{CEdBAM`}}}}\",[]]Cd[\"{{{AHEf{CEdBAMb}}{Nn{NE`}}}{{AHEf{CEdBAMb}}}}\",[]]Cj[\"{{{AHEf{B@Bf}}CLdAON`{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHb}}CLdAON`{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{B@Bj}}CLdAONb{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHd}}CLdAONb{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BGGf}}CLdAOMn{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Bb[\"{JNf{{JNd{JNf{KB`{JNf}}}}}}\",[]]000Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]A`[\"{AHEfKDb}\",[]]00000000000000000000000000000000000000000000000000000000000000Ce[\"{{{AHEf{CEdB@Bd}}{Nn{BE@f}}}{{AHEf{CEdB@Bd}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bh}}{Nn{BE@h}}}{{AHEf{CEdB@Bh}}}}\",[]]A`[\"{BGAjICf}\",[]]o[\"{B@BdNn}\",[]]o[\"{B@BhNn}\",[]]Aj[\"{{{AHEf{AAJf}}}HOj}\",[]]Ck[\"{{{AHEf{CEdAIEf}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}JNf}\",[]]Ak[\"{{{AHEf{AIAf}}}AGGh}\",[]]Ba[\"{{{AHEf{CEdAANl}}AANl}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBb}}AIBb}HOj}\",[]]Ba[\"{{{AHEf{CEdBBL`}}AGLb}HOj}\",[]]Ba[\"{{{AHEf{CEdAANn}}AANn}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBd}}AIBd}HOj}\",[]]Ba[\"{{{AHEf{CEdBBLb}}AGLd}HOj}\",[]]Bn[\"{{{AHEf{CEdBBNf}}D@n}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}D@n}{{AHEf{CEdBBNh}}}}\",[]]Bi[\"{{{AHEf{CEd}}}{{AHEf{CEdc}}}{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Bc[\"{{AHEf{AHEf{CEdc}}}HOj{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cc[\"{{{AHEf{CEdAIAh}}NEdKBfKDh}{{KBj{HOjBAKn}}}}\",[]]A`[\"{AGHnD@n}\",[]]B`[\"{{AHEf{AHEf{c}}}D@n{}}\",[\"K\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Aa[\"{BBKbBEI`}\",[]]A`[\"{BDDdKDf}\",[]]Aa[\"{BBKfBEIb}\",[]]A`[\"{BDDhKDh}\",[]]A`[\"{BDOfKDh}\",[]]A`[\"{BBMhKDh}\",[]]o[\"{NGnKDh}\",[]]Aa[\"{BBKbAIBn}\",[]]Aa[\"{BBKfAIC`}\",[]]o[\"{KDfCLf}\",[]]o[\"{KDhCLf}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]Aj[\"{{{AHEf{B@Nl}}}D@n}\",[]]Bd[\"{{{AHEf{BAKh}}}{{KBl{AIEl}}}}\",[]]Bd[\"{{{AHEf{AAJf}}}{{KBl{AIEl}}}}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{AGLdCLf}\",[]]Cb[\"{{{AHEf{BBLj}}{AHEf{AIEd}}CLf}{{Nn{ANOb}}}}\",[]]Bn[\"{{{AHEf{CEdBBNf}}D@n}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}D@n}{{AHEf{CEdBBNh}}}}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AGLb}}}}\",[]]Bj[\"{{{AHEf{CEdAIAh}}KBf}{{KB`{AGLd}}}}\",[]]o[\"{AGIhOf}\",[]]Db[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]00Eg[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBj{JNfAIGb}}}}}}\",[]]Ec[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]0Bm[\"{{{AHEf{IDl}}{AHEf{CNl}}}{{KBl{HOj}}}}\",[]]Cd[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cd[\"{{{AHEf{CEdBEO`}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cn[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{Nd}}}}}{{KBj{HOjBAOn}}}}\",[]]Bj[\"{{{AHEf{CNn}}AID`}{{KBj{HOjBEHf}}}}\",[]]Bn[\"{{{AHEf{CEdAIDd}}NEd}{{AHEf{CEdAIDd}}}}\",[]]Bn[\"{{{AHEf{CEdAIDf}}NEd}{{AHEf{CEdAIDf}}}}\",[]]A`[\"{BB@dAFd}\",[]]o[\"{IDjCLf}\",[]]o[\"{{}AIEl}\",[]]0o[\"{{}AHEf}\",[]]Bj[\"{{AAJn{Nn{B@Bd}}}{{KBj{AIAbBBKh}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bh[\"{{{AHEf{AGHn}}AIEl}{{KBn{AGMb}}}}\",[]]A`[\"{AGLbCLb}\",[]]Aj[\"{{{AHEf{AIAh}}}CLb}\",[]]A`[\"{AGLdCLb}\",[]]Ce[\"{{{AHEf{CEdAIDd}}{KB`{KDb}}}{{AHEf{CEdAIDd}}}}\",[]]Ce[\"{{{AHEf{CEdAIDf}}{KB`{KDb}}}{{AHEf{CEdAIDf}}}}\",[]]Aa[\"{AANfAIEl}\",[]]Aa[\"{AANhAIEl}\",[]]Aa[\"{AANjAIEl}\",[]]Aa[\"{AIElAGJ`}\",[]]o[\"{A@lCLb}\",[]]Bn[\"{{{AHEf{CEdBBNf}}CLb}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}CLb}{{AHEf{CEdBBNh}}}}\",[]]A`[\"{AGHnCLb}\",[]]Bo[\"{{{AHEf{CEdBBNf}}AAJb}{{AHEf{CEdBBNf}}}}\",[]]Bo[\"{{{AHEf{CEdBBNh}}AAJb}{{AHEf{CEdBBNh}}}}\",[]]A`[\"{AGHnKB`}\",[]]k[\"{{}}\",[]]0000000000Bh[\"{AAJnc{}}\",[\"IntoFuture::IntoFuture\"]]11A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]o[\"{A@lJNf}\",[]]Ao[\"{{AHEfc}{{NEj{c}}}{}}\",[\"S\"]]0C`[\"{{{AHEf{CEdAIAj}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdO`}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]C`[\"{{{AHEf{CEdAIAl}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdOb}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bk[\"{{{AHEf{CEdIDl}}NEd{AHEf{BBLj}}}HOj}\",[]]A`[\"{BE@bKB`}\",[]]A`[\"{BE@dKB`}\",[]]Bn[\"{{{AHEf{KDf}}{AHEf{KDf}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBd}}{AHEf{KBd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANLj}}{AHEf{ANLj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AON`}}{AHEf{AON`}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COl}}{AHEf{COl}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{Ol}}{AHEf{Ol}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KDh}}{AHEf{KDh}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEAl}}{AHEf{BEAl}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBf}}{AHEf{KBf}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BABb}}{AHEf{BABb}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANLl}}{AHEf{ANLl}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BDE`}}{AHEf{BDE`}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEAd}}{AHEf{BEAd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AONb}}{AHEf{AONb}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COn}}{AHEf{COn}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{On}}{AHEf{On}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}{{KB`{AALh}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AICn}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AIDbAI@n}}}}\",[]]Df[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{HOn}}}}}{{KBj{{KB`{JNf}}AGLh}}}}\",[]]Cc[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{AAj{Nd}}BB@`}}}}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIDl}\",[]]Aj[\"{{{AHEf{AGJh}}}JNf}\",[]]Aj[\"{{{AHEf{AGJj}}}JNf}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIEh}\",[]]Bn[\"{{{AHEf{CEdBBNf}}CLf}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}CLf}{{AHEf{CEdBBNh}}}}\",[]]A`[\"{AGHnKB`}\",[]]A`[\"{B@ObKB`}\",[]]A`[\"{B@OdKB`}\",[]]Ce[\"{{{AHEf{CEdB@Bd}}{Nn{AIFd}}}{{AHEf{CEdB@Bd}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bh}}{Nn{AIFf}}}{{AHEf{CEdB@Bh}}}}\",[]]Ce[\"{{{AHEf{CEdAOLb}}{Nn{AIFl}}}{{AHEf{CEdAOLb}}}}\",[]]Ce[\"{{{AHEf{CEdAOLf}}{Nn{AIFn}}}{{AHEf{CEdAOLf}}}}\",[]]o[\"{A@lCLf}\",[]]Bn[\"{{{AHEf{CEdBEFh}}CLb}{{AHEf{CEdBEFh}}}}\",[]]Bn[\"{{{AHEf{CEdBEFj}}CLb}{{AHEf{CEdBEFj}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}BFFl}\",[]]Aj[\"{{{AHEf{CNn}}}BB@n}\",[]]Ai[\"{{{Nn{B@Bf}}}B@Bd}\",[]]Ai[\"{{{Nn{B@Bj}}}B@Bh}\",[]]Aj[\"{{BBMdc}BBMdAAMl}\",[\"\"]]Aj[\"{{BBMfc}BBMfAAMl}\",[\"\"]]Bm[\"{{{AHEf{CEdAIEf}}HOn}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}KAb}\",[]]o[\"{ND`ND`}\",[]]0000Bd[\"{{{AHEf{BFLf}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BFLh}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGLl}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGMf}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{AIAf}}}{{KB`{BBKh}}}}\",[]]Ck[\"{{{AHEf{AAJf}}AOLbAIEl{AHEf{CL`}}}{{KBj{AIAbAOMj}}}}\",[]]Ak[\"{{{AHEf{B@Al}}}AAJb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{AIDhD@n}{{KBn{JNf}}}}\",[]]Cj[\"{{{AHEf{NGj}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFh}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Cj[\"{{{AHEf{NGl}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFj}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]A`[\"{BFDnAAj}\",[]]A`[\"{BH@jAAj}\",[]]A`[\"{BFE`AAj}\",[]]A`[\"{BH@lAAj}\",[]]An[\"{{{AHEf{CEdBFLf}}}AON`}\",[]]An[\"{{{AHEf{CEdBFLh}}}AONb}\",[]]An[\"{{{AHEf{CEdBGLl}}}AONb}\",[]]An[\"{{{AHEf{CEdBGMf}}}AONb}\",[]]Ak[\"{{{AHEf{BB@l}}}B@@b}\",[]]Ba[\"{{{AHEf{CEdAIAh}}BBKn}HOj}\",[]]Bo[\"{{{AHEf{CEdAAJh}}BDE`B@Nl}{{KB`{BBKn}}}}\",[]]B`[\"{{{AHEf{NGj}}AON`COl}CNb}\",[]]Bn[\"{{{AHEf{B@Bf}}CLdAON`}{{KBj{CNbBEIh}}}}\",[]]Ba[\"{{{AHEf{AIFh}}AON`COl}CNb}\",[]]Bn[\"{{{AHEf{BDHb}}CLdAON`}{{KBj{CNbBEIh}}}}\",[]]B`[\"{{{AHEf{NGl}}AONbCOn}CNd}\",[]]Bn[\"{{{AHEf{B@Bj}}CLdAONb}{{KBj{CNdBEIn}}}}\",[]]Ba[\"{{{AHEf{AIFj}}AONbCOn}CNd}\",[]]Bn[\"{{{AHEf{BDHd}}CLdAONb}{{KBj{CNdBEIn}}}}\",[]]Bn[\"{{{AHEf{BGGf}}CLdAOMn}{{KBj{CNdBEIn}}}}\",[]]Aj[\"{{}{{NGd{c}}}{}}\",[\"T\"]]0A`[\"{AGLbCLf}\",[]]A`[\"{AGLdCLf}\",[]]Bn[\"{{{AHEf{CEdB@Bd}}JNf}{{AHEf{CEdB@Bd}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}JNf}{{AHEf{CEdB@Bh}}}}\",[]]Aj[\"{{{AHEf{BAKh}}}D@n}\",[]]0Aj[\"{{{AHEf{BB@l}}}D@n}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AGJ`AI@n}}}}\",[]]Cb[\"{{{AHEf{BBLj}}{AHEf{AIDh}}CLf}{{Nn{ANOb}}}}\",[]]Ak[\"{{{AHEf{AAJn}}}AON`}\",[]]Ak[\"{{{AHEf{AAK`}}}AONb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bf[\"{{{AHEf{CEdAIAh}}}{{KB`{NEd}}}}\",[]]Ce[\"{{{AHEf{CEdBBNf}}{Nn{ANMh}}}{{AHEf{CEdBBNf}}}}\",[]]Ce[\"{{{AHEf{CEdBBNh}}{Nn{ANMj}}}{{AHEf{CEdBBNh}}}}\",[]]43A`[\"{A@lANN`}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AANjKB`}\",[]]Ai[\"{{{AHEf{NHj}}}JNf}\",[]]Bo[\"{{{AHEf{CEdBGLl}}AAJb}{{AHEf{CEdBGLl}}}}\",[]]Bo[\"{{{AHEf{CEdBGMf}}AAJb}{{AHEf{CEdBGMf}}}}\",[]]Bj[\"{{{AHEf{AIEf}}CCn}{{KBj{HOjAOLn}}}}\",[]]Bm[\"{{{AHEf{CEdAIEh}}CCn}{{KBj{HOjAOMf}}}}\",[]]==E`[\"{{{AHEf{BGAl}}{AHEf{{JL`{Nd}}}}{AHEf{BAKj}}{AHEf{BFLj}}}{{KBj{BGDbIAl}}}}\",[]]0Bf[\"{{{Nn{BABh}}}{{KBj{AOLbBFFj}}}}\",[]]Bf[\"{{{Nn{BABh}}}{{KBj{AOLfBFFj}}}}\",[]]Bn[\"{{{AHEf{CEdBEDj}}KDf}{{AHEf{CEdBEDj}}}}\",[]]Bn[\"{{{AHEf{CEdBEDl}}KDh}{{AHEf{CEdBEDl}}}}\",[]]o[\"{ND`ND`}\",[]]0000Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]0Ci[\"{{{AHEf{CNn}}{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@h}}}}\",[]]Cd[\"{{{AHEf{CEdA@l}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cc[\"{{{AHEf{CEdOj}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAAId}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAGHn}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdA@n}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdAA`}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bd}}BFMh}{{AHEf{CEdB@Bd}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bh}}BFMj}{{AHEf{CEdB@Bh}}}}\",[]]Aj[\"{{{AHEf{BAM`}}}CLf}\",[]]Aj[\"{{{AHEf{BAMb}}}CLf}\",[]]Cc[\"{{{AHEf{CEdAOLb}}{Nn{A`}}}{{AHEf{CEdAOLb}}}}\",[]]Cc[\"{{{AHEf{CEdAOLf}}{Nn{A`}}}{{AHEf{CEdAOLf}}}}\",[]]Cj[\"{{BAM`{KB`{B@Bd}}{Of{BAKh}}{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Ca[\"{{{AHEf{CEdAIAh}}NEdAICd}{{KBj{HOjBGAb}}}}\",[]]Bd[\"{{{AHEf{BGAl}}}{{AAj{BBMl}}}}\",[]]Bj[\"{{{AHEf{AIAf}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bm[\"{{{AHEf{CEdAIAh}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bn[\"{{{AHEf{CEdBBNf}}JNf}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}JNf}{{AHEf{CEdBBNh}}}}\",[]]Bl[\"{{}{{KBj{{JNd{BAKjBEGd}}{Of{IAd}}}}}}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{{AHEf{AAJf}}AOLb}HOj}\",[]]Dc[\"{{{AHEf{CEdAIAh}}NEdKBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]o[\"{{}AHEf}\",[]]Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]Bn[\"{{{AHEf{CEdB@Bd}}CLf}{{AHEf{CEdB@Bd}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}CLf}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdBBNf}}KDf}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}KDh}{{AHEf{CEdBBNh}}}}\",[]]:Bb[\"{{{AHEf{CEdAIAh}}OnKDh}HOj}\",[]]Ak[\"{{}{{KBj{AOLbIBb}}}}\",[]]Ak[\"{{}{{KBj{AOLfIBd}}}}\",[]]Bn[\"{{{AHEf{CEdBBNf}}D@n}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}D@n}{{AHEf{CEdBBNh}}}}\",[]]65Cg[\"{{{AHEf{CEdA@l}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cf[\"{{{AHEf{CEdOj}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAAId}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAGHn}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdA@n}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdAA`}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Bi[\"{{{AHEf{CEdAGJ`}}{AHEf{AGJ`}}}D@n}\",[]]n[\"{{}HOj}\",[]]Ce[\"{{{AHEf{CEdBBNf}}{KB`{JNf}}}{{AHEf{CEdBBNf}}}}\",[]]Ce[\"{{{AHEf{CEdBBNh}}{KB`{JNf}}}{{AHEf{CEdBBNh}}}}\",[]]Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Cd[\"{{{AHEf{CEdAIAh}}NEd}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Am[\"{{{AHEf{CEdAIAj}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@h}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIAl}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@j}}}HOj}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]Bj[\"{{{AHEf{AIAf}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bm[\"{{{AHEf{CEdAIAh}}AIEl}{{KBj{HOjIBh}}}}\",[]]D`[\"{{{AHEf{CEdAIAh}}KBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]Ce[\"{{{AHEf{CEdBBNf}}{Nn{BDOn}}}{{AHEf{CEdBBNf}}}}\",[]]Ce[\"{{{AHEf{CEdBBNh}}{Nn{BE@`}}}{{AHEf{CEdBBNh}}}}\",[]]Cf[\"{{{AHEf{CEdBBNf}}{KB`{AAJb}}}{{AHEf{CEdBBNf}}}}\",[]]Cf[\"{{{AHEf{CEdBBNh}}{KB`{AAJb}}}{{AHEf{CEdBBNh}}}}\",[]]Aa[\"{B@ObAICb}\",[]]Aa[\"{B@OdAICb}\",[]]9Bn[\"{{{AHEf{CEdBBNf}}D@n}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}D@n}{{AHEf{CEdBBNh}}}}\",[]]Am[\"{{{AHEf{AIAf}}KDf}HOj}\",[]]o[\"{ND`ND`}\",[]]Bn[\"{{{AHEf{CEdBBNf}}CLd}{{AHEf{CEdBBNf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNh}}CLd}{{AHEf{CEdBBNh}}}}\",[]]3109854Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Bn[\"{{{AHEf{AIAh}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]10A`[\"{BENnKB`}\",[]]Bm[\"{{{AHEf{CEdBBNf}}Nd}{{AHEf{CEdBBNf}}}}\",[]]Bm[\"{{{AHEf{CEdBBNh}}Nd}{{AHEf{CEdBBNh}}}}\",[]]o[\"{{}AICd}\",[]]") \ No newline at end of file diff --git a/pr/561/docs/search.index/function/ac69efe09325.js b/pr/561/docs/search.index/function/ac69efe09325.js new file mode 100644 index 000000000..82b83ed44 --- /dev/null +++ b/pr/561/docs/search.index/function/ac69efe09325.js @@ -0,0 +1 @@ +rd_("Bf[\"{{{AHEf{ANKd}}{AHEf{ANKd}}}D@n}\",[]]Bf[\"{{{AHEf{BEBb}}{AHEf{BEBb}}}D@n}\",[]]Bd[\"{{{AHEf{KAd}}{AHEf{KAd}}}D@n}\",[]]Bd[\"{{{AHEf{CNn}}{AHEf{CNn}}}D@n}\",[]]Bf[\"{{{AHEf{BBAf}}{AHEf{BBAf}}}D@n}\",[]]Bf[\"{{{AHEf{BB@h}}{AHEf{BB@h}}}D@n}\",[]]Bf[\"{{{AHEf{AGLh}}{AHEf{AGLh}}}D@n}\",[]]Bf[\"{{{AHEf{AIDn}}{AHEf{AIDn}}}D@n}\",[]]Bf[\"{{{AHEf{BB@f}}{AHEf{BB@f}}}D@n}\",[]]Bf[\"{{{AHEf{AIGb}}{AHEf{AIGb}}}D@n}\",[]]Bf[\"{{{AHEf{B@Cd}}{AHEf{B@Cd}}}D@n}\",[]]Bd[\"{{{AHEf{KDf}}{AHEf{KDf}}}D@n}\",[]]Bf[\"{{{AHEf{BFFn}}{AHEf{BFFn}}}D@n}\",[]]Bd[\"{{{AHEf{I@`}}{AHEf{I@`}}}D@n}\",[]]Bd[\"{{{AHEf{KBd}}{AHEf{KBd}}}D@n}\",[]]Bf[\"{{{AHEf{AANl}}{AHEf{AANl}}}D@n}\",[]]Bf[\"{{{AHEf{AIBb}}{AHEf{AIBb}}}D@n}\",[]]Bf[\"{{{AHEf{AGLb}}{AHEf{AGLb}}}D@n}\",[]]Bd[\"{{{AHEf{NIf}}{AHEf{NIf}}}D@n}\",[]]Bf[\"{{{AHEf{AOMb}}{AHEf{AOMb}}}D@n}\",[]]Bf[\"{{{AHEf{BBL`}}{AHEf{BBL`}}}D@n}\",[]]Bf[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}D@n}\",[]]Bf[\"{{{AHEf{ANKj}}{AHEf{ANKj}}}D@n}\",[]]Bf[\"{{{AHEf{AGJb}}{AHEf{AGJb}}}D@n}\",[]]Bf[\"{{{AHEf{BBKj}}{AHEf{BBKj}}}D@n}\",[]]Bf[\"{{{AHEf{BDDl}}{AHEf{BDDl}}}D@n}\",[]]Bf[\"{{{AHEf{AOMn}}{AHEf{AOMn}}}D@n}\",[]]Bf[\"{{{AHEf{AONd}}{AHEf{AONd}}}D@n}\",[]]Bf[\"{{{AHEf{AONn}}{AHEf{AONn}}}D@n}\",[]]Bf[\"{{{AHEf{BEIh}}{AHEf{BEIh}}}D@n}\",[]]Bd[\"{{{AHEf{COl}}{AHEf{COl}}}D@n}\",[]]Bb[\"{{{AHEf{Ol}}{AHEf{Ol}}}D@n}\",[]]Bf[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}D@n}\",[]]Bf[\"{{{AHEf{BGIh}}{AHEf{BGIh}}}D@n}\",[]]Bd[\"{{{AHEf{IBb}}{AHEf{IBb}}}D@n}\",[]]Bd[\"{{{AHEf{KDh}}{AHEf{KDh}}}D@n}\",[]]Bf[\"{{{AHEf{BFG`}}{AHEf{BFG`}}}D@n}\",[]]Bd[\"{{{AHEf{I@b}}{AHEf{I@b}}}D@n}\",[]]Bf[\"{{{AHEf{BEBd}}{AHEf{BEBd}}}D@n}\",[]]Bd[\"{{{AHEf{KBf}}{AHEf{KBf}}}D@n}\",[]]Bf[\"{{{AHEf{AIDb}}{AHEf{AIDb}}}D@n}\",[]]Bf[\"{{{AHEf{AGL`}}{AHEf{AGL`}}}D@n}\",[]]Bf[\"{{{AHEf{BEB`}}{AHEf{BEB`}}}D@n}\",[]]Bf[\"{{{AHEf{BEI`}}{AHEf{BEI`}}}D@n}\",[]]Bf[\"{{{AHEf{AI@n}}{AHEf{AI@n}}}D@n}\",[]]Bf[\"{{{AHEf{AANn}}{AHEf{AANn}}}D@n}\",[]]Bf[\"{{{AHEf{AIBd}}{AHEf{AIBd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLd}}{AHEf{AGLd}}}D@n}\",[]]Bf[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}D@n}\",[]]Bf[\"{{{AHEf{BABj}}{AHEf{BABj}}}D@n}\",[]]Bd[\"{{{AHEf{NIh}}{AHEf{NIh}}}D@n}\",[]]Bf[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}D@n}\",[]]Bf[\"{{{AHEf{ANLl}}{AHEf{ANLl}}}D@n}\",[]]Bf[\"{{{AHEf{ANOb}}{AHEf{ANOb}}}D@n}\",[]]Bf[\"{{{AHEf{BB@j}}{AHEf{BB@j}}}D@n}\",[]]Bf[\"{{{AHEf{AOMj}}{AHEf{AOMj}}}D@n}\",[]]Bf[\"{{{AHEf{BBLb}}{AHEf{BBLb}}}D@n}\",[]]Bf[\"{{{AHEf{AGKl}}{AHEf{AGKl}}}D@n}\",[]]Bf[\"{{{AHEf{BALf}}{AHEf{BALf}}}D@n}\",[]]Bf[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}D@n}\",[]]Bf[\"{{{AHEf{ANKl}}{AHEf{ANKl}}}D@n}\",[]]Bf[\"{{{AHEf{AGJd}}{AHEf{AGJd}}}D@n}\",[]]Bf[\"{{{AHEf{BANd}}{AHEf{BANd}}}D@n}\",[]]Bf[\"{{{AHEf{AIC`}}{AHEf{AIC`}}}D@n}\",[]]Bf[\"{{{AHEf{AIEn}}{AHEf{AIEn}}}D@n}\",[]]Bf[\"{{{AHEf{AONh}}{AHEf{AONh}}}D@n}\",[]]Bf[\"{{{AHEf{BBKn}}{AHEf{BBKn}}}D@n}\",[]]Bf[\"{{{AHEf{BDE`}}{AHEf{BDE`}}}D@n}\",[]]Bf[\"{{{AHEf{BDEh}}{AHEf{BDEh}}}D@n}\",[]]Bf[\"{{{AHEf{AON`}}{AHEf{AON`}}}D@n}\",[]]Bf[\"{{{AHEf{AAKf}}{AHEf{AAKf}}}D@n}\",[]]Bf[\"{{{AHEf{BEAl}}{AHEf{BEAl}}}D@n}\",[]]Bf[\"{{{AHEf{AONf}}{AHEf{AONf}}}D@n}\",[]]Bf[\"{{{AHEf{AOO`}}{AHEf{AOO`}}}D@n}\",[]]Bf[\"{{{AHEf{BBAb}}{AHEf{BBAb}}}D@n}\",[]]Bf[\"{{{AHEf{BEIj}}{AHEf{BEIj}}}D@n}\",[]]Bd[\"{{{AHEf{COn}}{AHEf{COn}}}D@n}\",[]]Bb[\"{{{AHEf{On}}{AHEf{On}}}D@n}\",[]]Bf[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}D@n}\",[]]Bf[\"{{{AHEf{AGJ`}}{AHEf{AGJ`}}}D@n}\",[]]Bf[\"{{{AHEf{BACf}}{AHEf{BACf}}}D@n}\",[]]Bf[\"{{{AHEf{BEOf}}{AHEf{BEOf}}}D@n}\",[]]Bd[\"{{{AHEf{IBf}}{AHEf{IBf}}}D@n}\",[]]Bf[\"{{{AHEf{BGIj}}{AHEf{BGIj}}}D@n}\",[]]Bd[\"{{{AHEf{IBd}}{AHEf{IBd}}}D@n}\",[]]Bf[\"{{{AHEf{AOOb}}{AHEf{AOOb}}}D@n}\",[]]Ai[\"{{{AHEf{CNn}}}KBd}\",[]]Aj[\"{{{AHEf{BBAf}}}KBd}\",[]]Ak[\"{{{AHEf{AIDj}}}AAMb}\",[]]Ak[\"{{{AHEf{BEOh}}}AAMb}\",[]]Ak[\"{{{AHEf{AIEf}}}AAMb}\",[]]o[\"{KAhKBf}\",[]]A`[\"{AGGdKBf}\",[]]A`[\"{AGIhKBf}\",[]]A`[\"{B@AjKBf}\",[]]A`[\"{B@@lKBf}\",[]]Aa[\"{AALjAAMd}\",[]]Aa[\"{AAObAAMd}\",[]]Aa[\"{AAJjAAMd}\",[]]A`[\"{NGnAAMd}\",[]]A`[\"{ANNdNGf}\",[]]A`[\"{CNfAAKf}\",[]]Ac[\"{{AANlAANl}}\",[]]Ac[\"{{AIBbAIBb}}\",[]]Ac[\"{{BBLhAGLb}}\",[]]Bc[\"{{AANnAANn}c{}}\",[\"Add::Output\"]]Bc[\"{{AIBdAIBd}c{}}\",[\"Add::Output\"]]Bc[\"{{BBLjAGLd}c{}}\",[\"Add::Output\"]]Be[\"{{{AHEf{KDf}}{AHEf{KDf}}}AALh}\",[]]Be[\"{{{AHEf{KBd}}{AHEf{KBd}}}AALh}\",[]]Bg[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}AALh}\",[]]Bg[\"{{{AHEf{AONd}}{AHEf{AONd}}}AALh}\",[]]Be[\"{{{AHEf{COl}}{AHEf{COl}}}AALh}\",[]]Bc[\"{{{AHEf{Ol}}{AHEf{Ol}}}AALh}\",[]]Bg[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}AALh}\",[]]Be[\"{{{AHEf{KDh}}{AHEf{KDh}}}AALh}\",[]]Bg[\"{{{AHEf{BEBd}}{AHEf{BEBd}}}AALh}\",[]]Be[\"{{{AHEf{KBf}}{AHEf{KBf}}}AALh}\",[]]Bg[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}AALh}\",[]]Bg[\"{{{AHEf{BABj}}{AHEf{BABj}}}AALh}\",[]]Bg[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}AALh}\",[]]Bg[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}AALh}\",[]]Bg[\"{{{AHEf{BDEh}}{AHEf{BDEh}}}AALh}\",[]]Bg[\"{{{AHEf{BEAl}}{AHEf{BEAl}}}AALh}\",[]]Bg[\"{{{AHEf{AONf}}{AHEf{AONf}}}AALh}\",[]]Be[\"{{{AHEf{COn}}{AHEf{COn}}}AALh}\",[]]Bc[\"{{{AHEf{On}}{AHEf{On}}}AALh}\",[]]Bg[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}AALh}\",[]]o[\"{AAMbOl}\",[]]o[\"{AAMdOn}\",[]]n[\"{KAjOn}\",[]]o[\"{AGHbOn}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AALnKB`}\",[]]A`[\"{AANjKB`}\",[]]Bh[\"{{{AHEf{A@l}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANNd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@l}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGBd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFFh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIAf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFGd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEBb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAJf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Of}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KAd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AICn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BENj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIE`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BANb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{CNn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBAf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEOh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@h}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGLh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIDn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BB@f}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Cf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANNj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@Cd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NHb}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{KDf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFFn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Cd[\"{{{AHEf{I@`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{KBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AIBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGLb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBLh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NIf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOMb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBL`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBMl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BBNn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEEb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEG`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANLn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAMh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{B@Bh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BFN`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AOLf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANKj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AGJb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BBKj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BDDl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AOMn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AONd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AONn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEIh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AIBh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BDHn}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{COl}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{Ol}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AAMb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{AANf}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cc[\"{{{AHEf{O`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{AGHh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{I@h}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANLd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{NF`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BAAj}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BE@j}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BGIh}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{ANL`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Ce[\"{{{AHEf{BEJ`}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]Cd[\"{{{AHEf{IBb}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Ce[\"{{{AHEf{BFFd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{AIAh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAJh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{KDh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BFG`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{I@b}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEBd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{KBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{B@B`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIDb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGL`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEB`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEI`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AI@n}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIBd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBLj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGLj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BABj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{NIh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIGd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANLl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANOb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BB@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOMj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBLb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BALf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGAj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBO`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEEd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEGb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANM`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAMj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Bl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BFNb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOLj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANKl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AGJd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BANd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIC`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIEn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AONh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBKn}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDE`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAIj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BDEh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AON`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{ANK`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AIEb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BAB`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBMj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGBb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AAKf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEAl}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BBLf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{B@Od}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AONf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AOO`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBAb}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BEIj}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AIBj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BGMn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BDI`}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{COn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bg[\"{{{AHEf{On}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AAMd}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{AANh}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGJ`}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BACf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BEOf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bi[\"{{{AHEf{BGIj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BEJf}}{AHEf{CEdAGIn}}}KBh}\",[]]Cd[\"{{{AHEf{IBd}}{AHEf{CEdAGIn}}}{{KBj{HOjIAb}}}}\",[]]0Bi[\"{{{AHEf{BFFf}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bg[\"{{{AHEf{Ob}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AGHj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{I@j}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{ANLf}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{NFb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BAAl}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BE@l}}{AHEf{CEdAGIn}}}KBh}\",[]]Bh[\"{{{AHEf{IBh}}{AHEf{CEdAGIn}}}KBh}\",[]]0Bh[\"{{{AHEf{IBn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{BBAd}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AALn}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AANj}}{AHEf{CEdAGIn}}}KBh}\",[]]Bi[\"{{{AHEf{AOOb}}{AHEf{CEdAGIn}}}KBh}\",[]]Bd[\"{{{AHEf{BFFh}}}{{KB`{AIEl}}}}\",[]]Ak[\"{{{AHEf{B@B`}}}AAJb}\",[]]A`[\"{AANlCLf}\",[]]A`[\"{AANnCLf}\",[]]Aj[\"{{{AHEf{BAB`}}}JNf}\",[]]A`[\"{BGBbCLf}\",[]]o[\"{CNfCLf}\",[]]A`[\"{AALnJNf}\",[]]Ce[\"{{{AHEf{CEdBFN`}}{Nn{AAMn}}}{{AHEf{CEdBFN`}}}}\",[]]Ce[\"{{{AHEf{CEdBFNb}}{Nn{AAN`}}}{{AHEf{CEdBFNb}}}}\",[]]8Af[\"{{AAJbCLf}BB@l}\",[]]Ag[\"{{}{{Nn{BGBd}}}}\",[]]Ae[\"{{JNfCLd}B@Nd}\",[]]Cd[\"{{BAMh{KB`{B@Bh}}AGMb{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Ah[\"{{{Of{IEb}}}AIDd}\",[]]A`[\"{NG`BBMl}\",[]]Ah[\"{{{Nn{NDn}}}BAMh}\",[]]Bc[\"{{{Nn{B@Bj}}{Nn{BE@n}}}B@Bh}\",[]]Ai[\"{{{Nn{AOLh}}}AOLf}\",[]]B`[\"{{{AHEf{{JL`{Nd}}}}}AONd}\",[]]Ae[\"{{CLdJNf}BDHn}\",[]]Ag[\"{{COlOlCLf}AAMb}\",[]]Aj[\"{{{Nn{AGHh}}CLb}O`}\",[]]An[\"{{{Nn{ANLd}}NEdCLb}I@h}\",[]]An[\"{{{Nn{BAAj}}NEdCLb}NF`}\",[]]Ae[\"{{JNfCLd}B@Nf}\",[]]Ah[\"{{{Of{IEb}}}AIDf}\",[]]Bm[\"{{{Nn{BAMj}}{KB`{{Nn{B@Bl}}}}D@n}AAJh}\",[]]A`[\"{JNfBHA`}\",[]]o[\"{{}BGMd}\",[]]A`[\"{NG`BBMn}\",[]]Ah[\"{{{Nn{NE`}}}BAMj}\",[]]Bc[\"{{{Nn{B@Bn}}{Nn{BEA`}}}B@Bl}\",[]]Ai[\"{{{Nn{AOLl}}}AOLj}\",[]]Ek[\"{{AAI`{AHEf{c}}{AHEf{{JL`{CLd}}}}D@n}{{KBj{{JNd{BAB`{KB`{AAI`}}}}BEAl}}}{BEEnIDh}}\",[\"\"]]B`[\"{{{AHEf{{JL`{Nd}}}}}AONf}\",[]]Af[\"{{BEIjKDb}BBAb}\",[]]A`[\"{JNfBGMn}\",[]]Ae[\"{{CLdJNf}BDI`}\",[]]Ag[\"{{COnOnCLf}AAMd}\",[]]Am[\"{{AIEl{KB`{KAb}}}AGJ`}\",[]]Aj[\"{{{Nn{AGHj}}CLb}Ob}\",[]]An[\"{{{Nn{ANLf}}NEdCLb}I@j}\",[]]An[\"{{{Nn{BAAl}}NEdCLb}NFb}\",[]]Aj[\"{AIG`{{KBl{BBAd}}}}\",[]]Aa[\"{BDHhBGGl}\",[]]Aa[\"{BDHlBGGn}\",[]]o[\"{COlCOl}\",[]]o[\"{COnCOn}\",[]]Ak[\"{{{AHEf{AIFd}}}AIFb}\",[]]Ai[\"{{{AHEf{NGh}}}NEd}\",[]]0Aj[\"{{{AHEf{B@Cf}}}NEd}\",[]]Ak[\"{{{AHEf{BACb}}}AIFb}\",[]]Ak[\"{{{AHEf{AIFf}}}AIFb}\",[]]Ak[\"{{{AHEf{BACd}}}AIFb}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLbAAJb}\",[]]Bg[\"{{{AHEf{AIAh}}KBf}{{KB`{AAJb}}}}\",[]]Aa[\"{AGLdAAJb}\",[]]Ah[\"{A@n{{KBn{HOj}}}}\",[]]Ah[\"{AA`{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Aa[\"{B@@lAIEl}\",[]]Aa[\"{AALnAIEl}\",[]]Aa[\"{BBAbBEIj}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{AAIjHOn}\",[]]Am[\"{{{AHEf{CEdAALd}}}HOj}\",[]]Am[\"{{{AHEf{CEdAAJn}}}HOj}\",[]]Al[\"{{{AHEf{CEdCNn}}}HOj}\",[]]Am[\"{{{AHEf{CEdBBAf}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIDj}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIEf}}}HOj}\",[]]Al[\"{{{AHEf{CEdJOn}}}HOj}\",[]]A`[\"{cc{}}\",[\"T\"]]0000000000000000000000Aa[\"{BBL`BEBb}\",[]]111111111111111Aa[\"{AGLhBB@h}\",[]]2Aa[\"{AIDnAGLh}\",[]]Aa[\"{BBL`AGLh}\",[]]4Aa[\"{BBL`AIDn}\",[]]Aa[\"{AGLhBB@f}\",[]]6666Aa[\"{BBL`AIGb}\",[]]Aa[\"{AOMbAIGb}\",[]]Aa[\"{B@CdAIGb}\",[]]99Aa[\"{BBL`B@Cd}\",[]]:::::::n[\"{NdKDf}\",[]]o[\"{CLbKDf}\",[]]o[\"{CLdKDf}\",[]]A`[\"{AAMbKDf}\",[]]A`[\"{BEIhKDf}\",[]]???Al[\"{cKBd{{CN`{CLd}}}}\",[\"T\"]]A`[\"{cc{}}\",[\"T\"]]00000A`[\"{I@fBBL`}\",[]]1A`[\"{IAlBBL`}\",[]]Aa[\"{ANKhBBL`}\",[]]3333A`[\"{KDfANLn}\",[]]44444Aa[\"{BBObANKj}\",[]]5Aa[\"{BFFnANKj}\",[]]6A`[\"{IAlBBKj}\",[]]777Aa[\"{BEJ`AOMn}\",[]]88A`[\"{KDfBEIh}\",[]]99999A`[\"{KDfAAMb}\",[]]:::::::::::::Aa[\"{ANOhANL`}\",[]];;;A`[\"{BANfIBb}\",[]]A`[\"{BGIfIBb}\",[]]A`[\"{BDFhIBb}\",[]]A`[\"{BAOhIBb}\",[]]A`[\"{BDH`IBb}\",[]]A`[\"{BDEbIBb}\",[]]A`[\"{BGDhIBb}\",[]]A`[\"{cc{}}\",[\"T\"]]A`[\"{AICfIBb}\",[]]A`[\"{BGJhIBb}\",[]]A`[\"{BBLlIBb}\",[]]A`[\"{BBNfIBb}\",[]]444444444444444444444444o[\"{CLbKDh}\",[]]o[\"{CLdKDh}\",[]]n[\"{NdKDh}\",[]]A`[\"{AAMdKDh}\",[]]A`[\"{BEIjKDh}\",[]]9999Al[\"{cKBf{{CN`{CLd}}}}\",[\"T\"]]:::::::::::::::::::Aa[\"{BBAbBBLb}\",[]];;;;A`[\"{AGL`IBl}\",[]]<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Bm[\"{AOLb{{KBj{BDHhc}}}{}}\",[\"TryFrom::Error\"]]Ce[\"{{{Nn{AOLb}}}{{KBj{BDHhc}}}{}}\",[\"TryFrom::Error\"]]Ao[\"{c{{KBj{e}}}{}{}}\",[\"U\",\"T\"]]00Ce[\"{{{Nn{B@Bd}}}{{KBj{BDHlc}}}{}}\",[\"TryFrom::Error\"]]Bm[\"{B@Bd{{KBj{BDHlc}}}{}}\",[\"TryFrom::Error\"]]22222222222222222222222Aj[\"{{}{{KBj{c}}}{}}\",[\"U\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cd[\"{{{AAd{{AHEf{CEdc}}}}{AHEf{CEdNDb}}}COf{}}\",[\"F\"]]000000000Cc[\"{{{AHEf{BBAd}}AIG`{AHEf{AANj}}}{{KBl{HOj}}}}\",[]]Bk[\"{{{AHEf{BFLn}}AONd}{{KBj{HOjAIBh}}}}\",[]]Bk[\"{{{AHEf{BFM`}}AONf}{{KBj{HOjAIBj}}}}\",[]]0Bk[\"{{{AHEf{BGMd}}AONf}{{KBj{HOjAIBj}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AAHn}\",[]]Bi[\"{{{AHEf{CEdB@Ch}}}{{KBj{KDfIB`}}}}\",[]]Bi[\"{{{AHEf{CEdB@Ch}}}{{KBj{COlIB`}}}}\",[]]Bh[\"{{{AHEf{CEdB@Ch}}}{{KBj{OlIB`}}}}\",[]]Bj[\"{{{AHEf{CEdB@Ch}}}{{KBj{AAMbIB`}}}}\",[]]Bf[\"{{{AHEf{CEdB@Ch}}}{{KC`{KDh}}}}\",[]]Bf[\"{{{AHEf{CEdB@Ch}}}{{KC`{COn}}}}\",[]]Be[\"{{{AHEf{CEdB@Ch}}}{{KC`{On}}}}\",[]]Bg[\"{{{AHEf{CEdB@Ch}}}{{KC`{AAMd}}}}\",[]]Aa[\"{ANKdBFFl}\",[]]Bc[\"{{{AHEf{AIAj}}}{{Of{AIAj}}}}\",[]]Ba[\"{{{AHEf{O`}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{I@h}}}{{Of{AIAj}}}}\",[]]Bb[\"{{{AHEf{NF`}}}{{Of{AIAj}}}}\",[]]Bc[\"{{{AHEf{AIAl}}}{{Of{AIAl}}}}\",[]]Ba[\"{{{AHEf{Ob}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{I@j}}}{{Of{AIAl}}}}\",[]]Bb[\"{{{AHEf{NFb}}}{{Of{AIAl}}}}\",[]]A`[\"{AANlCLf}\",[]]An[\"{{{AHEf{CEdAIAh}}}AGId}\",[]]A`[\"{AANnCLf}\",[]]C`[\"{{{AHEf{CEdAONd}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]C`[\"{{{AHEf{CEdAONf}}}{{AHEf{CEd{JL`{Nd}}}}}}\",[]]Ah[\"{Nd{{KB`{AONn}}}}\",[]]Ah[\"{Nd{{KB`{AOO`}}}}\",[]]Ah[\"{Nd{{KB`{AOOb}}}}\",[]]A`[\"{AAMbCOl}\",[]]A`[\"{AAMdCOn}\",[]]Bi[\"{AIAb{{KBj{{JNd{AIAfBBOh}}AIAb}}}}\",[]]Aa[\"{{}c{}}\",[\"I\"]]o[\"{COlD@n}\",[]]o[\"{COnD@n}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]21Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}D@n}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}D@n}{{AHEf{CEdB@Bl}}}}\",[]]Bl[\"{{{AHEf{NGh}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{B@Cf}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]Bm[\"{{{AHEf{ANNj}}NEd}{{AAd{{Of{AI@`}}}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Ak[\"{{{AHEf{AIAf}}}AALd}\",[]]Bc[\"{{{AHEf{AIAf}}AIElAID`}AALf}\",[]]Ce[\"{{{AHEf{CEdAIAh}}AGJ`AIDbNEd}{{KBj{KBfAGKl}}}}\",[]]43Bm[\"{{{AHEf{CEdAIAh}}KBf}{{KBj{HOjAI@n}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdBFFh}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBDDh}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdAICn}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]E`[\"{{{AAd{{AHEf{CEdBENj}}}}{AHEf{CEdNDb}}}{{COf{{KB`{c}}}}}{}}\",[\"Stream::Item\"]]Ef[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Ec[\"{{{AHEf{CEdAIDj}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{Nd}}}}}{{COf{{KBj{JNfAGLh}}}}}}\",[]]E`[\"{{{AAd{{AHEf{CEdAIDj}}}}{AHEf{CEdNDb}}{AHEf{CEdNGb}}}{{COf{{KBl{HOj}}}}}}\",[]]Fg[\"{{{AHEf{CEdBAL`}}{AHEf{CEdNDb}}{AHEf{CEd{JL`{AIBl}}}}{AHEf{CEd{JL`{AALn}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Dn[\"{{{AAd{{AHEf{CEdAGM`}}}}{AHEf{AANj}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]>=Cd[\"{{{AHEf{CEdBAMh}}{Nn{NDn}}}{{AHEf{CEdBAMh}}}}\",[]]Cd[\"{{{AHEf{CEdBAMj}}{Nn{NE`}}}{{AHEf{CEdBAMj}}}}\",[]]Cj[\"{{{AHEf{B@Bj}}CLdAONd{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHj}}CLdAONd{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{B@Bn}}CLdAONf{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BDHl}}CLdAONf{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Cj[\"{{{AHEf{BGGn}}CLdAONb{AHEf{{JL`{Nd}}}}}{{IEf{Nd}}}}\",[]]Bb[\"{JNf{{JNd{JNf{KB`{JNf}}}}}}\",[]]000Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]A`[\"{AHEfKDb}\",[]]00000000000000000000000000000000000000000000000000000000000000Ce[\"{{{AHEf{CEdB@Bh}}{Nn{BE@n}}}{{AHEf{CEdB@Bh}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bl}}{Nn{BEA`}}}{{AHEf{CEdB@Bl}}}}\",[]]A`[\"{BGBbICf}\",[]]o[\"{B@BhNn}\",[]]o[\"{B@BlNn}\",[]]Aj[\"{{{AHEf{AAJf}}}HOj}\",[]]Ck[\"{{{AHEf{CEdAIEf}}{AHEf{{JL`{Nd}}}}}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}JNf}\",[]]Ak[\"{{{AHEf{AIAf}}}AGGh}\",[]]Ba[\"{{{AHEf{CEdAANl}}AANl}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBb}}AIBb}HOj}\",[]]Ba[\"{{{AHEf{CEdBBLh}}AGLb}HOj}\",[]]Ba[\"{{{AHEf{CEdAANn}}AANn}HOj}\",[]]Ba[\"{{{AHEf{CEdAIBd}}AIBd}HOj}\",[]]Ba[\"{{{AHEf{CEdBBLj}}AGLd}HOj}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}D@n}{{AHEf{CEdBBO`}}}}\",[]]Bi[\"{{{AHEf{CEd}}}{{AHEf{CEdc}}}{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Bc[\"{{AHEf{AHEf{CEdc}}}HOj{}}\",[\"T\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Cc[\"{{{AHEf{CEdAIAh}}NEdKBfKDh}{{KBj{HOjBALf}}}}\",[]]A`[\"{AGHnD@n}\",[]]B`[\"{{AHEf{AHEf{c}}}D@n{}}\",[\"K\"]]00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Aa[\"{BBKjBEIh}\",[]]A`[\"{BDDlKDf}\",[]]Aa[\"{BBKnBEIj}\",[]]A`[\"{BDE`KDh}\",[]]A`[\"{BDOnKDh}\",[]]A`[\"{BBN`KDh}\",[]]o[\"{NGnKDh}\",[]]Aa[\"{BBKjAIBn}\",[]]Aa[\"{BBKnAIC`}\",[]]o[\"{KDfCLf}\",[]]o[\"{KDhCLf}\",[]]Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]Aj[\"{{{AHEf{B@Od}}}D@n}\",[]]Bd[\"{{{AHEf{BAL`}}}{{KBl{AIEl}}}}\",[]]Bd[\"{{{AHEf{AAJf}}}{{KBl{AIEl}}}}\",[]]A`[\"{AGLbCLf}\",[]]A`[\"{BBLhCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{BBLjCLf}\",[]]Cb[\"{{{AHEf{BBMb}}{AHEf{AIEd}}CLf}{{Nn{ANOf}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}D@n}{{AHEf{CEdBBO`}}}}\",[]]Bg[\"{{{AHEf{AIAf}}KBd}{{KB`{AGLb}}}}\",[]]Bj[\"{{{AHEf{CEdAIAh}}KBf}{{KB`{AGLd}}}}\",[]]o[\"{AGIhOf}\",[]]Db[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}}{{COf{{KBl{HOj}}}}}}\",[]]00Ec[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBl{JNf}}}}}}\",[]]Eg[\"{{{AAd{{AHEf{CEdAIEf}}}}{AHEf{CEdNDb}}{AHEf{{JL`{Nd}}}}}{{COf{{KBj{JNfAIGb}}}}}}\",[]]1Bm[\"{{{AHEf{IDl}}{AHEf{CNl}}}{{KBl{HOj}}}}\",[]]Cd[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cd[\"{{{AHEf{CEdBEOh}}JNf}{{KBj{{KB`{I@`}}AGLh}}}}\",[]]Cn[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{Nd}}}}}{{KBj{HOjBB@f}}}}\",[]]Bj[\"{{{AHEf{CNn}}AID`}{{KBj{HOjBEHn}}}}\",[]]Bn[\"{{{AHEf{CEdAIDd}}NEd}{{AHEf{CEdAIDd}}}}\",[]]Bn[\"{{{AHEf{CEdAIDf}}NEd}{{AHEf{CEdAIDf}}}}\",[]]A`[\"{BB@lAFd}\",[]]o[\"{IDjCLf}\",[]]o[\"{{}AIEl}\",[]]0o[\"{{}AHEf}\",[]]Bj[\"{{AAJn{Nn{B@Bh}}}{{KBj{AIAbBBL`}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bh[\"{{{AHEf{AGHn}}AIEl}{{KBn{AGMb}}}}\",[]]A`[\"{AGLbCLb}\",[]]Aj[\"{{{AHEf{AIAh}}}CLb}\",[]]A`[\"{AGLdCLb}\",[]]Ce[\"{{{AHEf{CEdAIDd}}{KB`{KDb}}}{{AHEf{CEdAIDd}}}}\",[]]Ce[\"{{{AHEf{CEdAIDf}}{KB`{KDb}}}{{AHEf{CEdAIDf}}}}\",[]]Aa[\"{AANfAIEl}\",[]]Aa[\"{AANhAIEl}\",[]]Aa[\"{AANjAIEl}\",[]]Aa[\"{AIElAGJ`}\",[]]o[\"{A@lCLb}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLb}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}CLb}{{AHEf{CEdBBO`}}}}\",[]]A`[\"{AGHnCLb}\",[]]Bo[\"{{{AHEf{CEdBBNn}}AAJb}{{AHEf{CEdBBNn}}}}\",[]]Bo[\"{{{AHEf{CEdBBO`}}AAJb}{{AHEf{CEdBBO`}}}}\",[]]A`[\"{AGHnKB`}\",[]]k[\"{{}}\",[]]0000000000Bh[\"{AAJnc{}}\",[\"IntoFuture::IntoFuture\"]]11A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]o[\"{A@lJNf}\",[]]Ao[\"{{AHEfc}{{NEj{c}}}{}}\",[\"S\"]]0C`[\"{{{AHEf{CEdAIAj}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdO`}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]C`[\"{{{AHEf{CEdAIAl}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bn[\"{{{AHEf{CEdOb}}NEdCLfD@n{KB`{CLf}}}HOj}\",[]]Bk[\"{{{AHEf{CEdIDl}}NEd{AHEf{BBMb}}}HOj}\",[]]A`[\"{BE@jKB`}\",[]]A`[\"{BE@lKB`}\",[]]Bn[\"{{{AHEf{KDf}}{AHEf{KDf}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBd}}{AHEf{KBd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANLn}}{AHEf{ANLn}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AONd}}{AHEf{AONd}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COl}}{AHEf{COl}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{Ol}}{AHEf{Ol}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMb}}{AHEf{AAMb}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KDh}}{AHEf{KDh}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEBd}}{AHEf{BEBd}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{KBf}}{AHEf{KBf}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AGLj}}{AHEf{AGLj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BABj}}{AHEf{BABj}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AIGd}}{AHEf{AIGd}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{ANM`}}{AHEf{ANM`}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BDEh}}{AHEf{BDEh}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{BEAl}}{AHEf{BEAl}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AONf}}{AHEf{AONf}}}{{KB`{AALh}}}}\",[]]Bn[\"{{{AHEf{COn}}{AHEf{COn}}}{{KB`{AALh}}}}\",[]]Bl[\"{{{AHEf{On}}{AHEf{On}}}{{KB`{AALh}}}}\",[]]C`[\"{{{AHEf{AAMd}}{AHEf{AAMd}}}{{KB`{AALh}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}AICn}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AIDbAI@n}}}}\",[]]Df[\"{{{AHEf{CEdAIDj}}{AHEf{CEd{JL`{HOn}}}}}{{KBj{{KB`{JNf}}AGLh}}}}\",[]]Cc[\"{{{AHEf{CEdAIDj}}JNf}{{KBj{{AAj{Nd}}BB@h}}}}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIDl}\",[]]Aj[\"{{{AHEf{AGJh}}}JNf}\",[]]Aj[\"{{{AHEf{AGJj}}}JNf}\",[]]Bb[\"{{{AHEf{CEdAIAh}}AAMd}AIEh}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLf}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}CLf}{{AHEf{CEdBBO`}}}}\",[]]A`[\"{AGHnKB`}\",[]]A`[\"{B@OjKB`}\",[]]A`[\"{B@OlKB`}\",[]]Ce[\"{{{AHEf{CEdB@Bh}}{Nn{AIFd}}}{{AHEf{CEdB@Bh}}}}\",[]]Ce[\"{{{AHEf{CEdB@Bl}}{Nn{AIFf}}}{{AHEf{CEdB@Bl}}}}\",[]]Ce[\"{{{AHEf{CEdAOLf}}{Nn{AIFl}}}{{AHEf{CEdAOLf}}}}\",[]]Ce[\"{{{AHEf{CEdAOLj}}{Nn{AIFn}}}{{AHEf{CEdAOLj}}}}\",[]]o[\"{A@lCLf}\",[]]Bn[\"{{{AHEf{CEdBEG`}}CLb}{{AHEf{CEdBEG`}}}}\",[]]Bn[\"{{{AHEf{CEdBEGb}}CLb}{{AHEf{CEdBEGb}}}}\",[]]Ak[\"{{{AHEf{AIAf}}}BFGd}\",[]]Aj[\"{{{AHEf{CNn}}}BBAf}\",[]]Ai[\"{{{Nn{B@Bj}}}B@Bh}\",[]]Ai[\"{{{Nn{B@Bn}}}B@Bl}\",[]]Aj[\"{{BBMlc}BBMlAAMl}\",[\"\"]]Aj[\"{{BBMnc}BBMnAAMl}\",[\"\"]]Bm[\"{{{AHEf{CEdAIEf}}HOn}{{KBj{HOjAIGb}}}}\",[]]n[\"{{}KAb}\",[]]o[\"{ND`ND`}\",[]]0000Bd[\"{{{AHEf{BFLn}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BFM`}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGMd}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{BGMn}}}{{KB`{AAJb}}}}\",[]]Bd[\"{{{AHEf{AIAf}}}{{KB`{BBL`}}}}\",[]]Ck[\"{{{AHEf{AAJf}}AOLfAIEl{AHEf{CL`}}}{{KBj{AIAbAOMn}}}}\",[]]Ak[\"{{{AHEf{B@B`}}}AAJb}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{AIDhD@n}{{KBn{JNf}}}}\",[]]Cj[\"{{{AHEf{NGj}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFh}}}{{KB`{{JNd{{Of{AGJh}}{Of{AGKf}}}}}}}}\",[]]Cj[\"{{{AHEf{NGl}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]Ck[\"{{{AHEf{AIFj}}}{{KB`{{JNd{{Of{AGJj}}{Of{AGKh}}}}}}}}\",[]]A`[\"{BFEfAAj}\",[]]A`[\"{BHAbAAj}\",[]]A`[\"{BFEhAAj}\",[]]A`[\"{BHAdAAj}\",[]]An[\"{{{AHEf{CEdBFLn}}}AONd}\",[]]An[\"{{{AHEf{CEdBFM`}}}AONf}\",[]]An[\"{{{AHEf{CEdBGMd}}}AONf}\",[]]An[\"{{{AHEf{CEdBGMn}}}AONf}\",[]]Ak[\"{{{AHEf{BBAd}}}B@@f}\",[]]Ba[\"{{{AHEf{CEdAIAh}}BBLf}HOj}\",[]]Bo[\"{{{AHEf{CEdAAJh}}BDEhB@Od}{{KB`{BBLf}}}}\",[]]B`[\"{{{AHEf{NGj}}AONdCOl}CNb}\",[]]Bn[\"{{{AHEf{B@Bj}}CLdAONd}{{KBj{CNbBEJ`}}}}\",[]]Ba[\"{{{AHEf{AIFh}}AONdCOl}CNb}\",[]]Bn[\"{{{AHEf{BDHj}}CLdAONd}{{KBj{CNbBEJ`}}}}\",[]]B`[\"{{{AHEf{NGl}}AONfCOn}CNd}\",[]]Bn[\"{{{AHEf{B@Bn}}CLdAONf}{{KBj{CNdBEJf}}}}\",[]]Ba[\"{{{AHEf{AIFj}}AONfCOn}CNd}\",[]]Bn[\"{{{AHEf{BDHl}}CLdAONf}{{KBj{CNdBEJf}}}}\",[]]Bn[\"{{{AHEf{BGGn}}CLdAONb}{{KBj{CNdBEJf}}}}\",[]]Aj[\"{{}{{NGd{c}}}{}}\",[\"T\"]]0A`[\"{AGLbCLf}\",[]]A`[\"{BBLhCLf}\",[]]A`[\"{AGLdCLf}\",[]]A`[\"{BBLjCLf}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}JNf}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}JNf}{{AHEf{CEdB@Bl}}}}\",[]]Aj[\"{{{AHEf{BAL`}}}D@n}\",[]]0Aj[\"{{{AHEf{BBAd}}}D@n}\",[]]Bk[\"{{{AHEf{AIAh}}KBf}{{KBj{AGJ`AI@n}}}}\",[]]Cb[\"{{{AHEf{BBMb}}{AHEf{AIDh}}CLf}{{Nn{ANOf}}}}\",[]]Ak[\"{{{AHEf{AAJn}}}AONd}\",[]]Ak[\"{{{AHEf{AAK`}}}AONf}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]Bf[\"{{{AHEf{CEdAIAh}}}{{KB`{NEd}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{Nn{ANMl}}}{{AHEf{CEdBBNn}}}}\",[]]Ce[\"{{{AHEf{CEdBBO`}}{Nn{ANMn}}}{{AHEf{CEdBBO`}}}}\",[]]43A`[\"{A@lANNd}\",[]]A`[\"{AANfKB`}\",[]]A`[\"{AANhKB`}\",[]]A`[\"{AANjKB`}\",[]]Ai[\"{{{AHEf{NHj}}}JNf}\",[]]Bo[\"{{{AHEf{CEdBGMd}}AAJb}{{AHEf{CEdBGMd}}}}\",[]]Bo[\"{{{AHEf{CEdBGMn}}AAJb}{{AHEf{CEdBGMn}}}}\",[]]Bj[\"{{{AHEf{AIEf}}CCn}{{KBj{HOjAOMb}}}}\",[]]Bm[\"{{{AHEf{CEdAIEh}}CCn}{{KBj{HOjAOMj}}}}\",[]]==E`[\"{{{AHEf{BGBd}}{AHEf{{JL`{Nd}}}}{AHEf{BALb}}{AHEf{BFMb}}}{{KBj{BGDjIAh}}}}\",[]]0Bf[\"{{{Nn{BAC`}}}{{KBj{AOLfBFGb}}}}\",[]]Bf[\"{{{Nn{BAC`}}}{{KBj{AOLjBFGb}}}}\",[]]Bn[\"{{{AHEf{CEdBEEb}}KDf}{{AHEf{CEdBEEb}}}}\",[]]Bn[\"{{{AHEf{CEdBEEd}}KDh}{{AHEf{CEdBEEd}}}}\",[]]o[\"{ND`ND`}\",[]]0000Aj[\"{{{AHEf{AIAh}}}D@n}\",[]]0Ci[\"{{{AHEf{CNn}}{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@h}}}}\",[]]Cd[\"{{{AHEf{CEdA@l}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cc[\"{{{AHEf{CEdOj}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAAId}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Ce[\"{{{AHEf{CEdAGHn}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdA@n}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Cd[\"{{{AHEf{CEdAA`}}{AHEf{AHOn}}}{{KBj{HOjIAn}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bh}}BFN`}{{AHEf{CEdB@Bh}}}}\",[]]Bo[\"{{{AHEf{CEdB@Bl}}BFNb}{{AHEf{CEdB@Bl}}}}\",[]]Aj[\"{{{AHEf{BAMh}}}CLf}\",[]]Aj[\"{{{AHEf{BAMj}}}CLf}\",[]]Cc[\"{{{AHEf{CEdAOLf}}{Nn{A`}}}{{AHEf{CEdAOLf}}}}\",[]]Cc[\"{{{AHEf{CEdAOLj}}{Nn{A`}}}{{AHEf{CEdAOLj}}}}\",[]]Cj[\"{{BAMh{KB`{B@Bh}}{Of{BAL`}}{Nn{NGh}}}{{KBl{AAJf}}}}\",[]]Aj[\"{{{AHEf{AAJn}}}D@n}\",[]]Aj[\"{{{AHEf{AAK`}}}D@n}\",[]]Ca[\"{{{AHEf{CEdAIAh}}NEdAICd}{{KBj{HOjBGAj}}}}\",[]]Bd[\"{{{AHEf{BGBd}}}{{AAj{BBNd}}}}\",[]]Bj[\"{{{AHEf{AIAf}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bm[\"{{{AHEf{CEdAIAh}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}JNf}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}JNf}{{AHEf{CEdBBO`}}}}\",[]]Bl[\"{{}{{KBj{{JNd{BALbBEGl}}{Of{IAd}}}}}}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]A`[\"{AIBbCLf}\",[]]A`[\"{AIBdCLf}\",[]]An[\"{{{AHEf{AAJf}}AOLf}HOj}\",[]]Dc[\"{{{AHEf{CEdAIAh}}NEdKBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]o[\"{{}AHEf}\",[]]Aj[\"{{{AHEf{AIAf}}}JNf}\",[]]Bn[\"{{{AHEf{CEdB@Bh}}CLf}{{AHEf{CEdB@Bh}}}}\",[]]Bn[\"{{{AHEf{CEdB@Bl}}CLf}{{AHEf{CEdB@Bl}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}KDf}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}KDh}{{AHEf{CEdBBO`}}}}\",[]]:Bb[\"{{{AHEf{CEdAIAh}}OnKDh}HOj}\",[]]Ak[\"{{}{{KBj{AOLfIBb}}}}\",[]]Ak[\"{{}{{KBj{AOLjIBd}}}}\",[]]Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}D@n}{{AHEf{CEdBBO`}}}}\",[]]65Cg[\"{{{AHEf{CEdA@l}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cf[\"{{{AHEf{CEdOj}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAAId}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Ch[\"{{{AHEf{CEdAGHn}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdA@n}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Cg[\"{{{AHEf{CEdAA`}}{AHEf{CEdAHOn}}}{{KBj{HOjIAn}}}}\",[]]Bi[\"{{{AHEf{CEdAGJ`}}{AHEf{AGJ`}}}D@n}\",[]]n[\"{{}HOj}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{KB`{JNf}}}{{AHEf{CEdBBNn}}}}\",[]]Ce[\"{{{AHEf{CEdBBO`}}{KB`{JNf}}}{{AHEf{CEdBBO`}}}}\",[]]Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Cd[\"{{{AHEf{CEdAIAh}}NEd}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Am[\"{{{AHEf{CEdAIAj}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@h}}}HOj}\",[]]Am[\"{{{AHEf{CEdAIAl}}}HOj}\",[]]Al[\"{{{AHEf{CEdI@j}}}HOj}\",[]]Ai[\"{AIAd{{KBn{HOj}}}}\",[]]Bj[\"{{{AHEf{AIAf}}AIEl}{{KBj{HOjIBh}}}}\",[]]Bm[\"{{{AHEf{CEdAIAh}}AIEl}{{KBj{HOjIBh}}}}\",[]]D`[\"{{{AHEf{CEdAIAh}}KBf{KB`{AAJb}}}{{KBj{{KB`{AAJb}}AI@n}}}}\",[]]Ce[\"{{{AHEf{CEdBBNn}}{Nn{BE@f}}}{{AHEf{CEdBBNn}}}}\",[]]Ce[\"{{{AHEf{CEdBBO`}}{Nn{BE@h}}}{{AHEf{CEdBBO`}}}}\",[]]Cf[\"{{{AHEf{CEdBBNn}}{KB`{AAJb}}}{{AHEf{CEdBBNn}}}}\",[]]Cf[\"{{{AHEf{CEdBBO`}}{KB`{AAJb}}}{{AHEf{CEdBBO`}}}}\",[]]Aa[\"{B@OjAICb}\",[]]Aa[\"{B@OlAICb}\",[]]9Bn[\"{{{AHEf{CEdBBNn}}D@n}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}D@n}{{AHEf{CEdBBO`}}}}\",[]]Am[\"{{{AHEf{AIAf}}KDf}HOj}\",[]]o[\"{ND`ND`}\",[]]Bn[\"{{{AHEf{CEdBBNn}}CLd}{{AHEf{CEdBBNn}}}}\",[]]Bn[\"{{{AHEf{CEdBBO`}}CLd}{{AHEf{CEdBBO`}}}}\",[]]3109854Bn[\"{{{AHEf{AIAf}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]Bn[\"{{{AHEf{AIAh}}}{{KBj{{AAj{AIEl}}IBh}}}}\",[]]10A`[\"{BEOfKB`}\",[]]Bm[\"{{{AHEf{CEdBBNn}}Nd}{{AHEf{CEdBBNn}}}}\",[]]Bm[\"{{{AHEf{CEdBBO`}}Nd}{{AHEf{CEdBBO`}}}}\",[]]o[\"{{}AICd}\",[]]") \ No newline at end of file diff --git a/pr/561/docs/search.index/generic_inverted_index/3bf32800d3c3.js b/pr/561/docs/search.index/generic_inverted_index/3bf32800d3c3.js new file mode 100644 index 000000000..22dabba2b --- /dev/null +++ b/pr/561/docs/search.index/generic_inverted_index/3bf32800d3c3.js @@ -0,0 +1 @@ +rb_("QU5kADswAAABAADnAAIAVAPmAAkMAAA7MAAAAQAAVwIqABMCFgArAg4AOwIAAD4CAABBAgMASAIBAEsCBgBXAgIAWwIFAGICAABlAgMAagIEAHACAAByAgAAdAICAHgCAQB7AgQAgQIMAI8CAgCZAgAAngIXALsCAwDAAhIA1AIDANkCAwDeAgQA5QIFAOwCBADyAgcA+wIDAAADAAACAwYACgMDAA8DAwAUAwMAIgMAACQDCwAxAw0AQwmGAMMK5gCcDwAARBABADswAAABAADQAQ0AkAACAKgF5gDKCTMAAQoPABIKBQAZChoANgoBADoKFQBTCh8AdAoFAHsKKQCnCgIArAoWADswAAABAAAUAQsAWgIAAL8CAAAwAwAAWAcTAHMKAAB6CgAApQoAAKsKAAA5DvUAog8BANoPAQA7MAAAAQAAeAEGAEEEAAAPCQEApgoAAKoKAADDDG0BUBEFADswAAABAAAGAAIArAYDALEGAgA7MAAAAQAAKQAFAD8DFAB1BQAApwYEALUGDAAKCQEAOzAAAAEAAAoAAgBeBAAAqgsJADswAAABAAAMAAEATQQMADswAAABAAAFAAIAHwwDANgQAQACPBEAAD0RAAAAAqIQAACjEAAAAALCAQAAsAYAAENqAAAAOzAAAAEAAOYACwDKCTMAAQoPABIKBQAZChoANgoBADoKFQBTCh8AdAoFAHsKKQCnCgIArAoWAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/generic_inverted_index/af48d3aa5b7a.js b/pr/561/docs/search.index/generic_inverted_index/af48d3aa5b7a.js deleted file mode 100644 index 814955c52..000000000 --- a/pr/561/docs/search.index/generic_inverted_index/af48d3aa5b7a.js +++ /dev/null @@ -1 +0,0 @@ -rb_("QU5gADswAAABAADnAAIAVAPmAAkMAAA7MAAAAQAAVwIoABMCFgArAg4AOwIAAD4CAABBAgMASAIAAEoCBgBWAgMAWwIFAGMCAABlAgMAagIFAHICAAB0AgIAeAIBAHsCBACBAgsAjgIDAJ0CFwC5AgAAuwIDAMACEQDTAgQA2QIEAN8CBADmAgQA7AIEAPICBgD6AgUAAgMFAAkDBQAQAwIAFAMDABwDAAAkAwsAMQMNAEMJhgDDCuYAmg8AAEIQAQA7MAAAAQAA0AEOAJAAAgCoBeYAygkzAAAKAAACCg4AEgoEABgKGwA2CgIAOwoUAFMKHgBzCgYAewoqAKgKAQCsChYAOzAAAAEAABQBCwBaAgAAvwIAADADAABYBxMAcgoAAHoKAACmCgAAqwoAADkO9QCgDwEA2A8BADswAAABAAB4AQYAQQQAAA8JAQCnCgAAqgoAAMMMbQFMEQUAOzAAAAEAAAYAAgCsBgMAsQYCADswAAABAAApAAUAPwMUAHUFAACnBgQAtQYMAAoJAQA7MAAAAQAACgACAF4EAACqCwkAOzAAAAEAAAwAAQBNBAwAOzAAAAEAAAUAAgAfDAMA1BABAAI4EQAAOREAAAACnhAAAJ8QAAAAAsIBAACwBgAAQ24AAAA7MAAAAQAA5gAMAMoJMwAACgAAAgoOABIKBAAYChsANgoCADsKFABTCh4AcwoGAHsKKgCoCgEArAoWAA==") \ No newline at end of file diff --git a/pr/561/docs/search.index/name/8f062fbb7465.js b/pr/561/docs/search.index/name/8f062fbb7465.js new file mode 100644 index 000000000..7e6caf648 --- /dev/null +++ b/pr/561/docs/search.index/name/8f062fbb7465.js @@ -0,0 +1 @@ +rd_("b()b->bBi0bCe00bFnbIdbOkb[]beq0000000000000000000000000000000000000000000000000000000000000000000000000000000000000bid0000000000000brtbtybu8cAck0cAddcAnycArccBbr00cBoxcBufcClicDir0cErrcMAX000cNotcOpt00cOrdcPincUni0cVeccadd00000cbbrccmp0000000000000000000cdir000cecn000cf32cf64cfmt00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cget0ci32cimpcios0clen000clog0cmincmutcnew000000000000000000000000000000000000cnoqcnot0cnow000000crtt000crun0cstrcu16cu32cu64cudpdArgsdAsFddDropdEct000dEct100dFromdHashdIntodKeys0dLong0dNonedPath00dPing0dPolldReaddSenddSide0dSyncdZERO0dacks0daddr0dbooldbulkdcodedcwnd0ddataddrop000000dfrom00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dhash00000000000000000000dinto00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dmain0000dnext0dopen00dpath0dperfdping000dpoll00000000000000dqlogdread00drecv00dseal0dsend00dsent0dside0dsign0dsize00dsmoldspindstop00dtake00000du128duniteAsRefeByteseChunk0eCloneeCloseeCubic00eDebugeDerefeError00000000000eEvent00eKnowneOther0eRangeeReset000eRetry0eShort0eSizedeStats0eSuiteeTokioeWriteealpnsearrayebenchebuild00000000ebytes00000ecauseeclone00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eclose000ecubicederef0eerroreframe0eindex0eis_ce0elocal0eparse0epaths0eprint00ereset00eretry0esliceespawn00estats000000000etitle0etokenetokioetupleeusizeewrite00fAcceptfAckEcn0fAes128fAes256fBackupfBorrowfBufMutfChunksfClient00fClosedfCrypto0fCursorfFuturefHasherfIpAddrfLaggedfOpenBifOpened000fOptionfOutputfPathId0fResult00000fServer00fStream000fStringfTypeIdfVarInt0faccept000fborrow00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fchunks0fcipherfclient0000fclosedfcoding0fconfig0fcrypto0000000000fdecode000000000000fdst_ipfencode000000000000ffinish00fhandlefheader0fignore0finsert00000fkeylogfoffset0fon_ack0000000fpacket00frandomfreason000000frebindfrefuse0fremote00frustls00000fserver0000fsharedfsource00000000fsrc_ip00fstatus0fstream0fstridefudp_rx000fudp_tx000fvarintfverify0fwindow0000000gBlocked00gCommandgContextgDefaultgDisplaygFromStrgGeneral0gHmacKey0gInitialgInstantgKeyPair0gLayeredgMaxData0gNewReno00gOpenUnigPadding0gPathAck0gPathBufgReadBufgRequestgRuntime0gSession0gStopped00000gStreamsgToOwnedgTooLonggTryFromgTryIntogUnknowngWritten0gZeroRttgcid_len000gclientsgcommand00000gcompare0000000000000000000gconnect0gdecrypt00000gdefault000000000000000000000000000000000000000000000000000gdrainedgdst_cid0000000gencrypt000gis_0rtt0gmetrics0000000gmin_mtu0gnoq_udpgon_sent000gopen_bigpath_idgpointergruntimegsrc_cid0000gstopped0gstreams000gtag_len0gtype_id00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000gupgrade0gversion00000hAcceptBihBytesMuthChacha20hCommandshDatagram00hDerefMuthDisabled0hDurationhEndpoint00hFinished0hIncoming0hIteratorhLayerExthLongTypehMAX_SIZE0hNO_ERROR0hNewToken0hOnClosedhOpenPathhOrderinghReadable0hRecvMetahResponsehStreamId0hTimedOut00hToStringhTokenLog0hTooLarge0hTransmit00hUdpStats0hUnixTimehWritable0hcong_alghcontentshdatagram0hdurationhendpoint0hfinalizehframe_rx000hframe_tx000hfrom_buf0hfrom_env0hfrom_keyhfrom_str0hfrom_u320hfrom_u640hgot_type000hgroup_id0000hhas_0rtthincominghinterval0hinto_any0000000his_alivehlifetime0hlocal_ip0000hmax_data0hmax_sizehnew_renohnoq_perfhon_byteshopen_unihpriority0hprotocol0hqlog_dirhresponsehrng_seed0hssthresh0hto_owned00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_from00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_into00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_poll000000000htry_sendhvalidate000iAbandoned0iAcceptUniiAddAssigniArbitraryiAsyncRead0iAvailable00iBbrConfig0iBorrowMutiCommonOptiConnectediCriterioniDatagramsiDecodableiDiscarded0iEncodableiFormatteriFourTupleiFrameType0iHandshakeiHeaderKey0iHistogramiMalformediMaxPathId0iMultipathiPacketKey0iPartialEqiPathErroriPathEvent0iPathStats0iReadError00iTryFutureiTryStreamiUdpSenderiUdpSocketiValueEnumiaccept_biiarbitrary0000000ias_rustlsiassemblericlone_box0000000idatagrams000ideref_mut0ifrom_bits00iinitiator0iinto_0rttiinto_iteriis_client0iis_closediis_server0imay_retry0imigration0inew_timer00inew_token0inoq_protoion_closediopen_path0ipath_acks0iping_pathipoll_next000ipoll_read00ipoll_recvipoll_sendireach_out0ireferenceireset_key0iretry_tag0000isize_hint000istable_idito_string00000000000000000000000000000000000000000000000000000000000000itoken_key0itoken_positransport00iwait_idleiwrite_alljArgMatchesjAsyncTimerjAsyncWrite0jBATCH_SIZEjClosedPath000jComparablejConnectingjConnection00jController0jEquivalent0jFrameStats0jIntoFuturejInvalidCid0jIoSliceMutjMaybeFrame0jNamedGroupjNonZeroU32jOtherErrorjPartialOrdjPathAckEcn0jPathEventsjPathStatus0jQlogConfig0jRecvStream00jResetErrorjRetryError0jSendStream00jServerNamejSocketAddrjStreamInfojSubcommandjSystemTimejTimeSource0jTlsSession0jTokenStore0jUdpSockRefjWriteError0jaccept_unijadd_assign00000jallow_spin0jborrow_mut00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jclone_into00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jclose_pathjcongestion000jconn_statsjconnection0jequivalent00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jerror_code000000jframe_type0jinto_inner0jis_drained0jlocal_addr0jlost_bytes000jnew_senderjpad_to_mtu0jpath_stats00jpoll_closejpoll_flush0jpoll_write00jprint_jsonjread_chunk0jread_exactjset_statusjstart_time0jthroughputjtotal_sizekAcceptErrorkCLIENT_ADDRkCipherSuitekClientStatskCloseReasonkConfigError0kContentTypekCryptoError0kCubicConfig0kDataBlocked0kFinishErrorkIdleTimeout0kIntoRequestkOutOfBounds0kPathAbandon0kQlogFactory0kResetStream0kRuntimeTypekSERVER_ADDRkSERVER_NAMEkSmolRuntimekStopSending0kStreamEvent0kStreamStats0kUnspecifiedkaccept_withkadd_address0kbind_socketkcertificatekcurrent_mtu00kdescription0kdestination00kfrom_remotekinitial_mtu000kinitial_rtt00kinto_future0000000000000kmax_path_id0kmax_streamsknamed_layer0kon_end_acks000kon_intervalkpacing_rate0kpartial_cmp0000000000000000000kpath_eventskpath_statuskread_chunkskread_to_endkrecv_stream0ksample_size0ksend_bufferksend_stream0ksend_window00kserver_name0ktime_source0ktoken_store0kupload_sizekupper_bound0kweak_handle0kwith_crypto0kwith_prefix0kwrite_chunklAckFrequency0lAddressAddedlClientConfig00000lClosedStream000000lConnectError00lConnectionId00lDatagramInfolDecryptError0lEcnCodepoint00lEncryptError0lIllegalValuelImmediateAck0lIntoIteratorlLOCALHOST_V4lLastOpenPathlNatTraversallNonZeroUsizelNoneTokenLog0lObservedAddr0lPathResponse0lPathsBlocked0lReadDatagramlRemoteStatus0lRttEstimator0lSendDatagramlServerConfig00000lSocketAddrV4lSocketAddrV6lStoppedErrorlTokioRuntimelUnstructuredlaugment_args0000lcid_lifetime000lclose_reasonlconnect_withlconservativeldata_blocked0ldrain_streamlearly_crypto000levent_streamlexpect_types000lgenerate_cid000lgro_segmentslhandle_event0linitial_keys00000000linto_request0llost_packets000lmax_incoming0lmay_fragment00lnetwork_pathlnew_receiverlnoprotection0lorig_dst_cid0lpath_abandon0lpoll_timeoutlqlog_factory0lreset_stream0lruntime_typelsegment_size00lsend_streamslset_lifetime0lset_priority0lstop_sending0lstream_statslupload_statslwith_initial000lwrite_chunks0mAlertReceived0mBloomTokenLog0mCidsExhausted000mCloneToUninitmDatagramEventmEndpointEventmEndpointStatsmFinishedEarlymHandshakeData0mHandshakeDone0mHandshakeTypemINVALID_TOKEN0mIncomingAlpnsmInvalidHeadermLocallyClosed0mMaxStreamData0mMaxStreamsUni0mNewConnectionmNewRenoConfig0mParseIntErrormPartialDecodemPathChallenge0mPossibleValuemPrivateKeyDermReadableErrormRemoveAddress0mRootCertStoremStdSystemTime0mUnexpectedEndmaccepted_0rttmack_frequency00mbench_exports0mcid_generator00mcreate_sendermdata_transfermdownload_sizemduration_histmimmediate_ack0minto_incoming0mmax_ack_delay0mno_protectionmobserved_addr0mon_first_bytemon_mtu_update0000000mpath_response0mpaths_blocked0mpeer_identity0000mpoll_read_bufmpoll_shutdownmpoll_transmitmqlog_from_env0mread_datagrammsend_datagrammsend_fairness0msignature_len0mstart_session000000000mtry_poll_next0nAddIpv4Address0nAddIpv6Address0nAddressRemovednAsyncUdpSocketnCertificateDernClosePathError0nCommandFactorynConnectionLost000000nEndpointConfig0nFromArgMatchesnINTERNAL_ERROR0nIncomingFuturenInvalidFrameIdnInvalidMessage00nMaxStreamsBidi0nNO_VIABLE_PATH0nNoneTokenStore0nPeerMisbehaved00nReachOutAtIpv40nReachOutAtIpv60nReadExactErrornReadToEndErrornShouldTransmitnTransferResultnTransportError00nUdpSocketStatenWeakPathHandlenconnect_clientncrypto_sessionndownload_statsnfor_connection000nhandle_timeoutnhandshake_data00000nhandshake_done0nhas_subcommandninitial_window0000000000000ninto_unorderednis_handshaking0000nis_valid_retry000nminimum_change0nnext_1rtt_keys000npath_challenge0nqlog_from_path0nread_handshake000nread_unorderednreceive_window00nreceived_reset00nremote_address0000nremove_address0nsaturating_add000nsaturating_sub0nthroughput_bpsntime_threshold0ntotal_durationnvalue_variantsoConnectionClose000oConnectionError0oConnectionEvent0oConnectionStats0oGetRandomFailedoNewConnectionId0oOpenStreamStatsoPathCidsBlocked0oProtectedHeader0oQlogFileFactory0oRemoteAbandoned0oSignatureSchemeoSystemTimeErroroTokenReuseError0oTransportConfig00oTryFromIntErroroVersionMismatch0oZeroRttAcceptedoZeroRttRejected000obloom_token_logoclone_to_uninit00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000odefault_runtimeogrease_quic_bit0ointegrity_limit0ointerface_indexomax_stream_data0omax_streams_uni0oparse_byte_sizeorebind_abstractosend_unreliableoserver_endpointoset_path_statusoset_send_window0oshould_transmitostream_finishedothroughput_histowrap_udp_socket00owrite_handshake000A`AddressDiscoveryA`ApplicationClose000A`CertificateErrorA`ConnectionClosed0A`ConnectionHandleA`DatagramReceivedA`DecryptedInitial0A`EndpointStopping0A`FINAL_SIZE_ERROR0A`InconsistentKeys00A`KEY_UPDATE_ERROR0A`MaxPathIdReachedA`ObservedIpv4Addr0A`ObservedIpv6Addr0A`PathStatusBackup0A`PeerIncompatible00A`QuicClientConfig0A`QuicServerConfig0A`TokenMemoryCache0A`TooManyAddressesA`ValidationFailed0A`VersionNegotiate0A`check_and_insert00000A`configure_clientA`congestion_state0A`connection_close0A`force_key_update0A`from_arg_matches00000A`max_gso_segmentsA`max_idle_timeout0A`max_streams_bidi0A`n0_nat_traversal0A`open_connections0A`open_path_ensure0A`packet_threshold0A`receive_datagramA`recv_buffer_size0A`send_buffer_size0A`transport_config0000A`validation_token0A`with_single_cert0A`write_all_chunksAaAPPLICATION_ERROR0AaApplicationClosed000AaControllerFactory0AaControllerMetrics0AaHandshakeTokenKey0AaInvalidServerName0AaNetworkChangeHint0AaPacketDecodeError0AaPathAbandonReason0AaSendDatagramError0AaStreamDataBlocked0AaStreamsBlockedUni0AaUnsupportedByPeer0Aacongestion_events0Aacongestion_window0Aamax_datagram_sizeAanew_connection_id0Aapath_cids_blocked0Aasend_buffer_spaceAaset_server_config0Aaset_up_connectionAato_possible_valueAbAEAD_LIMIT_REACHED0AbAckFrequencyConfig0AbBadMaxFragmentSize0AbCONNECTION_REFUSED0AbConnectionIdParserAbDatagramsUnblockedAbFLOW_CONTROL_ERROR0AbHandshakeConfirmedAbHandshakeDataReadyAbIllegalOrderedReadAbInvalidCertificate0AbMtuDiscoveryConfig0AbNotEnoughAddressesAbPERF_CIPHER_SUITESAbPROTOCOL_VIOLATION0AbPrivatePkcs8KeyDerAbRetireConnectionId0AbSTREAM_LIMIT_ERROR0AbSTREAM_STATE_ERROR0AbServerCertVerifiedAbServerCertVerifierAbSetPathStatusError0AbStreamsBlockedBidi0AbTokioCurrentThreadAbTransportErrorCode0AbUnsupportedVersion00000Abcommand_for_update0000Abcrypto_buffer_size0Abfrom_u64_unchecked0Abignored_handshakesAbis_same_connectionAbmin_reset_interval0Abnew_expected_items0Abpath_status_backup0Abrefused_handshakesAbremote_path_statusAbsend_datagram_waitAbset_alpn_protocols000Abset_receive_window0Absupported_versions0Abtoken_memory_cacheAbverify_server_certAbwith_start_instant0AcCongestionAlgorithmAcNatTraversalUpdatesAcPathNewConnectionId0AcPathStatusAvailable0AcRemoteCidsExhaustedAcTransportParametersAcUnorderedRecvStreamAcUnsupportedNameType0AcWrongConnectionSideAcaccepted_handshakesAcarbitrary_take_rest000Acaugment_subcommandsAcblack_hole_cooldown0Acearly_data_accepted000Achandshake_confirmedAcis_path_recoverable0Ackeep_alive_interval0Aclost_plpmtud_probes0Acon_congestion_event0000000Acoutgoing_handshakesAcremote_open_streamsAcsend_buffer_benches00Acsend_data_on_streamAcsent_plpmtud_probes0Acstream_data_blocked0Acstreams_blocked_uni0AdFRAME_ENCODING_ERROR0AdHandshakeNotComplete0AdInappropriateMessage000AdInvalidRemoteAddress00AdNoInitialCipherSuite0AdObservedExternalAddrAdServerSideNotAllowedAdSupportedCipherSuiteAdVarIntBoundsExceeded0AdVerifierBuilderErrorAdWeakConnectionHandleAdack_frequency_config0Adblack_holes_detected0Adfrom_arg_matches_mut00000Adhandle_client_streamAdincoming_buffer_size0Adis_multipath_enabledAdmax_receive_segments0Admax_udp_payload_size00Admtu_discovery_config0Adpoll_endpoint_eventsAdpreferred_address_v40Adpreferred_address_v60Adread_certs_from_fileAdreordering_threshold0Adretire_connection_id0Adretry_token_lifetime0Adset_max_idle_timeoutAdset_recv_buffer_sizeAdset_send_buffer_sizeAdstreams_blocked_bidi0Adtransport_parameters00000AeConnectionIdGenerator0AeDigitallySignedStructAeNoApplicationProtocol0AeNoDefaultClientConfig0AePATH_UNSTABLE_OR_POOR0AeValidationTokenConfig0Aeconfidentiality_limit0Aehandle_network_change0Aeincoming_buffer_bytesAeis_probably_same_pathAeloss_reduction_factor0Aemax_transmit_segments0Aenat_traversal_updatesAepath_observed_addressAepath_status_available0Aestream_receive_window00AfCRYPTO_BUFFER_EXCEEDED0AfExtensionNotNegotiatedAfFailedToGetCurrentTime0AfFailedToGetRandomBytes0AfMultipathNotNegotiated000AfNatTraversalRoundEndedAfPathRetireConnectionId0AfProtectedInitialHeaderAfSkipServerVerificationAfbuild_transport_configAfexport_keying_material0000Afget_into_many_segmentsAfget_loop_many_segmentsAfmax_concurrent_streamsAfobserved_external_addr0Afpath_new_connection_id0Afverify_tls12_signatureAfverify_tls13_signatureAfwith_root_certificates0AgCertRevocationListErrorAgHandshakeSignatureValidAgNoCertificatesPresented0AgPeerSentOversizedRecord0Agack_eliciting_threshold0Agaugment_args_for_update0000Aghas_pending_retransmitsAgis_multipath_negotiatedAgset_keep_alive_intervalAgupdate_from_arg_matches00000Agvalidation_token_config0AhAPPLICATION_ABANDON_PATH0AhNoProtectionClientConfigAhNoProtectionServerConfigAhget_max_udp_payload_size0Ahinitial_dst_cid_provider0Ahnew_with_abstract_socketAhremote_address_validated0Ahset_max_concurrent_pathsAhsupported_verify_schemesAiCONNECTION_ID_LIMIT_ERROR0AiEncryptedClientHelloErrorAiExportKeyingMaterialError0AiInvalidCertRevocationList0AiNO_CID_AVAILABLE_FOR_PATH0AiTRANSPORT_PARAMETER_ERROR0AiUnsupportedOperationErrorAiadd_nat_traversal_address0Aidatagram_send_buffer_size0Aigenerate_self_signed_certAiopen_bidirectional_streamAipath_retire_connection_id0Aiset_default_client_configAiset_path_max_idle_timeoutAjDEFAULT_SUPPORTED_VERSIONSAjUnusableAfterNetworkChangeAjdatagram_send_buffer_spaceAjincoming_buffer_size_total0Ajmax_concurrent_uni_streams0Ajopen_unidirectional_streamAjset_max_concurrent_streamsAjtry_with_platform_verifier0AkHashedConnectionIdGeneratorAkInvalidEncryptedClientHello0AkPATH_RESOURCE_LIMIT_REACHED0AkRandomConnectionIdGeneratorAkenable_segmentation_offload0Akmax_concurrent_bidi_streams0Akupdate_from_arg_matches_mut00000Akupdate_local_if_same_remoteAlconfigure_tracing_subscriberAldatagram_receive_buffer_size0Alinitiate_nat_traversal_round0Alon_spurious_congestion_event000Alreceive_bidirectional_streamAlremove_nat_traversal_address0Alset_path_keep_alive_intervalAmFixedLengthConnectionIdParserAmInappropriateHandshakeMessage000Amcongestion_controller_factory0Amdefault_path_max_idle_timeout0Amnegotiated_key_exchange_group0Amreceive_unidirectional_streamAmsend_observed_address_reports0Amset_max_concurrent_bi_streamsAnaugment_subcommands_for_updateAnmax_concurrent_multipath_paths0Anset_max_concurrent_uni_streamsAopersistent_congestion_threshold0B`default_path_keep_alive_interval0B`receive_observed_address_reports0Baget_local_nat_traversal_addresses0Bbget_remote_nat_traversal_addresses0Bbmax_remote_nat_traversal_addressesBfset_max_remote_nat_traversal_addresses0BoDEFAULT_CONCURRENT_MULTIPATH_PATHS_WHEN_ENABLED") \ No newline at end of file diff --git a/pr/561/docs/search.index/name/edb16650d3a7.js b/pr/561/docs/search.index/name/edb16650d3a7.js deleted file mode 100644 index 5baaa2535..000000000 --- a/pr/561/docs/search.index/name/edb16650d3a7.js +++ /dev/null @@ -1 +0,0 @@ -rd_("b()b->bBi0bCe00bFnbIdbOkb[]beq0000000000000000000000000000000000000000000000000000000000000000000000000000000000000bid0000000000000brtbtybu8cAck0cAddcAnycArccBbr00cBoxcBufcClicDir0cErrcMAX000cNotcOpt00cOrdcPincUni0cVeccadd00000cbbrccmp0000000000000000000cdir000cecn000cf32cf64cfmt00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cget0ci32cimpcios0clen000clog0cmincmutcnew000000000000000000000000000000000000cnoqcnot0cnow000000crtt000crun0cstrcu16cu32cu64cudpdArgsdAsFddDropdEct000dEct100dFromdHashdIntodKeys0dLong0dNonedPath00dPing0dPolldReaddSenddSide0dSyncdZERO0dacks0daddr0dbooldbulkdcodedcwnd0ddataddrop000000dfrom00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dhash00000000000000000000dinto00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dmain0000dnext0dopen00dpath0dperfdping000dpoll00000000000000dqlogdread00drecv00dseal0dsend00dsent0dside0dsign0dsize00dsmoldspindstop00dtake00000du128duniteAsRefeByteseChunk0eCloneeCloseeCubic00eDebugeDerefeError00000000000eEvent00eKnowneOther0eRangeeReset000eRetry0eShort0eSizedeStats0eSuiteeTokioeWriteealpnsearrayebenchebuild00000000ebytes00000ecauseeclone00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eclose000ecubicederef0eerroreframe0eindex0eis_ce0elocal0eparse0epaths0eprint00ereset00eretry0esliceespawn00estats000000000etitle0etokenetokioetupleeusizeewrite00fAcceptfAckEcn0fAes128fAes256fBackupfBorrowfBufMutfChunksfClient00fClosedfCrypto0fCursorfFuturefHasherfIpAddrfLaggedfOpenBifOpened000fOptionfOutputfPathId0fResult00000fServer00fStream000fStringfTypeIdfVarInt0faccept000fborrow00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fchunks0fcipherfclient0000fclosedfcoding0fconfig0fcrypto0000000000fdecode000000000000fdst_ipfencode000000000000ffinish00fhandlefheader0fignore0finsert00000fkeylogfoffset0fon_ack0000000fpacket00frandomfreason000000frebindfrefuse0fremote00frustls00000fserver0000fsharedfsource00000000fsrc_ip00fstatus0fstream0fstridefudp_rx000fudp_tx000fvarintfverify0fwindow0000000gBlocked00gCommandgContextgDefaultgDisplaygFromStrgGeneral0gHmacKey0gInitialgInstantgKeyPair0gLayeredgMaxData0gNewReno00gOpenUnigPadding0gPathAck0gPathBufgReadBufgRequestgRuntime0gSession0gStopped00000gStreamsgToOwnedgTooLonggTryFromgTryIntogUnknowngWritten0gZeroRttgcid_len000gclientsgcommand00000gcompare0000000000000000000gconnect0gdecrypt00000gdefault000000000000000000000000000000000000000000000000000gdrainedgdst_cid0000000gencrypt000gis_0rtt0gmetrics0000000gmin_mtu0gnoq_udpgon_sent000gopen_bigpath_idgpointergruntimegsrc_cid0000gstopped0gstreams000gtag_len0gtype_id00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000gupgrade0gversion00000hAcceptBihBytesMuthChacha20hCommandshDatagram00hDerefMuthDisabled0hDurationhEndpoint00hFinished0hIncoming0hIteratorhLayerExthLongTypehMAX_SIZE0hNO_ERROR0hNewToken0hOnClosedhOpenPathhOrderinghReadable0hRecvMetahResponsehStreamId0hTimedOut00hToStringhTokenLog0hTooLarge0hTransmit00hUdpStats0hUnixTimehWritable0hcong_alghcontentshdatagram0hdurationhendpoint0hfinalizehframe_rx000hframe_tx000hfrom_buf0hfrom_env0hfrom_keyhfrom_str0hfrom_u320hfrom_u640hgot_type000hgroup_id0000hhas_0rtthincominghinterval0hinto_any0000000his_alivehlifetime0hlocal_ip0000hmax_data0hmax_sizehnew_renohnoq_perfhon_byteshopen_unihpriority0hprotocol0hqlog_dirhresponsehrng_seed0hssthresh0hto_owned00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_from00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_into00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_poll000000000htry_sendhvalidate000iAbandoned0iAcceptUniiAddAssigniArbitraryiAsyncRead0iAvailable00iBbrConfig0iBorrowMutiCommonOptiConnectediCriterioniDatagramsiDecodableiDiscarded0iEncodableiFormatteriFourTupleiFrameType0iHandshakeiHeaderKey0iHistogramiMalformediMaxPathId0iMultipathiPacketKey0iPartialEqiPathErroriPathEvent0iPathStats0iReadError00iTryFutureiTryStreamiUdpSenderiUdpSocketiValueEnumiaccept_biiarbitrary0000000ias_rustlsiassemblericlone_box0000000idatagrams000ideref_mut0ifrom_bits00iinitiator0iinto_0rttiinto_iteriis_client0iis_closediis_server0imay_retry0imigration0inew_timer00inew_token0inoq_protoion_closediopen_path0ipath_acks0iping_pathipoll_next000ipoll_read00ipoll_recvipoll_sendireach_out0ireferenceireset_key0iretry_tag0000isize_hint000istable_idito_string00000000000000000000000000000000000000000000000000000000000000itoken_key0itoken_positransport00iwait_idleiwrite_alljArgMatchesjAsyncTimerjAsyncWrite0jBATCH_SIZEjClosedPath000jComparablejConnectingjConnection00jController0jEquivalent0jFrameStats0jIntoFuturejInvalidCid0jIoSliceMutjMaybeFrame0jNamedGroupjNonZeroU32jOtherErrorjPartialOrdjPathAckEcn0jPathEventsjPathStatus0jQlogConfig0jRecvStream00jResetErrorjRetryError0jSendStream00jServerNamejSocketAddrjStreamInfojSubcommandjSystemTimejTimeSource0jTlsSession0jTokenStore0jUdpSockRefjWriteError0jaccept_unijadd_assign00000jallow_spin0jborrow_mut00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jclone_into00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jclose_pathjcongestion000jconn_statsjconnection0jequivalent00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jerror_code000000jframe_type0jinto_inner0jis_drained0jlocal_addr0jlost_bytes0jnew_senderjpad_to_mtu0jpath_stats00jpoll_closejpoll_flush0jpoll_write00jprint_jsonjread_chunk0jread_exactjset_statusjstart_time0jthroughputjtotal_sizekAcceptErrorkCLIENT_ADDRkCipherSuitekClientStatskCloseReasonkConfigError0kContentTypekCryptoError0kCubicConfig0kDataBlocked0kFinishErrorkIdleTimeout0kIntoRequestkOutOfBounds0kPathAbandon0kQlogFactory0kResetStream0kRuntimeTypekSERVER_ADDRkSERVER_NAMEkSmolRuntimekStopSending0kStreamEvent0kStreamStats0kUnspecifiedkaccept_withkadd_address0kbind_socketkcertificatekcurrent_mtu00kdescription0kdestination00kfrom_remotekinitial_mtu000kinitial_rtt00kinto_future0000000000000kmax_path_id0kmax_streamsknamed_layer0kon_end_acks000kon_intervalkpacing_rate0kpartial_cmp0000000000000000000kpath_eventskpath_statuskread_chunkskread_to_endkrecv_stream0ksample_size0ksend_bufferksend_stream0ksend_window00kserver_name0ktime_source0ktoken_store0kupload_sizekupper_bound0kweak_handle0kwith_crypto0kwith_prefix0kwrite_chunklAckFrequency0lAddressAddedlClientConfig00000lClosedStream000000lConnectError00lConnectionId00lDatagramInfolDecryptError0lEcnCodepoint00lEncryptError0lIllegalValuelImmediateAck0lIntoIteratorlLOCALHOST_V4lLastOpenPathlNatTraversallNonZeroUsizelNoneTokenLog0lObservedAddr0lPathResponse0lPathsBlocked0lReadDatagramlRemoteStatus0lRttEstimator0lSendDatagramlServerConfig00000lSocketAddrV4lSocketAddrV6lStoppedErrorlTokioRuntimelUnstructuredlaugment_args0000lcid_lifetime000lclose_reasonlconnect_withlconservativeldata_blocked0ldrain_streamlearly_crypto000levent_streamlexpect_types000lgenerate_cid000lgro_segmentslhandle_event0linitial_keys00000000linto_request0llost_packets0lmax_incoming0lmay_fragment00lnetwork_pathlnew_receiverlnoprotection0lorig_dst_cid0lpath_abandon0lpoll_timeoutlqlog_factory0lreset_stream0lruntime_typelsegment_size00lsend_streamslset_lifetime0lset_priority0lstop_sending0lstream_statslupload_statslwith_initial000lwrite_chunks0mAlertReceived0mBloomTokenLog0mCidsExhausted000mCloneToUninitmDatagramEventmEndpointEventmEndpointStatsmFinishedEarlymHandshakeData0mHandshakeDone0mHandshakeTypemINVALID_TOKEN0mIncomingAlpnsmInvalidHeadermLocallyClosed0mMaxStreamData0mMaxStreamsUni0mNewConnectionmNewRenoConfig0mParseIntErrormPartialDecodemPathChallenge0mPossibleValuemPrivateKeyDermReadableErrormRemoveAddress0mRootCertStoremStdSystemTime0mUnexpectedEndmaccepted_0rttmack_frequency00mbench_exports0mcid_generator00mcreate_sendermdata_transfermdownload_sizemduration_histmimmediate_ack0minto_incoming0mmax_ack_delay0mno_protectionmobserved_addr0mon_first_bytemon_mtu_update0000000mpath_response0mpaths_blocked0mpeer_identity0000mpoll_read_bufmpoll_shutdownmpoll_transmitmqlog_from_env0mread_datagrammsend_datagrammsend_fairness0msignature_len0mstart_session000000000mtry_poll_next0nAddIpv4Address0nAddIpv6Address0nAddressRemovednAsyncUdpSocketnCertificateDernClosePathError0nCommandFactorynConnectionLost000000nEndpointConfig0nFromArgMatchesnINTERNAL_ERROR0nIncomingFuturenInvalidFrameIdnInvalidMessage00nMaxStreamsBidi0nNO_VIABLE_PATH0nNoneTokenStore0nPeerMisbehaved00nReachOutAtIpv40nReachOutAtIpv60nReadExactErrornReadToEndErrornShouldTransmitnTransferResultnTransportError00nUdpSocketStatenWeakPathHandlenconnect_clientncrypto_sessionndownload_statsnfor_connection000nhandle_timeoutnhandshake_data00000nhandshake_done0nhas_subcommandninitial_window0000000000000ninto_unorderednis_handshaking0000nis_valid_retry000nminimum_change0nnext_1rtt_keys000npath_challenge0nqlog_from_path0nread_handshake000nread_unorderednreceive_window00nreceived_reset00nremote_address0000nremove_address0nsaturating_add000nsaturating_sub0nthroughput_bpsntime_threshold0ntotal_durationnvalue_variantsoConnectionClose000oConnectionError0oConnectionEvent0oConnectionStats0oGetRandomFailedoNewConnectionId0oOpenStreamStatsoPathCidsBlocked0oProtectedHeader0oQlogFileFactory0oRemoteAbandoned0oSignatureSchemeoSystemTimeErroroTokenReuseError0oTransportConfig00oTryFromIntErroroVersionMismatch0oZeroRttAcceptedoZeroRttRejected000obloom_token_logoclone_to_uninit00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000odefault_runtimeogrease_quic_bit0ointegrity_limit0ointerface_indexomax_stream_data0omax_streams_uni0oparse_byte_sizeorebind_abstractosend_unreliableoserver_endpointoset_path_statusoset_send_window0oshould_transmitostream_finishedothroughput_histowrap_udp_socket00owrite_handshake000A`AddressDiscoveryA`ApplicationClose000A`CertificateErrorA`ConnectionClosed0A`ConnectionHandleA`DatagramReceivedA`DecryptedInitial0A`EndpointStopping0A`FINAL_SIZE_ERROR0A`InconsistentKeys00A`KEY_UPDATE_ERROR0A`MaxPathIdReachedA`ObservedIpv4Addr0A`ObservedIpv6Addr0A`PathStatusBackup0A`PeerIncompatible00A`QuicClientConfig0A`QuicServerConfig0A`TokenMemoryCache0A`TooManyAddressesA`ValidationFailed0A`VersionNegotiate0A`check_and_insert00000A`configure_clientA`congestion_state0A`connection_close0A`force_key_update0A`from_arg_matches00000A`max_gso_segmentsA`max_idle_timeout0A`max_streams_bidi0A`n0_nat_traversal0A`open_connections0A`open_path_ensure0A`packet_threshold0A`receive_datagramA`recv_buffer_size0A`send_buffer_size0A`transport_config0000A`validation_token0A`with_single_cert0A`write_all_chunksAaAPPLICATION_ERROR0AaApplicationClosed000AaControllerFactory0AaControllerMetrics0AaHandshakeTokenKey0AaInvalidServerName0AaNetworkChangeHint0AaPacketDecodeError0AaPathAbandonReason0AaSendDatagramError0AaStreamDataBlocked0AaStreamsBlockedUni0AaUnsupportedByPeer0Aacongestion_events0Aacongestion_window0Aamax_datagram_sizeAanew_connection_id0Aapath_cids_blocked0Aasend_buffer_spaceAaset_server_config0Aaset_up_connectionAato_possible_valueAbAEAD_LIMIT_REACHED0AbAckFrequencyConfig0AbBadMaxFragmentSize0AbCONNECTION_REFUSED0AbConnectionIdParserAbDatagramsUnblockedAbFLOW_CONTROL_ERROR0AbHandshakeConfirmedAbHandshakeDataReadyAbIllegalOrderedReadAbInvalidCertificate0AbMtuDiscoveryConfig0AbNotEnoughAddressesAbPERF_CIPHER_SUITESAbPROTOCOL_VIOLATION0AbPrivatePkcs8KeyDerAbRetireConnectionId0AbSTREAM_LIMIT_ERROR0AbSTREAM_STATE_ERROR0AbServerCertVerifiedAbServerCertVerifierAbSetPathStatusError0AbStreamsBlockedBidi0AbTokioCurrentThreadAbTransportErrorCode0AbUnsupportedVersion00000Abcommand_for_update0000Abcrypto_buffer_size0Abfrom_u64_unchecked0Abignored_handshakesAbis_same_connectionAbmin_reset_interval0Abnew_expected_items0Abpath_status_backup0Abrefused_handshakesAbremote_path_statusAbsend_datagram_waitAbset_alpn_protocols000Abset_receive_window0Absupported_versions0Abtoken_memory_cacheAbverify_server_certAbwith_start_instant0AcCongestionAlgorithmAcNatTraversalUpdatesAcPathNewConnectionId0AcPathStatusAvailable0AcRemoteCidsExhaustedAcTransportParametersAcUnorderedRecvStreamAcUnsupportedNameType0AcWrongConnectionSideAcaccepted_handshakesAcarbitrary_take_rest000Acaugment_subcommandsAcblack_hole_cooldown0Acearly_data_accepted000Achandshake_confirmedAcis_path_recoverable0Ackeep_alive_interval0Aclost_plpmtud_probes0Acon_congestion_event0000000Acoutgoing_handshakesAcremote_open_streamsAcsend_buffer_benches00Acsend_data_on_streamAcsent_plpmtud_probes0Acstream_data_blocked0Acstreams_blocked_uni0AdFRAME_ENCODING_ERROR0AdHandshakeNotComplete0AdInappropriateMessage000AdInvalidRemoteAddress00AdNoInitialCipherSuite0AdObservedExternalAddrAdServerSideNotAllowedAdSupportedCipherSuiteAdVarIntBoundsExceeded0AdVerifierBuilderErrorAdWeakConnectionHandleAdack_frequency_config0Adblack_holes_detected0Adfrom_arg_matches_mut00000Adhandle_client_streamAdincoming_buffer_size0Adis_multipath_enabledAdmax_receive_segments0Admax_udp_payload_size00Admtu_discovery_config0Adpoll_endpoint_eventsAdpreferred_address_v40Adpreferred_address_v60Adread_certs_from_fileAdreordering_threshold0Adretire_connection_id0Adretry_token_lifetime0Adset_max_idle_timeoutAdset_recv_buffer_sizeAdset_send_buffer_sizeAdstreams_blocked_bidi0Adtransport_parameters00000AeConnectionIdGenerator0AeDigitallySignedStructAeNoApplicationProtocol0AeNoDefaultClientConfig0AePATH_UNSTABLE_OR_POOR0AeValidationTokenConfig0Aeconfidentiality_limit0Aehandle_network_change0Aeincoming_buffer_bytesAeis_probably_same_pathAeloss_reduction_factor0Aemax_transmit_segments0Aenat_traversal_updatesAepath_observed_addressAepath_status_available0Aestream_receive_window00AfCRYPTO_BUFFER_EXCEEDED0AfExtensionNotNegotiatedAfFailedToGetCurrentTime0AfFailedToGetRandomBytes0AfMultipathNotNegotiated000AfNatTraversalRoundEndedAfPathRetireConnectionId0AfProtectedInitialHeaderAfSkipServerVerificationAfbuild_transport_configAfexport_keying_material0000Afget_into_many_segmentsAfget_loop_many_segmentsAfmax_concurrent_streamsAfobserved_external_addr0Afpath_new_connection_id0Afverify_tls12_signatureAfverify_tls13_signatureAfwith_root_certificates0AgCertRevocationListErrorAgHandshakeSignatureValidAgNoCertificatesPresented0AgPeerSentOversizedRecord0Agack_eliciting_threshold0Agaugment_args_for_update0000Aghas_pending_retransmitsAgis_multipath_negotiatedAgset_keep_alive_intervalAgupdate_from_arg_matches00000Agvalidation_token_config0AhAPPLICATION_ABANDON_PATH0AhNoProtectionClientConfigAhNoProtectionServerConfigAhget_max_udp_payload_size0Ahinitial_dst_cid_provider0Ahnew_with_abstract_socketAhremote_address_validated0Ahset_max_concurrent_pathsAhsupported_verify_schemesAiCONNECTION_ID_LIMIT_ERROR0AiEncryptedClientHelloErrorAiExportKeyingMaterialError0AiInvalidCertRevocationList0AiNO_CID_AVAILABLE_FOR_PATH0AiTRANSPORT_PARAMETER_ERROR0AiUnsupportedOperationErrorAiadd_nat_traversal_address0Aidatagram_send_buffer_size0Aigenerate_self_signed_certAiopen_bidirectional_streamAipath_retire_connection_id0Aiset_default_client_configAiset_path_max_idle_timeoutAjDEFAULT_SUPPORTED_VERSIONSAjUnusableAfterNetworkChangeAjdatagram_send_buffer_spaceAjincoming_buffer_size_total0Ajmax_concurrent_uni_streams0Ajopen_unidirectional_streamAjset_max_concurrent_streamsAjtry_with_platform_verifier0AkHashedConnectionIdGeneratorAkInvalidEncryptedClientHello0AkPATH_RESOURCE_LIMIT_REACHED0AkRandomConnectionIdGeneratorAkenable_segmentation_offload0Akmax_concurrent_bidi_streams0Akupdate_from_arg_matches_mut00000Akupdate_local_if_same_remoteAlconfigure_tracing_subscriberAldatagram_receive_buffer_size0Alinitiate_nat_traversal_round0Alon_spurious_congestion_event000Alreceive_bidirectional_streamAlremove_nat_traversal_address0Alset_path_keep_alive_intervalAmFixedLengthConnectionIdParserAmInappropriateHandshakeMessage000Amcongestion_controller_factory0Amdefault_path_max_idle_timeout0Amnegotiated_key_exchange_group0Amreceive_unidirectional_streamAmsend_observed_address_reports0Amset_max_concurrent_bi_streamsAnaugment_subcommands_for_updateAnmax_concurrent_multipath_paths0Anset_max_concurrent_uni_streamsAopersistent_congestion_threshold0B`default_path_keep_alive_interval0B`receive_observed_address_reports0Baget_local_nat_traversal_addresses0Bbget_remote_nat_traversal_addresses0Bbmax_remote_nat_traversal_addressesBfset_max_remote_nat_traversal_addresses0BoDEFAULT_CONCURRENT_MULTIPATH_PATHS_WHEN_ENABLED") \ No newline at end of file diff --git a/pr/561/docs/search.index/normalizedName/dad1fcd27bfb.js b/pr/561/docs/search.index/normalizedName/dad1fcd27bfb.js new file mode 100644 index 000000000..c40905757 --- /dev/null +++ b/pr/561/docs/search.index/normalizedName/dad1fcd27bfb.js @@ -0,0 +1 @@ +rd_("b()b->bbi0bce00bfnbidbokb[]beq000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333333333333brtbtybu8cack0caddcanycarccbbr00cboxcbufcclicdir0cerrcmax000cnotcopt00cordcpincuni0cvec??????bbi0bce00bfnbidbokb[]beq000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333333333333brtbtybu8cack0caddcanycarccbbr00cboxcbufcclicdir0cerrcmax000cnotcopt00cordcpincuni0cvec??????i[2,\"noq\"]o[2,\"noq_proto\"]1Ak[2,\"noq_proto::congestion\"]f[3,\"\"]Ak[15,\"noq_proto::PathEvent\"]Ak[5,\"noq\",\"noq::connection\"]Ag[10,\"core::ops::arith\"]A`[10,\"arbitrary\"]Al[10,\"tokio::io::async_read\"]Ai[10,\"futures_io::if_std\"]Am[15,\"noq_proto::StreamEvent\"]Ae[5,\"noq::congestion\"]Ch[5,\"noq_proto::congestion\",\"noq_proto::congestion::bbr\"]Ac[10,\"core::borrow\"]Aa[5,\"perf\",\"perf\"]Ak[5,\"criterion\",\"criterion\"]Cb[5,\"noq_proto\",\"noq_proto::connection::datagrams\"]Bl[10,\"noq_proto::coding\",\"noq_proto::coding\"]=0Ak[5,\"core::fmt\",\"core::fmt\"]Ak[5,\"noq_proto\",\"noq_proto\"]i[6,\"noq\"]Bb[6,\"noq_proto\",\"noq_proto::frame\"]Ab[10,\"noq::crypto\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ba[5,\"hdrhistogram\",\"hdrhistogram\"]21A`[10,\"core::cmp\"]Bg[6,\"noq_proto\",\"noq_proto::connection\"]o[2,\"noq_proto\"]Bn[6,\"noq_proto\",\"noq_proto::connection::paths\"]i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::connection::stats\"]Al[6,\"noq\",\"noq::recv_stream\"]Cf[6,\"noq_proto\",\"noq_proto::connection::streams::recv\"]Ak[10,\"futures_core::future\"]Ak[10,\"futures_core::stream\"]Ai[10,\"noq\",\"noq::runtime\"]Bc[5,\"std::net::udp\",\"std::net::udp\"]Ak[10,\"clap_builder::derive\"]Ak[2,\"noq_proto::connection\"]0f[3,\"\"]f[1,\"\"]Ag[2,\"noq_proto::config\"]Em[5,\"clap_builder::parser::matches::arg_matches\",\"clap_builder::parser::matches::arg_matches\"]7Am[10,\"tokio::io::async_write\"]Ai[10,\"futures_io::if_std\"]Da[5,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]Bn[5,\"noq_proto\",\"noq_proto::connection::paths\"]Aa[10,\"equivalent\"]Ak[5,\"noq\",\"noq::connection\"]Bg[5,\"noq::connection\",\"noq::connection\"]1Bg[5,\"noq_proto\",\"noq_proto::connection\"]Af[10,\"noq::congestion\"]Cd[10,\"noq_proto::congestion\",\"noq_proto::congestion\"]A`[10,\"hashbrown\"]6i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::connection::stats\"]B`[10,\"core::future::into_future\"]2Bj[5,\"noq_proto\",\"noq_proto::cid_generator\"]Ag[5,\"std::io\",\"std::io\"]Bi[6,\"noq_proto::frame\",\"noq_proto::frame\"]Bb[6,\"noq_proto\",\"noq_proto::frame\"]Bo[6,\"rustls::msgs::enums\",\"rustls::msgs::enums\"]Bm[8,\"core::num::nonzero\",\"core::num::nonzero\"]Cm[5,\"rustls::error::other_error\",\"rustls::error::other_error\"]A`[10,\"core::cmp\"]Am[5,\"noq\",\"noq::event_stream\"]Da[6,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]Bn[6,\"noq_proto\",\"noq_proto::connection::paths\"]=Bi[5,\"noq_proto\",\"noq_proto::config::qlog\"]Bi[5,\"noq::recv_stream\",\"noq::recv_stream\"]Al[5,\"noq\",\"noq::recv_stream\"]C`[5,\"noq_proto\",\"noq_proto::connection::streams\"]Al[6,\"noq\",\"noq::recv_stream\"]Ai[5,\"noq\",\"noq::incoming\"]Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Bi[5,\"noq::send_stream\",\"noq::send_stream\"]Al[5,\"noq\",\"noq::send_stream\"]5Dc[6,\"rustls_pki_types::server_name\",\"rustls_pki_types::server_name\"]Ce[6,\"core::net::socket_addr\",\"core::net::socket_addr\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]Ak[10,\"clap_builder::derive\"]Ak[5,\"std::time\",\"std::time\"]j[10,\"noq\"]Bd[10,\"noq_proto\",\"noq_proto::config\"]Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]3Bc[10,\"noq_proto\",\"noq_proto::token\"]Ag[5,\"noq_udp\",\"noq_udp\"]Al[6,\"noq\",\"noq::send_stream\"]Cf[6,\"noq_proto\",\"noq_proto::connection::streams::send\"]i[2,\"noq\"]o[2,\"noq_proto\"]10Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Ac[6,\"bench\",\"bench\"]Aa[5,\"bulk\",\"bulk\"]Da[6,\"noq_proto::connection::state\",\"noq_proto::connection::state\"]i[6,\"noq\"]Bc[6,\"noq_proto\",\"noq_proto::config\"]Bc[6,\"rustls::enums\",\"rustls::enums\"]Aa[5,\"noq::crypto\"]Bk[5,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ae[5,\"noq::congestion\"]Cj[5,\"noq_proto::congestion\",\"noq_proto::congestion::cubic\"]=i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::config::transport\"]Ae[10,\"tonic::request\"]j[10,\"noq\"]Bj[10,\"noq_proto\",\"noq_proto::config::qlog\"]>An[5,\"noq\",\"noq::runtime::smol\"]o[2,\"noq_proto\"]C`[6,\"noq_proto\",\"noq_proto::connection::streams\"]Ba[5,\"bench::stats\",\"bench::stats\"]Ao[5,\"perf::stats\",\"perf::stats\"]Ci[5,\"ring::error::unspecified\",\"ring::error::unspecified\"]f[3,\"\"]i[2,\"noq\"]Ak[2,\"noq_proto::connection\"]1Bk[5,\"noq_proto::config\",\"noq_proto::config\"]Co[5,\"rustls::client::client_conn\",\"rustls::client::client_conn\"]?Ab[10,\"noq::crypto\"]Bc[5,\"noq_proto\",\"noq_proto::config\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]i[5,\"noq\"]C`[5,\"noq_proto\",\"noq_proto::connection::streams\"]Bo[6,\"noq_proto::endpoint\",\"noq_proto::endpoint\"]i[6,\"noq\"]Be[6,\"noq_proto\",\"noq_proto::endpoint\"]Bk[5,\"noq_proto::shared\",\"noq_proto::shared\"]5Bc[5,\"noq_proto\",\"noq_proto::shared\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]4Bc[6,\"noq_proto\",\"noq_proto::shared\"]Ag[6,\"noq_udp\",\"noq_udp\"]Bb[10,\"core::iter::traits::collect\"]Bm[8,\"core::num::nonzero\",\"core::num::nonzero\"];Bb[5,\"noq_proto\",\"noq_proto::token\"]Ak[15,\"noq_proto::PathEvent\"]Ak[5,\"noq\",\"noq::connection\"]1Da[5,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]Bn[5,\"noq_proto\",\"noq_proto::connection::paths\"]2Bk[5,\"noq_proto::config\",\"noq_proto::config\"]Co[5,\"rustls::server::server_conn\",\"rustls::server::server_conn\"]i[5,\"noq\"]Ab[10,\"noq::crypto\"]Bc[5,\"noq_proto\",\"noq_proto::config\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ce[5,\"core::net::socket_addr\",\"core::net::socket_addr\"]0Al[6,\"noq\",\"noq::send_stream\"]Ao[5,\"noq\",\"noq::runtime::tokio\"]Cg[5,\"arbitrary::unstructured\",\"arbitrary::unstructured\"]i[2,\"noq\"]j[2,\"perf\"]9Bl[5,\"noq_proto\",\"noq_proto::bloom_token_log\"]Ab[10,\"core::clone\"]Be[6,\"noq_proto\",\"noq_proto::endpoint\"]Bc[5,\"noq_proto\",\"noq_proto::shared\"]Ai[5,\"noq\",\"noq::endpoint\"]Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]Bc[6,\"rustls::enums\",\"rustls::enums\"]Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Ae[5,\"noq::congestion\"]Cm[5,\"noq_proto::congestion\",\"noq_proto::congestion::new_reno\"]Bi[5,\"core::num::error\",\"core::num::error\"]Bc[5,\"noq_proto\",\"noq_proto::packet\"]Ec[5,\"clap_builder::builder::possible_value\",\"clap_builder::builder::possible_value\"]Bi[6,\"rustls_pki_types\",\"rustls_pki_types\"]Cf[6,\"noq_proto\",\"noq_proto::connection::streams::recv\"]Cg[5,\"rustls::webpki::anchors\",\"rustls::webpki::anchors\"]i[5,\"noq\"]Bc[5,\"noq_proto\",\"noq_proto::config\"]Bk[5,\"noq_proto::coding\",\"noq_proto::coding\"]o[2,\"noq_proto\"]0f[3,\"\"]Ai[10,\"noq\",\"noq::runtime\"]Bi[5,\"rustls_pki_types\",\"rustls_pki_types\"]Cc[6,\"noq_proto::connection\",\"noq_proto::connection\"]Bg[6,\"noq_proto\",\"noq_proto::connection\"]Ak[10,\"clap_builder::derive\"]Ag[15,\"noq_proto::Event\"]:91Ai[5,\"noq\",\"noq::incoming\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]Bc[6,\"rustls::error\",\"rustls::error\"]=Bb[5,\"noq_proto\",\"noq_proto::token\"]1Al[6,\"noq\",\"noq::recv_stream\"]0C`[5,\"noq_proto\",\"noq_proto::connection::streams\"]Ba[5,\"bench::stats\",\"bench::stats\"]o[5,\"noq_proto\"]Al[5,\"noq_udp\",\"noq_udp::imp\"]Ae[5,\"noq\",\"noq::path\"]i[5,\"noq\"]9i[6,\"noq\"]>Bc[5,\"noq_proto\",\"noq_proto::shared\"]2Bn[5,\"noq_proto\",\"noq_proto::connection::stats\"]Ba[5,\"rustls::rand\",\"rustls::rand\"]Ao[5,\"perf::stats\",\"perf::stats\"]o[2,\"noq_proto\"]Bc[6,\"noq_proto\",\"noq_proto::packet\"]7Bi[5,\"noq_proto\",\"noq_proto::config::qlog\"]Bc[15,\"noq_proto::PathAbandonReason\"]Bc[6,\"rustls::enums\",\"rustls::enums\"]Ak[5,\"std::time\",\"std::time\"];Bb[5,\"noq_proto\",\"noq_proto::token\"]Da[5,\"noq_proto::config::transport\",\"noq_proto::config::transport\"]=Bn[5,\"noq_proto\",\"noq_proto::config::transport\"]Bi[5,\"core::num::error\",\"core::num::error\"]Ak[5,\"noq\",\"noq::connection\"]:Ae[5,\"noq\",\"noq::path\"]i[5,\"noq\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]Bc[6,\"rustls::error\",\"rustls::error\"]Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Bo[5,\"noq_proto::endpoint\",\"noq_proto::endpoint\"]122Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]106Bo[5,\"noq_proto\",\"noq_proto::token_memory_cache\"]Ba[15,\"noq_proto::ProtectedHeader\"]o[2,\"noq_proto\"]Bc[15,\"noq_proto::PathAbandonReason\"]Af[10,\"noq::congestion\"]Cd[10,\"noq_proto::congestion\",\"noq_proto::congestion\"]Ae[5,\"noq::congestion\"]Cc[5,\"noq_proto::congestion\",\"noq_proto::congestion\"]Ab[10,\"noq::crypto\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]j[10,\"noq\"]Bh[10,\"noq_proto\",\"noq_proto::connection\"]9Bc[6,\"noq_proto\",\"noq_proto::packet\"]:Bn[6,\"noq_proto\",\"noq_proto::connection::paths\"]Ak[6,\"noq\",\"noq::connection\"]Cb[6,\"noq_proto\",\"noq_proto::connection::datagrams\"]f[3,\"\"]i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::config::transport\"]Bd[10,\"noq_proto\",\"noq_proto::packet\"]21Bi[5,\"rustls_pki_types\",\"rustls_pki_types\"]Be[5,\"rustls::verify\",\"rustls::verify\"]Ae[10,\"rustls::verify\"]Da[6,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]:6o[5,\"noq_proto\"]Bc[15,\"noq_proto::PacketDecodeError\"]Aa[5,\"noq::crypto\"]Bk[5,\"noq_proto::crypto\",\"noq_proto::crypto\"]o[2,\"noq_proto\"]Aa[6,\"perf\",\"perf\"]Am[5,\"noq\",\"noq::event_stream\"]Dg[5,\"noq_proto::transport_parameters\",\"noq_proto::transport_parameters\"]Al[5,\"noq\",\"noq::recv_stream\"]Bh[2,\"noq_proto::connection::send_buffer\"]An[2,\"noq_proto::bench_exports\"]Ba[15,\"noq::crypto::rustls::Error\"]Bg[15,\"noq_proto::crypto::rustls::Error\"]Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]8Be[6,\"rustls::suites\",\"rustls::suites\"]i[5,\"noq\"]Bc[5,\"noq_proto\",\"noq_proto::varint\"]Be[6,\"rustls::webpki\",\"rustls::webpki\"]Ak[5,\"noq\",\"noq::connection\"]?j[10,\"noq\"]Bk[10,\"noq_proto\",\"noq_proto::cid_generator\"]Be[5,\"rustls::verify\",\"rustls::verify\"]6Bc[5,\"noq_proto\",\"noq_proto::config\"]Bg[5,\"noq_proto\",\"noq_proto::connection\"]Bc[5,\"noq_proto\",\"noq_proto::packet\"]Ao[5,\"certificate\",\"certificate\"]Bc[6,\"rustls::error\",\"rustls::error\"]5Bm[5,\"perf::noprotection\",\"perf::noprotection\"]01Aa[5,\"noq::crypto\"]Bk[5,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ce[5,\"rustls::crypto::cipher\",\"rustls::crypto::cipher\"]Bj[5,\"noq_proto\",\"noq_proto::cid_generator\"]07Ba[15,\"noq::crypto::rustls::Error\"]Bg[15,\"noq_proto::crypto::rustls::Error\"]") \ No newline at end of file +rd_("f[1,\"\"]0Al[10,\"core::ops\",\"core::ops\"]Ce[5,\"clap_builder::util::id\",\"clap_builder::util::id\"]22Ag[10,\"core::ops::arith\"]A`[10,\"core::any\"]Ao[5,\"alloc::sync\",\"alloc::sync\"]Ae[5,\"noq::congestion\"]Ch[5,\"noq_proto::congestion\",\"noq_proto::congestion::bbr\"]Ba[5,\"alloc::boxed\",\"alloc::boxed\"]Cb[10,\"bytes::buf::buf_impl\",\"bytes::buf::buf_impl\"]Ai[5,\"noq_perf\",\"noq_perf\"]i[6,\"noq\"]Ak[6,\"noq_proto\",\"noq_proto\"]Ae[10,\"core::ops::bit\"]Ac[5,\"bench\",\"bench\"]Ba[5,\"perf::client\",\"perf::client\"]Ba[5,\"perf::server\",\"perf::server\"]A`[10,\"core::cmp\"]Ak[5,\"core::pin\",\"core::pin\"]Am[5,\"alloc::vec\",\"alloc::vec\"]Ak[2,\"noq_proto::congestion\"]f[1,\"\"]00m[2,\"noq_udp\"]f[0,\"\"]f[3,\"\"]3333Ak[10,\"clap_builder::derive\"]Bn[10,\"std::os::fd::owned\",\"std::os::fd::owned\"]Af[10,\"core::ops::drop\"]Ad[10,\"core::convert\"]Aa[10,\"core::hash\"]1Aa[5,\"noq::crypto\"]Bk[5,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ba[15,\"noq_proto::ProtectedHeader\"]Ak[5,\"std::path\",\"std::path\"]Ae[5,\"noq\",\"noq::path\"]Bi[6,\"core::task::poll\",\"core::task::poll\"]Bb[10,\"core::marker\",\"core::marker\"]i[6,\"noq\"]Ak[6,\"noq_proto\",\"noq_proto\"]2f[1,\"\"]?i[2,\"noq\"]f[3,\"\"]Ag[2,\"noq_proto::config\"]Bd[2,\"noq_proto::connection::streams\"]0Ab[2,\"noq::runtime\"]55Bd[10,\"core::convert\",\"core::convert\"]Ba[5,\"bytes::bytes\",\"bytes::bytes\"]i[5,\"noq\"]Cb[5,\"noq_proto\",\"noq_proto::connection::assembler\"]Ab[10,\"core::clone\"]Bi[6,\"noq_proto::frame\",\"noq_proto::frame\"]Ae[5,\"noq::congestion\"]Cj[5,\"noq_proto::congestion\",\"noq_proto::congestion::cubic\"]A`[10,\"core::fmt\"]Ag[10,\"core::ops::deref\"]Ak[5,\"core::fmt\",\"core::fmt\"]Ab[10,\"core::error\"]Ai[2,\"noq::crypto::rustls\"]Bc[6,\"rustls::error\",\"rustls::error\"]Ao[2,\"noq_proto::crypto::rustls\"]Cm[5,\"noq_proto::transport_error\",\"noq_proto::transport_error\"]Ba[8,\"clap_builder\",\"clap_builder\"]Bi[6,\"arbitrary::error\",\"arbitrary::error\"]Ai[6,\"noq::crypto::rustls\"]Ao[6,\"noq_proto::crypto::rustls\"]Dg[6,\"noq_proto::transport_parameters\",\"noq_proto::transport_parameters\"]Co[6,\"noq_proto::n0_nat_traversal\",\"noq_proto::n0_nat_traversal\"]o[2,\"noq_proto\"]Bg[6,\"noq_proto\",\"noq_proto::connection\"]2Bi[5,\"core::ops::range\",\"core::ops::range\"]Ba[15,\"noq_proto::ProtectedHeader\"]0Bb[10,\"core::marker\",\"core::marker\"]Ba[5,\"bench::stats\",\"bench::stats\"]Ao[5,\"perf::stats\",\"perf::stats\"]Ba[5,\"rustls::quic\",\"rustls::quic\"]Ah[10,\"std::io\",\"std::io\"]f[1,\"\"]f[3,\"\"]Ak[2,\"noq_proto::congestion\"]l[2,\"rustls\"]i[2,\"noq\"]o[2,\"noq_proto\"]1Ak[2,\"noq_proto::congestion\"]f[3,\"\"]Ak[15,\"noq_proto::PathEvent\"]Ak[5,\"noq\",\"noq::connection\"]Ag[10,\"core::ops::arith\"]A`[10,\"arbitrary\"]Al[10,\"tokio::io::async_read\"]Ai[10,\"futures_io::if_std\"]Am[15,\"noq_proto::StreamEvent\"]Ae[5,\"noq::congestion\"]Ch[5,\"noq_proto::congestion\",\"noq_proto::congestion::bbr\"]Ac[10,\"core::borrow\"]Aa[5,\"perf\",\"perf\"]Ak[5,\"criterion\",\"criterion\"]Cb[5,\"noq_proto\",\"noq_proto::connection::datagrams\"]Bl[10,\"noq_proto::coding\",\"noq_proto::coding\"]=0Ak[5,\"core::fmt\",\"core::fmt\"]Ak[5,\"noq_proto\",\"noq_proto\"]i[6,\"noq\"]Bb[6,\"noq_proto\",\"noq_proto::frame\"]Ab[10,\"noq::crypto\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ba[5,\"hdrhistogram\",\"hdrhistogram\"]21A`[10,\"core::cmp\"]Bg[6,\"noq_proto\",\"noq_proto::connection\"]o[2,\"noq_proto\"]Bn[6,\"noq_proto\",\"noq_proto::connection::paths\"]i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::connection::stats\"]Al[6,\"noq\",\"noq::recv_stream\"]Cf[6,\"noq_proto\",\"noq_proto::connection::streams::recv\"]Ak[10,\"futures_core::future\"]Ak[10,\"futures_core::stream\"]Ai[10,\"noq\",\"noq::runtime\"]Bc[5,\"std::net::udp\",\"std::net::udp\"]Ak[10,\"clap_builder::derive\"]Ak[2,\"noq_proto::connection\"]0f[3,\"\"]f[1,\"\"]Ag[2,\"noq_proto::config\"]Em[5,\"clap_builder::parser::matches::arg_matches\",\"clap_builder::parser::matches::arg_matches\"]7Am[10,\"tokio::io::async_write\"]Ai[10,\"futures_io::if_std\"]Da[5,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]Bn[5,\"noq_proto\",\"noq_proto::connection::paths\"]Aa[10,\"equivalent\"]Ak[5,\"noq\",\"noq::connection\"]Bg[5,\"noq::connection\",\"noq::connection\"]1Bg[5,\"noq_proto\",\"noq_proto::connection\"]Af[10,\"noq::congestion\"]Cd[10,\"noq_proto::congestion\",\"noq_proto::congestion\"]A`[10,\"hashbrown\"]6i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::connection::stats\"]B`[10,\"core::future::into_future\"]2Bj[5,\"noq_proto\",\"noq_proto::cid_generator\"]Ag[5,\"std::io\",\"std::io\"]Bi[6,\"noq_proto::frame\",\"noq_proto::frame\"]Bb[6,\"noq_proto\",\"noq_proto::frame\"]Bo[6,\"rustls::msgs::enums\",\"rustls::msgs::enums\"]Bm[8,\"core::num::nonzero\",\"core::num::nonzero\"]Cm[5,\"rustls::error::other_error\",\"rustls::error::other_error\"]A`[10,\"core::cmp\"]Am[5,\"noq\",\"noq::event_stream\"]Da[6,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]Bn[6,\"noq_proto\",\"noq_proto::connection::paths\"]=Bi[5,\"noq_proto\",\"noq_proto::config::qlog\"]Bi[5,\"noq::recv_stream\",\"noq::recv_stream\"]Al[5,\"noq\",\"noq::recv_stream\"]C`[5,\"noq_proto\",\"noq_proto::connection::streams\"]Al[6,\"noq\",\"noq::recv_stream\"]Ai[5,\"noq\",\"noq::incoming\"]Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Bi[5,\"noq::send_stream\",\"noq::send_stream\"]Al[5,\"noq\",\"noq::send_stream\"]5Dc[6,\"rustls_pki_types::server_name\",\"rustls_pki_types::server_name\"]Ce[6,\"core::net::socket_addr\",\"core::net::socket_addr\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]Ak[10,\"clap_builder::derive\"]Ak[5,\"std::time\",\"std::time\"]j[10,\"noq\"]Bd[10,\"noq_proto\",\"noq_proto::config\"]Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]3Bc[10,\"noq_proto\",\"noq_proto::token\"]Ag[5,\"noq_udp\",\"noq_udp\"]Al[6,\"noq\",\"noq::send_stream\"]Cf[6,\"noq_proto\",\"noq_proto::connection::streams::send\"]i[2,\"noq\"]o[2,\"noq_proto\"]10Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Ac[6,\"bench\",\"bench\"]Aa[5,\"bulk\",\"bulk\"]Da[6,\"noq_proto::connection::state\",\"noq_proto::connection::state\"]i[6,\"noq\"]Bc[6,\"noq_proto\",\"noq_proto::config\"]Bc[6,\"rustls::enums\",\"rustls::enums\"]Aa[5,\"noq::crypto\"]Bk[5,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ae[5,\"noq::congestion\"]Cj[5,\"noq_proto::congestion\",\"noq_proto::congestion::cubic\"]=i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::config::transport\"]Ae[10,\"tonic::request\"]j[10,\"noq\"]Bj[10,\"noq_proto\",\"noq_proto::config::qlog\"]>An[5,\"noq\",\"noq::runtime::smol\"]o[2,\"noq_proto\"]C`[6,\"noq_proto\",\"noq_proto::connection::streams\"]Ba[5,\"bench::stats\",\"bench::stats\"]Ao[5,\"perf::stats\",\"perf::stats\"]Ci[5,\"ring::error::unspecified\",\"ring::error::unspecified\"]f[3,\"\"]i[2,\"noq\"]Ak[2,\"noq_proto::connection\"]1Co[5,\"rustls::client::client_conn\",\"rustls::client::client_conn\"]Bk[5,\"noq_proto::config\",\"noq_proto::config\"]?Ab[10,\"noq::crypto\"]Bc[5,\"noq_proto\",\"noq_proto::config\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]i[5,\"noq\"]C`[5,\"noq_proto\",\"noq_proto::connection::streams\"]Bo[6,\"noq_proto::endpoint\",\"noq_proto::endpoint\"]i[6,\"noq\"]Be[6,\"noq_proto\",\"noq_proto::endpoint\"]Bk[5,\"noq_proto::shared\",\"noq_proto::shared\"]5Bc[5,\"noq_proto\",\"noq_proto::shared\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]4Bc[6,\"noq_proto\",\"noq_proto::shared\"]Ag[6,\"noq_udp\",\"noq_udp\"]Bb[10,\"core::iter::traits::collect\"]Bm[8,\"core::num::nonzero\",\"core::num::nonzero\"];Bb[5,\"noq_proto\",\"noq_proto::token\"]Ak[15,\"noq_proto::PathEvent\"]Ak[5,\"noq\",\"noq::connection\"]1Da[5,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]Bn[5,\"noq_proto\",\"noq_proto::connection::paths\"]2Co[5,\"rustls::server::server_conn\",\"rustls::server::server_conn\"]Bk[5,\"noq_proto::config\",\"noq_proto::config\"]i[5,\"noq\"]Ab[10,\"noq::crypto\"]Bc[5,\"noq_proto\",\"noq_proto::config\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ce[5,\"core::net::socket_addr\",\"core::net::socket_addr\"]0Al[6,\"noq\",\"noq::send_stream\"]Ao[5,\"noq\",\"noq::runtime::tokio\"]Cg[5,\"arbitrary::unstructured\",\"arbitrary::unstructured\"]i[2,\"noq\"]j[2,\"perf\"]9Bl[5,\"noq_proto\",\"noq_proto::bloom_token_log\"]Ab[10,\"core::clone\"]Be[6,\"noq_proto\",\"noq_proto::endpoint\"]Bc[5,\"noq_proto\",\"noq_proto::shared\"]Ai[5,\"noq\",\"noq::endpoint\"]Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]Bc[6,\"rustls::enums\",\"rustls::enums\"]Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Ae[5,\"noq::congestion\"]Cm[5,\"noq_proto::congestion\",\"noq_proto::congestion::new_reno\"]Bi[5,\"core::num::error\",\"core::num::error\"]Bc[5,\"noq_proto\",\"noq_proto::packet\"]Ec[5,\"clap_builder::builder::possible_value\",\"clap_builder::builder::possible_value\"]Bi[6,\"rustls_pki_types\",\"rustls_pki_types\"]Cf[6,\"noq_proto\",\"noq_proto::connection::streams::recv\"]Cg[5,\"rustls::webpki::anchors\",\"rustls::webpki::anchors\"]i[5,\"noq\"]Bc[5,\"noq_proto\",\"noq_proto::config\"]Bk[5,\"noq_proto::coding\",\"noq_proto::coding\"]o[2,\"noq_proto\"]0f[3,\"\"]Ai[10,\"noq\",\"noq::runtime\"]Bi[5,\"rustls_pki_types\",\"rustls_pki_types\"]Cc[6,\"noq_proto::connection\",\"noq_proto::connection\"]Bg[6,\"noq_proto\",\"noq_proto::connection\"]Ak[10,\"clap_builder::derive\"]Ag[15,\"noq_proto::Event\"]:91Ai[5,\"noq\",\"noq::incoming\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]Bc[6,\"rustls::error\",\"rustls::error\"]=Bb[5,\"noq_proto\",\"noq_proto::token\"]1Al[6,\"noq\",\"noq::recv_stream\"]0C`[5,\"noq_proto\",\"noq_proto::connection::streams\"]Ba[5,\"bench::stats\",\"bench::stats\"]o[5,\"noq_proto\"]Al[5,\"noq_udp\",\"noq_udp::imp\"]Ae[5,\"noq\",\"noq::path\"]i[5,\"noq\"]9i[6,\"noq\"]>Bc[5,\"noq_proto\",\"noq_proto::shared\"]2Bn[5,\"noq_proto\",\"noq_proto::connection::stats\"]Ba[5,\"rustls::rand\",\"rustls::rand\"]Ao[5,\"perf::stats\",\"perf::stats\"]o[2,\"noq_proto\"]Bc[6,\"noq_proto\",\"noq_proto::packet\"]7Bi[5,\"noq_proto\",\"noq_proto::config::qlog\"]Bc[15,\"noq_proto::PathAbandonReason\"]Bc[6,\"rustls::enums\",\"rustls::enums\"]Ak[5,\"std::time\",\"std::time\"];Bb[5,\"noq_proto\",\"noq_proto::token\"]Da[5,\"noq_proto::config::transport\",\"noq_proto::config::transport\"]=Bn[5,\"noq_proto\",\"noq_proto::config::transport\"]Bi[5,\"core::num::error\",\"core::num::error\"]Ak[5,\"noq\",\"noq::connection\"]:Ae[5,\"noq\",\"noq::path\"]i[5,\"noq\"]Bb[5,\"noq_proto\",\"noq_proto::frame\"]Bc[6,\"rustls::error\",\"rustls::error\"]Be[5,\"noq_proto\",\"noq_proto::endpoint\"]Bo[5,\"noq_proto::endpoint\",\"noq_proto::endpoint\"]122Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]106Bo[5,\"noq_proto\",\"noq_proto::token_memory_cache\"]Ba[15,\"noq_proto::ProtectedHeader\"]o[2,\"noq_proto\"]Bc[15,\"noq_proto::PathAbandonReason\"]Af[10,\"noq::congestion\"]Cd[10,\"noq_proto::congestion\",\"noq_proto::congestion\"]Ae[5,\"noq::congestion\"]Cc[5,\"noq_proto::congestion\",\"noq_proto::congestion\"]Ab[10,\"noq::crypto\"]Bl[10,\"noq_proto::crypto\",\"noq_proto::crypto\"]j[10,\"noq\"]Bh[10,\"noq_proto\",\"noq_proto::connection\"]9Bc[6,\"noq_proto\",\"noq_proto::packet\"]:Bn[6,\"noq_proto\",\"noq_proto::connection::paths\"]Ak[6,\"noq\",\"noq::connection\"]Cb[6,\"noq_proto\",\"noq_proto::connection::datagrams\"]f[3,\"\"]i[5,\"noq\"]Bn[5,\"noq_proto\",\"noq_proto::config::transport\"]Bd[10,\"noq_proto\",\"noq_proto::packet\"]21Bi[5,\"rustls_pki_types\",\"rustls_pki_types\"]Be[5,\"rustls::verify\",\"rustls::verify\"]Ae[10,\"rustls::verify\"]Da[6,\"noq_proto::connection::paths\",\"noq_proto::connection::paths\"]:6o[5,\"noq_proto\"]Bc[15,\"noq_proto::PacketDecodeError\"]Aa[5,\"noq::crypto\"]Bk[5,\"noq_proto::crypto\",\"noq_proto::crypto\"]o[2,\"noq_proto\"]Aa[6,\"perf\",\"perf\"]Am[5,\"noq\",\"noq::event_stream\"]Dg[5,\"noq_proto::transport_parameters\",\"noq_proto::transport_parameters\"]Al[5,\"noq\",\"noq::recv_stream\"]Bh[2,\"noq_proto::connection::send_buffer\"]An[2,\"noq_proto::bench_exports\"]Ba[15,\"noq::crypto::rustls::Error\"]Bg[15,\"noq_proto::crypto::rustls::Error\"]Ai[5,\"noq::crypto::rustls\"]Ck[5,\"noq_proto::crypto::rustls\",\"noq_proto::crypto::rustls\"]8Be[6,\"rustls::suites\",\"rustls::suites\"]i[5,\"noq\"]Bc[5,\"noq_proto\",\"noq_proto::varint\"]Be[6,\"rustls::webpki\",\"rustls::webpki\"]Ak[5,\"noq\",\"noq::connection\"]?j[10,\"noq\"]Bk[10,\"noq_proto\",\"noq_proto::cid_generator\"]Be[5,\"rustls::verify\",\"rustls::verify\"]6Bc[5,\"noq_proto\",\"noq_proto::config\"]Bg[5,\"noq_proto\",\"noq_proto::connection\"]Bc[5,\"noq_proto\",\"noq_proto::packet\"]Ao[5,\"certificate\",\"certificate\"]Bc[6,\"rustls::error\",\"rustls::error\"]5Bm[5,\"perf::noprotection\",\"perf::noprotection\"]01Aa[5,\"noq::crypto\"]Bk[5,\"noq_proto::crypto\",\"noq_proto::crypto\"]Ce[5,\"rustls::crypto::cipher\",\"rustls::crypto::cipher\"]Bj[5,\"noq_proto\",\"noq_proto::cid_generator\"]07Ba[15,\"noq::crypto::rustls::Error\"]Bg[15,\"noq_proto::crypto::rustls::Error\"]") \ No newline at end of file diff --git a/pr/561/docs/search.index/root.js b/pr/561/docs/search.index/root.js index 8baf72036..0ccd55159 100644 --- a/pr/561/docs/search.index/root.js +++ b/pr/561/docs/search.index/root.js @@ -1 +1 @@ -rr_('{"normalizedName":{"I":"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","N":"ADBd","E":"OjAAAAAAAAA=","H":"3jpX1T07"},"crateNames":{"N":"j","E":"OjAAAAAAAAA=","H":"JFDJy0NX"},"name":{"N":"ADBd","E":"OjAAAAAAAAA=","H":"7bFmUNOn"},"path":{"N":"BAo","E":"OzAAAAEAAAQSugACAAQACQAAAAsAZQByAAEAeQAAAH8ABACKAAEAjQAFAJQAGwCyAOsAoAEIAKoBJADQAQ4A4wEAAOcBBQDzAQEA9wECAPsBAAAAAgUACAI8AkYEAABIBBIAXAQCAGAEAwBlBAoAcQQJAIUEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACsBJoASAUBAEwFCABWBQgAYAUCAGYFCABzBQIAdwUEAH8FBQCNBQEAmQUCAJ0FAgCkBe0AkwYEAJkGAACbBgAAngY8ANwGDwDuBgMA8wYDAPgGGAASBwwAJAcBACgHAAAtBwEAMQcAADMHAwA/BwAAQQcCAEYHAABJBwAATAd0AMIHBQDKBwYA0gfzAMgIAADKCAEAzggBANUIAADbCAUA5QgAAOcIAADqCAIA8AgBAPkIBQABCR0AIAkUADcJgQK6CwAAwQsBAMcLAADMCwAA0gsAANYLAwDiCwAA6gsJAPULBwD+CxkAGQwQACsMTQB6DAMAggwAAIQMAQCcDAEAugx3ATQOAgA5DhsBVg8AAGEPAQBnDwMAbQ8BAHAPAQBzDwEAeg8DAH8PQQDCDwIAxw8WAOQPAQDnDwIA8g8BAPcPBAD9DwIABBAEAAsQAAAaEBIALhAeAE4QHgBvEAMAdxAAAHoQAQB9EAEAgBAHAIwQAQCREAEAlxADAJwQAACeEAIAohA4AOEQBQDqEAEA7xAFAPgQBQACEQEABxFQAFkRAABdEQAAYhEBAGURAQBsEQAAdREBAHgRAwB9EaEAIBIAACISAAAlEgEAKBIAACsSAwAwEgoAPBIBAEQSAgBIEhgAYhIXAHsSAgCEEgEAjhIRAKESAgCmEgMAqxIHALUSAwC6EgUAxBICAMoSAADMEgEAzxIbAOwSAgDxEgQA+BIfABoTCwAoEwQAMBMAADYTJQBdEwQAZRMFAG0TGgCJEwIAjhMQAKETFwC7EwoAyRMFANATFADmEwMA6xMXAAYUHQA=","H":"DECPfczH"},"entry":{"N":"ACAl","E":"OjAAAAEAAAAAAAcBEAAAAAAAAQAHAAgACgBxAHQAdQB2AHoAewCEAIgAiQCMAJMAsACxAJ4BnwGpAd8B4AHhAeIB5AHlAeYB7QHuAe8B8gH1AfoB/AH/AQYCRQRbBF8EZARwBHsEfAR9BH4EgQSCBIYEhwSIBIkEigSLBIwEjQSOBI8ElASaBJ8EoQSjBKYEqASqBEcFSgVLBVUFXwVjBWQFZQVvBXAFcQVyBXwFfQWFBYYFhwWIBYsFjAWPBZAFkwWUBZUFlgWXBZwFoAWhBZIGmAaaBpwGnQbbBuwG7QbyBvcGEQcfByAHIQciByMHKQcsBzcHOAc5BzoHPgdFB0cHSAfIB8kH0QfHCM0I0AjRCNQI2AjZCOMI5AjtCPcI+Aj/CAAJHwk1CbkLvAu9C74LvwvAC8ULyAvLC84L1QvcC94L5QvmC+gL6Qv0C/0LKgx5DH4MgAyBDIMMhwyJDI4MjwySDJUMlgyYDJkMmgybDJ8MowypDKwMrQyvDLAMMg4zDjcOOA5ZD1wPZg91D3kPwQ/FD8YP3g/fD+sP7g/8DwAQAxAKEAwQDxAQEBUQFhAZEC0QTRBzEHwQihCOEI8QkxCbEJ0Q3BDdEN8Q4BDpEO4Q9xBhEWcRaxFtEW4RcRF0EXwRJBIpEi8SOxJHEmESehKIEooSuRLAEsESwhLJEusSGBMZEyYTJxMxEzQTXBNkE58ToBPGE88TBBQFFA==","H":"NMCeoNwo"},"desc":{"N":"FNi","E":"OzAAAAEAADoNhAEAAAEABwABAAoAVgBvAAAAcQAFAHkAAwCEAAEAhwACAIwAGwCwAOsAngEBAKkBAgDMAQIA0AEBANUBAQDYAQAA3QEJAO0BAgDyAQAA9QEAAPgBAgD8AQAA/wEAAAICAQAGAgEADAIGACoCAAA6AgAAPAIBAD8CAQBFAgIASQIAAFECBABaAgAAYQIBAGQCAABpAgAAcAIBAHMCAAB3AgAAegIAAIACAACNAgAAkgIKALUCAwC6AgAAvwIAANICAADYAgAA3gIAAOQCAQDrAgAA8QIAAPkCAAAAAwEACAMAAA8DAAATAwAAGAMDAB0DBgAwAwAAPwMUADsEBABBBAAARQQAAEcEAABJBAAASwQAAE0EDABbBAAAXwQAAGEEAABkBAAAbQQAAHAEAAB2BAEAeQQFAIEEAQCFBAoAlAQAAJoEAACfBAAAoQQAAKMEBQCqBAEArQQCALEEAwC8BIYARwUEAFQFAQBXBQIAXwUAAGEFBQBsBQAAbwUDAHcFAwB8BQEAgwUFAIsFAQCPBQEAkwUEAJwFAQCfBQIAqAXmAJIGAQCVBgEAmAYAAJoGAACcBgEAoAYAAKQGAACnBggAsQYBALUGCwDEBgAAywYBAM4GAQDUBgIA2AYDAOwGAgDwBgAA8gYBAPUGCwAGBwEAEQcAABUHAgAZBwIAHwcEACkHAAAsBwIAMQcAADMHBwA+BwAARQcAAEcHAQBPBwAAUgcZAHQHMACmBwEAuAcCALwHAgDDBwAAxQcAAMgHAQDRBwAA0wcAANcH5gDHCAQAzQgAANAIAQDUCAAA2AgBAN8IAQDjCAEA7QgAAPcIAQD8CAQADwkBABkJBAAfCQAAIwkCACcJAgAyCQEANQkCAEMJugAACgAAAgpNAFMKYAG4CwEAvAsEAMULAQDICwAAywsAAM4LAADQCwEA1QsAANcLAQDcCwAA3gsAAOULAQDoCwEA6wsJAPYLAgD6CwMAAQwBAAkMAAAUDAMAHAwBAB8MAwAkDAEAKAwCAC4MAAAwDAUANww+AHkMAAB+DAAAgAwBAIMMAACHDAAAiQwAAI4MAQCSDAAAlQwBAJgMBQCfDAAAowwAAKkMAACsDAQAuwwFAMMMbQEyDgEANw73AEAPAABGDwIASg8CAFMPAQBWDwMAXA8AAGEPAQBmDwAAaQ8BAG0PBABzDwIAdw8CAHsPAwCPDw8AoA8BAKMPAAClDwEAqQ8TAMEPAADFDwEA2w8BAN4PAQDrDwAA7g8AAPEPAAD6DwMAABAAAAMQAAAFEAMAChAAAAwQAAAPEAEAFRABABkQBQAhEAEAJhACACoQAAAsEAEANBABADsQAQA/EAQATBACAFEQAQBWEAEAYRADAHMQAAB6EAIAgxADAIoQAACMEAMAkRACAJgQAQCbEAAAnRAAAKEQAACjEAIAqxACAK8QAgCzEAYAwBAAAMwQAQDQEAkA3BABAN8QAQDpEAAA7hAAAPEQAQD3EAAA+hADAAERAAAJEQAACxEAAA0RAAASEQAAFBEDABkRAAAbEQAAHREAACARAAAiEQAAJBEAACgRAAArEQAALREAAC8RAAAzEQAANRECADsRAAA9EQAAShEBAFIRAABVEQIAWREAAGERAgBlEQIAaxEAAG0RAQBxEQAAdBEAAHwRhwAKEgQAEBIAABYSAQAZEgEAHBIAAB4SAAAgEgAAIhIAACQSAAApEgAALxIAADUSBgBHEgAAShIBAE0SAgBSEgEAVhIFAF8SAgBpEgAAbhIAAHoSAACIEgAAihIAAI4SAwCZEgMAoBIBALYSAAC5EgIAwBICAMQSAgDJEgAAzxIEAN4SAQDrEgEA7xIAAPESAwD8EgQABBMAAAYTAAAPEwIAExMCABgTAQAbEwAAHhMDACYTAQAxEwAANBMAADoTBgBQEwAAUxMBAFoTAgBeEwAAYRMAAGQTAAB5EwEAihMBAI0TAQCREwAAkxMAAJkTAwCfEwEApxMEAK8TBQC5EwEAwxMAAMYTAADPEwAA1BMDAOETAADvEwUA9hMAAPwTAAD+EwEABBQBAA4UAAASFAAA","H":"Web3xfsH"},"function":{"N":"A@J`","E":"OzAAAAEAAIMDWAAAAAoAcQAbAJMAAACwAAEAngEBAKkBAADPAQAA3wEiAAYCAQBFBAAARwQAAFsEAABfBAAAZAQAAHAEAAB7BC0AqgQBAEcFAABKBQEAVQUAAF8FAABjBQMAbAUAAG8FAwB2BS0AkgYAAJUGAACYBgIAnAYCAKIGAADbBgAA7AYGAPUGAAD3BgAAEQcAABwHMADBBwAAyAcBANEHAADGCDMA/wgBAB8JAAA1CQEAuQswAPQLAAD9CwAAGAwAACoMAAB5DAAAfgwDAIMMNgAyDgMANw4BAFUPAABXDxgAcg8HAH4PAADBDwAAxQ8BANsPIQD+DxsALRAAAE0QAQBrECsAmxACAKEQAADWEDAAVxElAB8SKQBhEgEAeBIbAKASAACiEhMAtxIXAOsSAADvEgsAGBMCACITEwBcEwAAXxMAAGITCgB+Ew8AnxMFALcTAwDEEwsA2xMAAOUTBQADFAQA","H":"N5E3OXU7"},"type":{"N":"AJl","E":"OzAAAAEAAHcSmwACAAQACQAAAAsAZQByAAIAeQAAAH8ABQCIAAAAigABAI0AIgCyAOsAnwEJAKoBNADjAQEA5gEIAPMBAQD3AQIA+wEAAAACBQAHAnMCgQQAAIUEAgCKBAEAlAQAAJcEAgCbBAMAoAQAAKIEAACnBAAAqQQAAKsEswBgBRAAcwUCAHcFBQB/BQUAjQUBAJkFBgCkBXoBIQcEACgHAAAtBwEAMQcAADMHAwA/BwAAQQcCAEUHBABMB3sAyQf8AMgIAADKCAEAzQgCANUIAADYCAEA2wgFAOUIAADnCAAA6ggCAPAIAQD5CL8CugsAALwLAwDBCwEAxQsAAMcLAADMCwAA0gsAANYLAwDcCwAA3gsAAOILAADlCwEA6QtAACsMUgCADAIAhAwBAIcMAACODAEAkgwAAJsMAgCvDAAAugyaAlYPAABhDwEAZg8EAG0PAQBwDwEAcw8CAHoPYwDkDwEA5w8CAPIPAQD3DwgABBAEAAsQAAAaEFIAbxAEAHcQAAB6EAEAfRABAIAQBwCMEAEAkRABAJcQQwDfEAAA4RAFAOkQAgDvEAUA+BAFAAIRAQAHEVAAWREAAF0RAABiEQEAZRECAGwRAAB1EQEAeBGmACASAAAiEgAAJRIBACgSAAArEgMAMBIKADwSAQBEEgIASBIxAHsSAgCEEgEAiBIAAIoSAACOEhUAphIDAKsSBwC1EgMAuhIFAMESAADEEgIAyhIAAMwSAQDPEh8A8RIEAPgSLQAoEwQAMBMAADYTKwBlEwUAbRMaAIkTAgCOExAAoRMXALsTCgDJEwUA0BMUAOYTAwDrExcABhQdAA==","H":"XypmJw7D"},"alias":{"N":"`","E":"OzAAAAEAACMUAQAAACMU","H":"p2IVDFMs"},"generic_inverted_index":{"N":"b","E":"OjAAAAAAAAA=","H":"r0jTqlt6"}}') \ No newline at end of file +rr_('{"normalizedName":{"I":"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","N":"ADBh","E":"OjAAAAAAAAA=","H":"2tH80nv7"},"crateNames":{"N":"j","E":"OjAAAAAAAAA=","H":"JFDJy0NX"},"name":{"N":"ADBh","E":"OjAAAAAAAAA=","H":"jwYvu3Rl"},"path":{"N":"BAo","E":"OzAAAAEAAAgSugACAAQACQAAAAsAZQByAAEAeQAAAH8ABACKAAEAjQAFAJQAGwCyAOsAoAEIAKoBJADQAQ4A4wEAAOcBBQDzAQEA9wECAPsBAAAAAgUACAI8AkYEAABIBBIAXAQCAGAEAwBlBAoAcQQJAIUEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACsBJoASAUBAEwFCABWBQgAYAUCAGYFCABzBQIAdwUEAH8FBQCNBQEAmQUCAJ0FAgCkBe0AkwYEAJkGAACbBgAAngY8ANwGDwDuBgMA8wYDAPgGGAASBwwAJAcBACgHAAAtBwEAMQcAADMHAwA/BwAAQQcCAEYHAABJBwAATAd0AMIHBQDKBwYA0gfzAMgIAADKCAEAzggBANUIAADbCAUA5QgAAOcIAADqCAIA8AgBAPkIBQABCR0AIAkUADcJgQK6CwAAwQsBAMcLAADMCwAA0gsAANYLAwDiCwAA6gsJAPULBwD+CxkAGQwQACsMTQB6DAMAggwAAIQMAQCcDAEAugx3ATQOAgA5Dh0BWA8AAGMPAQBpDwMAbw8BAHIPAQB1DwEAfA8DAIEPQQDEDwIAyQ8WAOYPAQDpDwIA9A8BAPkPBAD/DwIABhAEAA0QAAAcEBIAMBAgAFIQHgBzEAMAexAAAH4QAQCBEAEAhBAHAJAQAQCVEAEAmxADAKAQAACiEAIAphA4AOUQBQDuEAEA8xAFAPwQBQAGEQEACxFQAF0RAABhEQAAZhEBAGkRAQBwEQAAeREBAHwRAwCBEaEAJBIAACYSAAApEgEALBIAAC8SAwA0EgoAQBIBAEgSAgBMEhgAZhIXAH8SAgCIEgEAkhIRAKUSAgCqEgMArxIHALkSAwC+EgUAyBICAM4SAADQEgEA0xIbAPASAgD1EgQA/BIfAB4TCwAsEwQANBMAADoTJQBhEwQAaRMFAHETGgCNEwIAkhMQAKUTFwC/EwoAzRMFANQTFADqEwMA7xMXAAoUHQA=","H":"tf4W8H1m"},"entry":{"N":"ACB`","E":"OjAAAAEAAAAAAAcBEAAAAAAAAQAHAAgACgBxAHQAdQB2AHoAewCEAIgAiQCMAJMAsACxAJ4BnwGpAd8B4AHhAeIB5AHlAeYB7QHuAe8B8gH1AfoB/AH/AQYCRQRbBF8EZARwBHsEfAR9BH4EgQSCBIYEhwSIBIkEigSLBIwEjQSOBI8ElASaBJ8EoQSjBKYEqASqBEcFSgVLBVUFXwVjBWQFZQVvBXAFcQVyBXwFfQWFBYYFhwWIBYsFjAWPBZAFkwWUBZUFlgWXBZwFoAWhBZIGmAaaBpwGnQbbBuwG7QbyBvcGEQcfByAHIQciByMHKQcsBzcHOAc5BzoHPgdFB0cHSAfIB8kH0QfHCM0I0AjRCNQI2AjZCOMI5AjtCPcI+Aj/CAAJHwk1CbkLvAu9C74LvwvAC8ULyAvLC84L1QvcC94L5QvmC+gL6Qv0C/0LKgx5DH4MgAyBDIMMhwyJDI4MjwySDJUMlgyYDJkMmgybDJ8MowypDKwMrQyvDLAMMg4zDjcOOA5bD14PaA93D3sPww/HD8gP4A/hD+0P8A/+DwIQBRAMEA4QERASEBcQGBAbEC8QURB3EIAQjhCSEJMQlxCfEKEQ4BDhEOMQ5BDtEPIQ+xBlEWsRbxFxEXIRdRF4EYARKBItEjMSPxJLEmUSfhKMEo4SvRLEEsUSxhLNEu8SHBMdEyoTKxM1EzgTYBNoE6MTpBPKE9MTCBQJFA==","H":"/83KB5nk"},"desc":{"N":"FNm","E":"OzAAAAEAADoNhQEAAAEABwABAAoAVgBvAAAAcQAFAHkAAwCEAAEAhwACAIwAGwCwAOsAngEBAKkBAgDMAQIA0AEBANUBAQDYAQAA3QEJAO0BAgDyAQAA9QEAAPgBAgD8AQAA/wEAAAICAQAGAgEADAIGACoCAAA6AgAAPAIBAD8CAQBFAgIASgIAAFICBABaAgAAYQIAAGMCAQBpAgAAbwIAAHECAABzAgAAdwIAAHoCAACAAgAAjgIAAJICBgCaAgMAtgIEAL8CAADTAgAA2AIAAN0CAADjAgEA6wIAAPECAAD6AgAA/wIAAAEDAAAJAwAADgMAABMDAAAYAwkAIwMAADADAAA/AxQAOwQEAEEEAABFBAAARwQAAEkEAABLBAAATQQMAFsEAABfBAAAYQQAAGQEAABtBAAAcAQAAHYEAQB5BAUAgQQBAIUECgCUBAAAmgQAAJ8EAAChBAAAowQFAKoEAQCtBAIAsQQDALwEhgBHBQQAVAUBAFcFAgBfBQAAYQUFAGwFAABvBQMAdwUDAHwFAQCDBQUAiwUBAI8FAQCTBQQAnAUBAJ8FAgCoBeYAkgYBAJUGAQCYBgAAmgYAAJwGAQCgBgAApAYAAKcGCACxBgEAtQYLAMQGAADLBgEAzgYBANQGAgDYBgMA7AYCAPAGAADyBgEA9QYLAAYHAQARBwAAFQcCABkHAgAfBwQAKQcAACwHAgAxBwAAMwcHAD4HAABFBwAARwcBAE8HAABSBxkAdAcwAKYHAQC4BwIAvAcCAMMHAADFBwAAyAcBANEHAADTBwAA1wfmAMcIBADNCAAA0AgBANQIAADYCAEA3wgBAOMIAQDtCAAA9wgBAPwIBAAPCQEAGQkEAB8JAAAjCQIAJwkCADIJAQA1CQIAQwm6AAEKTgBTCmABuAsBALwLBADFCwEAyAsAAMsLAADOCwAA0AsBANULAADXCwEA3AsAAN4LAADlCwEA6AsBAOsLCQD2CwIA+gsDAAEMAQAJDAAAFAwDABwMAQAfDAQAJQwAACgMAgAuDAAAMAwFADcMPgB5DAAAfgwAAIAMAQCDDAAAhwwAAIkMAACODAEAkgwAAJUMAQCYDAUAnwwAAKMMAACpDAAArAwEALsMBQDDDG0BMg4BADcO9wBCDwAASA8DAE0PAQBVDwEAWA8DAF4PAABjDwEAaA8AAGsPAQBvDwQAdQ8CAHkPAgB9DwMAkQ8PAKIPAQClDwAApw8BAKsPEwDDDwAAxw8BAN0PAQDgDwEA7Q8AAPAPAADzDwAA/A8DAAIQAAAFEAAABxADAAwQAAAOEAAAERABABcQAQAbEAUAIxABACgQAgAsEAAALhABADYQAQA9EAEAQRAEAFAQAgBVEAEAWhABAGUQAwB3EAAAfhACAIcQAwCOEAAAkBADAJUQAgCcEAEAnxAAAKEQAAClEAAApxACAK8QAgCzEAIAtxAGAMQQAADQEAEA1BAJAOAQAQDjEAEA7RAAAPIQAAD1EAEA+xAAAP4QAwAFEQAADREAAA8RAAAREQAAFhEAABgRAwAdEQAAHxEAACERAAAkEQAAJhEAACgRAAAsEQAALxEAADERAAAzEQAANxEAADkRAgA/EQAAQREAAE4RAQBWEQAAWRECAF0RAABlEQIAaRECAG8RAABxEQEAdREAAHgRAACAEYcADhIEABQSAAAaEgEAHRIBACASAAAiEgAAJBIAACYSAAAoEgAALRIAADMSAAA5EgYASxIAAE4SAQBREgIAVhIBAFoSBQBjEgIAbRIAAHISAAB+EgAAjBIAAI4SAACSEgMAnRIDAKQSAQC6EgAAvRICAMQSAgDIEgIAzRIAANMSBADiEgEA7xIBAPMSAAD1EgMAABMEAAgTAAAKEwAAExMCABcTAgAcEwEAHxMAACITAwAqEwEANRMAADgTAAA+EwYAVBMAAFcTAQBeEwIAYhMAAGUTAABoEwAAfRMBAI4TAQCREwEAlRMAAJcTAACdEwMAoxMBAKsTBACzEwUAvRMBAMcTAADKEwAA0xMAANgTAwDlEwAA8xMFAPoTAAAAFAAAAhQBAAgUAQASFAAAFhQAAA==","H":"TgSefhhP"},"function":{"N":"A@Jd","E":"OzAAAAEAAIMDWAAAAAoAcQAbAJMAAACwAAEAngEBAKkBAADPAQAA3wEiAAYCAQBFBAAARwQAAFsEAABfBAAAZAQAAHAEAAB7BC0AqgQBAEcFAABKBQEAVQUAAF8FAABjBQMAbAUAAG8FAwB2BS0AkgYAAJUGAACYBgIAnAYCAKIGAADbBgAA7AYGAPUGAAD3BgAAEQcAABwHMADBBwAAyAcBANEHAADGCDMA/wgBAB8JAAA1CQEAuQswAPQLAAD9CwAAGAwAACoMAAB5DAAAfgwDAIMMNgAyDgMANw4BAFcPAABZDxgAdA8HAIAPAADDDwAAxw8BAN0PIQAAEBsALxAAAFEQAQBvECsAnxACAKUQAADaEDAAWxElACMSKQBlEgEAfBIbAKQSAACmEhMAuxIXAO8SAADzEgsAHBMCACYTEwBgEwAAYxMAAGYTCgCCEw8AoxMFALsTAwDIEwsA3xMAAOkTBQAHFAQA","H":"rGnv4JMl"},"type":{"N":"AJl","E":"OzAAAAEAAHsSnAACAAQACQAAAAsAZQByAAIAeQAAAH8ABQCIAAAAigABAI0AIgCyAOsAnwEJAKoBNADjAQEA5gEIAPMBAQD3AQIA+wEAAAACBQAHAnMCgQQAAIUEAgCKBAAAjAQAAJQEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACrBLMAYAUQAHMFAgB3BQUAfwUFAI0FAQCZBQYApAV6ASEHBAAoBwAALQcBADEHAAAzBwMAPwcAAEEHAgBFBwQATAd7AMkH/ADICAAAyggBAM0IAgDVCAAA2AgBANsIBQDlCAAA5wgAAOoIAgDwCAEA+Qi/AroLAAC8CwMAwQsBAMULAADHCwAAzAsAANILAADWCwMA3AsAAN4LAADiCwAA5QsBAOkLQAArDFIAgAwCAIQMAQCHDAAAjgwBAJIMAACbDAIArwwAALoMnAJYDwAAYw8BAGgPBABvDwEAcg8BAHUPAgB8D2MA5g8BAOkPAgD0DwEA+Q8IAAYQBAANEAAAHBBUAHMQBAB7EAAAfhABAIEQAQCEEAcAkBABAJUQAQCbEEMA4xAAAOUQBQDtEAIA8xAFAPwQBQAGEQEACxFQAF0RAABhEQAAZhEBAGkRAgBwEQAAeREBAHwRpgAkEgAAJhIAACkSAQAsEgAALxIDADQSCgBAEgEASBICAEwSMQB/EgIAiBIBAIwSAACOEgAAkhIVAKoSAwCvEgcAuRIDAL4SBQDFEgAAyBICAM4SAADQEgEA0xIfAPUSBAD8Ei0ALBMEADQTAAA6EysAaRMFAHETGgCNEwIAkhMQAKUTFwC/EwoAzRMFANQTFADqEwMA7xMXAAoUHQA=","H":"ByMFgEdB"},"alias":{"N":"`","E":"OzAAAAEAACcUAQAAACcU","H":"p2IVDFMs"},"generic_inverted_index":{"N":"b","E":"OjAAAAAAAAA=","H":"O/MoANPD"}}') \ No newline at end of file diff --git a/pr/561/docs/search.index/type/072305804741.js b/pr/561/docs/search.index/type/072305804741.js new file mode 100644 index 000000000..fd91f9802 --- /dev/null +++ b/pr/561/docs/search.index/type/072305804741.js @@ -0,0 +1 @@ +rd_("CBk[\"\",\"ADswAAABAAAFAAIAOwQEAPoTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwUElgSbRLZE+UTAxQSFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJsRAXElkS6xKYE5kT3BP/EwAUARQCFBUUGRQ7MAAAAQAALAESAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAADIMAwC7DAUAqg2GADkQAACyEAcAEhEAAIERhgAYEgAAGhIAAKISAADsEgAACxMAADowAAABAAAAAAAdABAAAABaBWAFYQViBcIGwwbKBssGzAbNBs4Gzwa1C7YLtwu4CwgMTg9SD2MQyRATEh8TXBNdE3MT1BPYE+YTBBQ7MAAAAQAAPQAUAD8DFABmBAAAcgQCAEMFAQBGBQAAWwUBAHUFAAC1BgwAwgcDALQLAAAeDAAAqA8AANwPAABkEAAACxEAAKMSAADnEgMAVBMAANUTAAAFFAAAOzAAAAEAAFcADQDbAD0AigEBAGUEAABwBwAAcwcAALIHAAC0BwAAKxADAE0SBQBEEwAAdBMAALMTBQDGEwAAOzAAAAEAABUABwBMBAAAfQwAADEOAACkDwMAFRIAABITBwDzEwUAOzAAAAEAABMACQBiBAEAawQBANMGBwCxBwAAswcAAEgPAgBRDwAAxBAAAHsSAAADEgcAABMHAABqEgAAAScMAAAFbQcAAG8HAAByBwAAJQwAAMMQAAAAOzAAAAEAAAUAAgDCAQAAkxMEAAAAAacFAAA=\"]Bo[\"AAAAAAAAAAACwRMAAMITAAAAAAAAAqIQAACjEAAA\",\"\"]0Bg[\"\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAA=\"]AGg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAADQAFAHMFAQA/CQEALQwEAH0MAAA+EQMAOjAAAAEAAAAAAAsAEAAAAGsEbASxB7MHUQ9tEG4QMBExETIRMxF7EgRcBAAAEgcAABMHAADBDwAABEIEAABEBAAAnxMAAKATAAAFYQQAAG8HAAByBwAASw8AAE0PAAADIwwAACQMAABMDwAAOzAAAAEAAAYAAwDCAQAAsAYAAJMTBAAB8BIAAAEmDAAA\",\"AAAAAVoRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAA==\"]ANg[\"AAAEUgIAALgCAACfBgAAowYAAAMDDAAABAwAAAUMAAACswEAAMMBAAA7MAAAAQAAhgABAIERhgAAOzAAAAEAAAcAAwBDBQEA5xIDACUUAQAEcAcAAHMHAACyBwAAtAcAADswAAABAAASAAcAcwUBAOgGAAA/CQEALQwEAH0MAAA+EQMAHxIDADowAAABAAAAAAAKABAAAABiBGMEawRsBLEHswdRDzARMREyETMRBVwEAABeBQAAEgcAABMHAADFEAAABEIEAABEBAAAnxMAAKATAAAEbwcAAHIHAABLDwAATQ8AAATFBgAAIwwAACQMAABMDwAABZMTAACUEwAAlRMAAJYTAACXEwAAAfASAAAAAacFAAA=\",\"AAAAAAACSAUAAEkFAAAAAgEMAAACDAAAAcIPAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAAAAAAAAA94GAAAZEQAAGhEAAA==\"]Dc[\"\",\"AAAAADswAAABAAAHAAEAIgkHADswAAABAAAJAAIAvhAEABQRBAAAARMRAAA=\"]ADm[\"AAAABrABAACyAQAAvwEAAMEBAADYDwAA2Q8AAAS2AQAAyQEAADQKAAA5CgAAOjAAAAEAAAAAAAkAEAAAALEBtwG4AcABygHLAaYKqgqhE6ITOzAAAAEAAA0ABACsBAcAfA8AAGkQAwBzEwAAArsBAACjEgAAOzAAAAEAABUACgCmAQEArQEAACsMAQB2DAEAzw8DAFgQAQBzEgMARBMAAMETAQAMFAEAAcMTAAAAAAAAAAAAAAGnBQAA\",\"AAABqwEAAAK0BAAACBIAAAAAAAJCDwAAUBAAAAAAAAAAAAAAAAAEoQYAAKUGAAB6DAAAewwAAA==\",1]Fk[\"AAAABOsEAAAVBwAAuAcAAB0RAAACIwkAAPYLAAABsxAAAAABwwcAAAELAQAAAqUPAAATEwAAAdQGAAA=\",\"AAAAAesEAAABtgEAAA==\"]Fk[\"AAAABDUFAAAZBwAAvAcAACQRAAACJwkAAPoLAAABtxAAAAGOAQAAAcUHAAAAAqcPAAAXEwAAAdgGAAA=\",\"AAAAATUFAAAByQEAAA==\"]AEa[\"AAAAAq4BAAC6AQAAOzAAAAEAAAcAAQAiCQcAAARgBQAAYQUAAGIFAAATEgAAAAABwxMAAAAAAAKiEAAAoxAAAA==\",\"AAAAADswAAABAAAQAAMAlgYAACIJBwD1CwcAOzAAAAEAAAsABAD2BgAApBAAAL4QBAAUEQQAOzAAAAEAAA8ABQCsBAcAEwwCABwSAgBUEgAA2BMAADowAAABAAAAAAAKABAAAADPENEQ0xDVENcQExE2ETcROBE5EVQTBCsQAAAsEAAALRAAAC4QAAAAAAXOEAAA0BAAANIQAADUEAAA1hAAAAAAAAAAAAKnBQAARw8AAA==\",1]Ec[\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCADswAAABAAAGAAIApwYEAAoJAQADXgQAAFMFAABUBQAA\",\"\"]Dg[\"AAAAAAAAAAABtBMAAAH0EwAAAAAAAAAAAAABVAcAAA==\",\"AAAAAAABWxIAAAE/EwAA\"]Eo[\"AAAAAekEAAABtQEAAAIqAAAAmQAAAAGwDwAAAUQDAAACBgEAAAcBAAA=\",\"AAABqAAAAAHpBAAAAQETAAAAAe0LAAA=\"]Ic[\"AAAAASsFAAADxwEAABsTAACaEwAAAlgAAACmAAAABnsBAAB8AQAAQwQAAKYFAAC9DwAA5hMAAAFRAwAA\",\"AAABqQAAAAIrBQAAAxMAAAAB8QsAAAAAAAAAAAAAAAAAAAKqAAAAqwAAAA==\"]Ik[\"AAAAArwEAAByEgAAAfMGAAABkwYAAAGyAAAAAQsRAAABsxMAAAIVEgAA8xMAAAAAAAAAAAAAOjAAAAEAAAAAAAkAEAAAAGcFkQZRB9IHig+hD9MPXBCmEEIR\",\"AAAAAbwEAAAAAVoSAAABPhMAAA==\"]Ck[\"AAAAAd0BAAAAAAAAAbcTAAAB9xMAAA==\",\"AAAAAAABXhIAAAFCEwAA\"]Ck[\"AAAAAd4BAAAAAAAAAbgTAAAB+BMAAA==\",\"AAAAAAABXxIAAAFDEwAA\"]Kk[\"AAAAAAAABFoFAABgBQAAYQUAAGIFAAAAOzAAAAEAAAkAAQCqCwkAOzAAAAEAAA0AAQBMBA0AOzAAAAEAAAkABAAfDAMASA8CAMQQAADYEAEAAAEnDAAAAyUMAABLDwAATQ8AAAIjDAAATA8AAA==\",\"AAAAAAABpBAAAAMTDAAAFAwAABUMAAA=\"]Nk[\"AAAAAAAAAnkSAAB6EgAABOcSAADoEgAA6RIAAOoSAAAC7RIAAO4SAAAF6AYAAB8SAAAgEgAAIRIAACISAAACYgQAAGMEAAACXgUAAMUQAAAAAAHFBgAAAAAAAacFAAA=\",\"AAAAAAJWBQAAxxMAAAAF/RMAACAUAAAhFAAAIhQAACMUAAABVBMAAALCDwAA/hMAAAAAAAAAAAAAAAQwEAAAMRAAADIQAAAzEAAA\"]Bg[\"AAAAAAAAAARXEQAAWBEAAHcTAAB4EwAA\",\"\"]Bk[\"\",\"AAAAAVYRAAAAAAAAAAAAAAAAAAAAAAFVDwAA\"]Cc[\"AAAAAAAAAWMQAAABZBAAAA==\",\"AAAAAAACOQkAADoJAAA=\"]FGo[\"AAAAADswAAABAAAVAAkADAIGAEoEAABrBQAA1AcAAP8LAAA0EAMAWRIAAJgTAQD/EwMAOzAAAAEAABMCEgBBBAAAWgQAAGAEAADJBgAA7wsDALsMBQDDDG0BxA8AAMkPAAA5EAAAVxAAALIQBwASEQAAgRGGABgSAAAaEgAA7BIAAE8TAAA7MAAAAQAAwwAPALIAKAAZAXAAjAEPAEMEAABaBQAApgUAAKwGAwCxBgIAwgYBAOsLAwBGDwAAHxMAAD4TBQDmEwAA+RMAADswAAABAACiAEIAPwMUAF0EAABnBAEAcgQCAEYFAABbBQEAdQUAAKcGBAC1BgwAvwcBAMIHAwDACAEACgkBACAJAQArCQEAAQwBABEMAQAeDAAAwQwBAEMPAQBTDwEAiw8BAI4PAQCoDwAAyg8BANQPAQDcDwAAOhAAAEoQAQBhEAEAZBAAAMoQAQATEQAAHhEAACARAAAiEQAAJREAACcRAAApEQAANBEFAEMRAQBGEQIAVxEBAAkSAQBrEgEAoxIAANgSAQDeEgEA5xIDAAUTAQBFEwEAVRMBAFkTAQB3EwEAfxMBAKkTAQC5EwEA1RMCAOETAwDvEwMABRQAABMUAQAXFAEAGhQBAB4UAQAlFAEAOzAAAAEAAI8AJgDbAD0AigEBAKYBAQBABAAAXgQAAGUEAABTBQEAbQUBAHAHAABzBwAAsgcAALQHAACqCwkAKwwBAHYMAQBPDwEAhA8BAMIPAADPDwMAWBABAKwQAQDGEAEAFhIAAGESAQBzEgMA7RIBAA4TAQA6EwEATRMBAFATAwB0EwAAsxMFAMETAQDGEwAA+xMBAP4TAAAMFAMAHBQBADswAAABAAAxAA0ATAQNAHMFAQDoBgAAPwkBABsMAAB9DAAAMQ4AAKQPAwA+EQMAHxIDABITBwBKEwEA8xMFADswAAABAAAcAA0AYgQBAGsEAQDTBgcAsQcAALMHAAAfDAMASA8CAFEPAABtEAEAxBAAANgQAQB7EgAABhQAADowAAABAAAAAAAHABAAAABcBF4FwQ/FEDwRPRFqEt0TA0IEAABEBAAAJwwAADowAAABAAAAAAAJABAAAABhBG0HbwdyByUMSw9ND6IQoxDDEATFBgAAIwwAACQMAABMDwAAOzAAAAEAAAUAAgCwBgAAkxMEAAABJgwAAAGnBQAA\",\"AAAAAAA7MAAAAQAA5gABAMMM5gAAOjAAAAEAAAAAAFkAEAAAAGcEaAS/B8AHwAjBCCAJIQkrCSwJAQwCDBEMEgzBDMIMQw9ED1MPVA+LD4wPjg+PD8oPyw/UD9UPShBLEGEQYhDKEMsQHhEgESIRJREnESkRNBE1EUMRRBFXEVgRCRIKEmsSbBLYEtkS3hLfEgUTBhNFE0YTVRNWE1kTWhN3E3gTfxOAE6kTqhO5E7oT1hPXE+ET4hPjE+QT7xPwE/ET8hMTFBQUFxQYFBoUGxQeFB8UJRQmFDswAAABAAAvABQApgEBAG0FAQArDAEAdgwBAIQPAQDPDwMAWBABAKwQAQDGEAEAYRIBAHMSAwDtEgEADhMBADoTAQBNEwEAUBMDAMETAQD7EwEADBQDABwUAQAEPwkAAEAJAABKEwAASxMAAAACPBEAAD0RAAAAAqIQAACjEAAA\"]Ic[\"AAAAARsRAAAABFcFAAAPCQAAEAkAABISAAA7MAAAAQAADAADAHUEBQDKBgUAkhMAAAADbAcAAMYQAADHEAAAASYQAAAAB84QAADQEAAA0hAAANQQAADWEAAAPBEAAD0RAAAAAW0HAAA=\",\"\"]Lk[\"AAACUwIAALYCAAAAArYBAADJAQAAOzAAAAEAAAsAAwC3AQEAygEBALIQBwA7MAAAAQAABwABAKwEBwA6MAAAAQAAAAAABwAQAAAAvwfAB4sPjA/UD9UPNBE1EQACShMAAEsTAAA=\",\"AAAAAYIPAAAAAAAAAAAAAAAAAAAAAAWBDwAAgw8AAIoPAACNDwAATBMAAA==\"]AAg[\"AAAEVAIAALcCAAARCQAAEgkAAASsAQAAtAEAALkBAADGAQAAAloCAAC/AgAAAAA6MAAAAQAAAAAAEwAQAAAAZwRoBMAIwQg8ED4QQBBCEEMQzxDRENMQ1RDXEGsSbBIXFBgUGhQbFALtEgAA7hIAAAUtDAAALgwAAC8MAAAwDAAAMQwAAAAFzhAAANAQAADSEAAA1BAAANYQAAAAAAACwgEAALAGAAA=\",\"AAAAAAAAAAAAAAAAAAAAAAAABMIIAADDCAAAxAgAAMUIAAA=\"]BLk[\"AAADDgkAANoSAADbEgAABaoBAAAYCgAAVhEAAOASAADhEgAAOjAAAAEAAAAAAAcAEAAAALUBxwETCRQJ/wlQCnoKFxIBGBIAAAEfEwAAOjAAAAEAAAAAABEAEAAAAMIHwwfEB8UHQg/KD8sPUBAeESARIhElEScRKRFFE0YT4RPiEwFEEwAAOzAAAAEAAAsAAgCkDwMAEhMHADswAAABAAAJAAMA0wYHALEHAACzBwAAAAACbwcAAHIHAAA=\",\"AAAETQUAAE4FAAA4DwAAOQ8AADswAAABAAAWAAsAFAcHABwRAQAfEQAAIREAACMRAQAmEQAAKBEAAAsSAQBxEwEAdRMAAL8TAQACGxMAAJoTAAABEhIAAAAAAAAAAAAAAAAAADowAAABAAAAAABvABAAAACgAaEBowGkAQICAwIJAgoCSQRLBG0EtgS5BKAGpAbRBtIGBgcHB/wI/QgyCTMJ/gsADBYMFwwcDB0MKAwpDD4PPw9AD0EPVg99D34Pnw+gD9MPKBApEEYQRxBIEEkQVRBWEFoQWxBlEGYQnBCdEKYQqBCpEK8QsBC6ELsQvBC9EDoROxFOEU8RDhIPEhASERJWElcSYxJkEm8ScRKYEpkSmhKbEp0SnhKfEqAS3BLiEuMS5BL/EhATERMaEyATIRMiEyMTJBMlEzwTPRNXE1gTXhNfE30TfhOdE54T2hPbEw==\"]Ac[\"AAAAAAEwAwAA\",\"\"]Ca[\"AAAAAAJaAgAAvwIAADswAAABAAAFAAEAUBEFAA==\",\"\",1]Ek[\"AAAAAAAAAAAAAAAAAAAAAAAAAsYGAADcBgAA\",\"AAAAAAACOxAAAD0QAAAAAjwQAAA+EAAAAAIfEgAAIBIAAA==\"]Eo[\"AAAAAAAAAAAAAAAAAAAAAAAAAscGAADdBgAA\",\"AAAAAAACPxAAAEEQAAAAA0AQAABCEAAAQxAAAAACIRIAACISAAA=\"]Ck[\"AAAAAAAAAAAAAAAAAAAAAAAABXAAAACkAQAArQcAAMwHAADECAAA\",\"\"]Bg[\"AAAAAAAAAU4PAAAAAAAAAjwRAAA9EQAA\",\"\"]Gk[\"AAAABGEAAADFBAAAagUAANcPAAABDgIAAAYOAAAASAQAAEUFAAAEBwAATBEAAJwTAAACxwAAAFIPAAAAAlsTAACyEwAA\",\"AAAAAcUEAAABvwgAAAFGBAAA\"]Ig[\"\",\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBIDwIAxBAAANgQAQAAAScMAAAEJQwAAEsPAABNDwAAwxAAAAMjDAAAJAwAAEwPAAAAAAEmDAAA\"]Bg[\"AAAAAAAAAAAAAAAAAAKiEAAAoxAAAA==\",\"\"]Hk[\"AAAD0AEAAAoMAAANDAAAAegEAAABtQEAAAQpAAAAmAAAADsQAAA9EAAAAa8PAAABQwMAAAMFAQAADhEAAA8RAAA=\",\"AAAC0AEAAAYMAAACaQQAAOgEAAABABMAAAAB7AsAAA==\"]Hk[\"AAAD0QEAAAsMAAAODAAAASoFAAABxwEAAARXAAAApQAAAD8QAABBEAAAAnoBAAC8DwAAAVADAAADXgQAABARAAAREQAA\",\"AAAC0QEAAAcMAAADagQAACoFAAACEwAAAAHwCwAA\"]2ALo[\"AAAAAAEqEAAAAAA6MAAAAQAAAAAAEQAQAAAAuwFdBBEMEgzBDMIMQw9ED8oQyxAJEgoS7xPwExMUFBQeFB8UAmUEAABEEwAAOzAAAAEAAAsAAgCkDwMAEhMHADswAAABAAAHAAEA0wYHAAAAAAACwgEAALAGAAA=\",\"AAAHTwUAAFAFAAAKDAAACwwAAA0MAAAODAAAGRIAADowAAABAAAAAAAXABAAAAC1B7YHHgkqCQwMDwwQDDoPOw9MEE0QThCbEBsRKxEsES0RLhEvEUcTsBOxE8QTxRM7MAAAAQAA+QACADkO9QAHEwMAOzAAAAEAAFkABAALAFUA3RIAAAwTAQB2EwAAAfkTAAAAAAQ+EQAAPxEAAEARAABBEQAABDARAAAxEQAAMhEAADMRAAABahIAAAAAAAAAAAdxBAAAZwUAANAGAAA2DgAAnhAAAK4QAABCEQAA\"]Dk[\"AAAAAAIACgAAUQoAAAAAADswAAABAAAFAAEATRIFAAACYgQAAGMEAAAAAkIEAABEBAAA\",\"\"]BOc[\"\",\"ADswAAABAAAFAAIAOwQEAPoTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwUElgSbRLZE+UTAxQSFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJsRAXElkS6xKYE5kT3BP/EwAUARQCFBUUGRQ7MAAAAQAAKAERAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAALsMBQCqDYYAORAAALIQBwASEQAAgRGGABgSAAAaEgAAohIAAOwSAAALEwAAOjAAAAEAAAAAABsAEAAAAFoFYAVhBWIFwgbDBsoGywbMBs0GzgbPBrULtgu3C7gLTg9SD2MQyRATEh8TXBNdE3MT1BPmEwQUOzAAAAEAADsAEgA/AxQAZgQAAHIEAgBDBQEARgUAAFsFAQB1BQAAtQYMAMIHAwC0CwAAHgwAAKgPAADcDwAAZBAAAKMSAADnEgMA1RMAAAUUAAA7MAAAAQAAUgALANsAPQCKAQEAZQQAAHAHAABzBwAAsgcAALQHAABNEgUAdBMAALMTBQDGEwAAOzAAAAEAABQABgBMBAAAfQwAADEOAACkDwMAEhMHAPMTBQA7MAAAAQAAEwAJAGIEAQBrBAEA0wYHALEHAACzBwAASA8CAFEPAADEEAAAexIAAAISBwAAEwcAAAEnDAAABG8HAAByBwAAJQwAAMMQAAAABZMTAACUEwAAlRMAAJYTAACXEwAA\"]Bc[\"AAAAAAAAAAAAAAACPBEAAD0RAAA=\",\"\"]Kc[\"AAAAAAHmEgAAADswAAABAAAGAAIAygYFAMkQAAACRgUAANwPAAABZQQAAAADbRAAAG4QAAB7EgAAAcEPAAA=\",\"AAAAAAABYAQAADswAAABAAAFAAEAdQQFAAAAAAAAAAAAAAAABwsCAAC1BAAAuAQAAN8GAADgBgAA4QYAAOIGAAA=\"]Do[\"AAAAAAABGAAAAAAAAd8AAAAAAAAAAAAAAAACtQQAANEGAAA=\",\"AAAAAAAAAAACTw8AAFAPAAA=\"]Dk[\"AAAAAAABMAAAAAEfAQAAAAAAAAAAAAAAAAACuAQAANIGAAA=\",\"AAAAAAAAAAABQAQAAA==\"]Ac[\"AAABYQIAAA==\",\"\"]Fg[\"AAAABO0EAAAWBwAAuQcAAB8RAAADJAkAAPcLAAAAFAAAAbQQAAAAAAENAQAAARQTAAAB1QYAAA==\",\"AAAAAe0EAAAAAbcBAAA=\"]Fg[\"AAAABDcFAAAaBwAAvQcAACYRAAADKAkAAPsLAAACFAAAAbgQAAABkAEAAAAAARgTAAAB2QYAAA==\",\"AAAAATcFAAAAAcoBAAA=\"]Bk[\"\",\"AAAAAAAAAAA7MAAAAQAAPwACANsAPQCKAQEA\"]Ck[\"\",\"AAAAAAGWBgAAOzAAAAEAAAkAAgD2BgAA+AYIAAHYEwAAAVQTAAA=\"]Bo[\"\",\"AAAAAAAAAAAAAAAAAp8TAACgEwAAAAAAAfASAAA=\"]Ck[\"AAACYwIAAHMCAAA=\",\"AAAAAAAAAmETAABiEwAAAAACPhEAAD8RAAA=\"]Eo[\"\",\"AAAAAAA7MAAAAQAABQABAFoSBQA7MAAAAQAABQABAD4TBQAAOzAAAAEAAAUAAQCzEwUAOzAAAAEAAAUAAQDzEwUA\"]Cc[\"\",\"AAAAAAIAEwAAARMAAAAE6wsAAOwLAADtCwAA7gsAAA==\"]Eo[\"AAAAAfEEAAAAAS0AAAAAAAIVAQAAFgEAAA==\",\"AAA7MAAAAQAACgACAJICBgCaAgMAAvEEAADnEwAAAAABeRIAAA==\"]Eo[\"AAAAATEFAAAAAV8AAAAAAAKKAQAAiwEAAA==\",\"AAA7MAAAAQAACgACABgDCQAjAwAAAjEFAADoEwAAAAABehIAAA==\"]Dg[\"AAAB/wIAAAEwBQAAAAFdAAAAAoUBAACGAQAA\",\"AAABDgMAAAEwBQAAAAAAAAFeBAAA\"]Eo[\"AAAAAAAAApUBAACWAQAA\",\"AAAAAAAAB9QTAAD9EwAABBQAACAUAAAhFAAAIhQAACMUAAAC1RMAAAUUAAAB/hMAAA==\"]Bk[\"AAAAAAAAAUUBAAA=\",\"AAAB2AIAAAAAAVoEAAA=\"]Bg[\"AAAAATsFAAAAAAGXAQAA\",\"AAAAATsFAAA=\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAXgMAAA=\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA64HAADNBwAAxQgAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAnEEAACvBwAA\",\"\"]Cc[\"AAAAAAAAAAIKCQAACwkAAAAAAAAAAAACwgEAALAGAAA=\",\"\"]Fo[\"AAAAAAACVwUAABoSAAAAAAAAAAAAAAAAAAAE0wcAAFYPAABnEAAAWREAAA==\",\"AAF1BwAAAAAAAAAAAAAAAAAAAAAAAAJoEAAADREAAA==\"]Bk[\"AAAAAVkFAAAAAAFODwAAAagPAAA=\",\"AAGmBwAA\"]Bg[\"AAAAAAAABGkQAABqEAAAaxAAAGwQAAA=\",\"\"]Ag[\"AAAAAq4BAAC6AQAA\",\"\"]Dg[\"AAAAAAAAAAAAAj8JAABACQAA\",\"AAAAAAAAAAAABS0MAAAuDAAALwwAADAMAAAxDAAA\"]AEg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAACwAEAHMFAQAtDAQAfQwAAD4RAwA6MAAAAQAAAAAACwAQAAAAawRsBLEHswdRD20QbhAwETERMhEzEXsSBFwEAAASBwAAEwcAAMEPAAAEQgQAAEQEAACfEwAAoBMAAAVhBAAAbwcAAHIHAABLDwAATQ8AAAMjDAAAJAwAAEwPAAA7MAAAAQAABgADAMIBAACwBgAAkxMEAAHwEgAAASYMAAA=\",\"AAAAAVoRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAAAAACQgQAAEQEAAA=\"]He[\"\",\"AAAAAAAEMgwAADMMAAA0DAAANQwAAAIIDAAA2BMAAAILEQAAVBMAAAUrEAAALBAAAC0QAAAuEAAARBMAAAEVEgAAAAFqEgAAAAFtBwAAAAHCAQAAAAABpwUAAA==\",1]AMk[\"AAACvAEAAMUBAAAGrAEAALQBAAC5AQAAxgEAAOASAADhEgAABFgFAAA3CQAA/gkAAFIKAAAEMgwAADMMAAA0DAAANQwAAAJcEwAAXRMAADowAAABAAAAAAAHABAAAAAKCQsJShBLENgS2RLWE9cTOjAAAAEAAAAAAAkAEAAAAEAEcAdzB7IHtAdPD1APwg/7E/wTAAKxBwAAswcAAA==\",\"AAAAOjAAAAEAAAAAABAAEAAAAKIBTQdOB08HUAfVB9YHNgzFD8YPYBDMEM0QZxJoEqES4BMDNAkAACoQAACcEgAABjIMAAAzDAAANAwAADUMAABuEgAAcBIAAAAAAAJzBQAAdAUAAAACXAQAAMEPAAAAA2EEAABLDwAATQ8AAAMjDAAAJAwAAEwPAAAAAAImDAAAggwAADowAAABAAAAAAALABAAAAClAW4EbwS3BLoEjwaQBggHUQfSB9MHoQ8=\"]Bg[\"AAAAAAAAAAAAAVcEAAA=\",\"AAAAAaQFAAA=\"]Bk[\"AAAAAAAAADswAAABAAANAAIAdQUAALUGDAA=\",\"\"]Cc[\"AAABAQkAAAABEgIAAAAAAAFABAAA\",\"AAAAAAAAAAFdBAAA\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAbAGAAA=\",\"\"]Be[\"AAAAAAAAA2AFAABhBQAAYgUAAA==\",\"\",1]Bg[\"AAAAAAAAADswAAABAAAUAAEAPwMUAA==\",\"\"]Dk[\"AAAAAAHIAQAA\",\"AAAAAAUtCQAALgkAAC8JAAAwCQAAMQkAAAAAAAAAAAAAAAAAAAH/DwAA\"]Cc[\"AAAAAcQEAAAAAQ0AAAACvwAAAMAAAAA=\",\"AAAAAcQEAAA=\"]Bg[\"AAAAAAAAAAAAAVIEAAA=\",\"AAAAAcYHAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWYAAAA=\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAaoAAAA=\",\"\"]C@i[\"AAAAAAHIAQAAAaISAAABcxMAAAK7AQAAoxIAADowAAABAAAAAAAbABAAAACtAW0FbgWED4UPrBCtEGESYhIOEw8TOhM7E00TThNQE1ETUhNTE1sTdBOyE/sT/BMOFA8UHBQdFDswAAABAAAGAAMAPwkBAKQPAwDDEwAAAQYUAAAB3RMAAAAAAcUGAAAAAAABpwUAAA==\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAAEAwwAAAQMAAAFDAAACBIAADowAAABAAAAAAAXABAAAACcAakEbgdxB8cHvgi/CC0JLgkvCTAJMQk0CSEQIhAjECQQJRCcEqUSBxMIEwkTChM7MAAAAQAAIAAOANkBAADbAQAAQQQAAEYEAABaBAAAYAQAAPgGCAAyDAMARQ8AAFcQAAC+EAQAFBEEAOUSAABPEwAAOzAAAAEAACMACQBDBAAAdQQFAKYFAADQBwAARg8AAKsPEwBUEgEAYRMBAGQTAQA7MAAAAQAACAAEADoQAAA2EQMARhECAHwTAAA7MAAAAQAADAAGAEAEAABPDwEAKxADAA4RAwBbEwAAshMAAAQfEgAAIBIAACESAAAiEgAAOzAAAAEAAAYAAwAfDAMA2BABAAYUAAAEXAQAAMEPAADFEAAA3RMAAAAAAcUGAAABwgEAAAAAOjAAAAEAAAAAABwAEAAAAKwArQCuAK8Apga0BgEHAgcDB/oIOwk8CT0JPglBCUIJkA+pD6oPzA/ND84PXRBeEF8QRRENEoETJBQ=\",1]Bg[\"AAAAAAAAAAAAAAAAAAKiEAAAoxAAAA==\",\"\"]Jo[\"AAAAAc8EAAAAOjAAAAEAAAAAAAcAEAAAABkAlQDZAUYERQ9REVQRDBMCrA8AAFQSAAACQAMAALYGAAAC4AAAAOEAAAAAAbEHAAAAAAFvBwAA\",\"AAF6BwAAAANhAAAAYgAAAM8EAAACWgIAAMcHAAACUREAAFQRAAAAAagGAAA=\"]A@c[\"AAAAAfgEAAAABzIAAACdAAAA2wEAAFMRAABVEQAA5RIAAA0TAAAHIgEAACMBAABGDwAAtA8AAMAPAABPEAAAVRIAAARIAwAAuwYAAB4MAAB8EwAAARYSAAABMQ4AAAKzBwAABhQAAAHdEwAAAAFyBwAA\",\"AAGPBwAAAAH4BAAAAr8CAABWBQAAAlMRAABVEQAAAa0GAAAAAAEbDAAAAAFqEgAAAAAAAAAABWYAAABnAAAAaAAAAGkAAABqAAAA\"]Bo[\"\",\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwA=\"]CCm[\"\",\"AAA7MAAAAQAA5gABAMMK5gA7MAAAAQAA7QALAMoJMwABCjIANQoDADoKFQBTCh8AdAoFAHsKKQCnCgIArAoWAFMSAADnEwEAOjAAAAEAAAAAABIAEAAAAF0FpQWWBhMJFAn+Cf8JAAo0CjkKUApRClIKcwp6CqUKqwoAEwETOjAAAAEAAAAAABIAEAAAAEgERQX2BgQHOQk6CaYKqgpMEVoSWxJcEl0SXhJfEgsTnBOhE6ITOjAAAAEAAAAAACkAEAAAAMIGwwbQB7ULtgu3C7gL6wvsC+0L7gsIDFIPfA/AD08QYxBpEGoQaxBsEMkQeRJ6Ej4TPxNAE0ETQhNDE2ETYhNkE2UT1BPYE/0TBBQgFCEUIhQjFDowAAABAAAAAAAaABAAAABdBHIEcwR0BFsFXAWnBqgGqQaqBqsGHgzcDzwQPhBAEEIQQxBkEBMRRhFHEUgRVBN8E9UTBRQ7MAAAAQAAWQAPANsAPQCKAQEAQAQAAF4EAABlBAAAUwUBAGwHAABPDwEAwg8AABYSAABNEgUAWxMAALITBgDGEwAA/hMAADswAAABAAARAAgAcwUBABsMAAB9DAAAMQ4AACYQAAA+EQMAShMBAPMTBQA6MAAAAQAAAAAACAAQAAAAYgRjBFEPbRBuENgQ2RB7EgYUOjAAAAEAAAAAAAsAEAAAAFwEXgUSBxMHwQ/OENAQ0hDUENYQahLdEwRCBAAARAQAAJ8TAACgEwAABG0HAABvBwAAcgcAAMMQAAACJAwAAEwPAAA7MAAAAQAABgADAMIBAACwBgAAkxMEAAHwEgAAAAGnBQAA\",1]Le[\"\",\"AAAAAswBAACUBgAAA/QGAAA8DwAAPQ8AAAPmBgAAbhIAAHASAAA6MAAAAQAAAAAABwAQAAAATg8TEhwSHRIeElwTXROSEwJmBAAAtAsAAAGtAQAAAcMTAAAESA8AAEkPAABKDwAAxBAAAAABJwwAAARhBAAAJQwAAEsPAABNDwAAASMMAAAAAAEmDAAA\",1]Gc[\"\",\"AAAAOjAAAAEAAAAAAAcAEAAAAN0B3gEUEm0S2RPlEwMUEhQC8wYAACoQAAAFkwYAAA8JAAAQCQAAfw8AABISAAABHxMAAAELEQAAAUQTAAA=\"]Bo[\"\",\"AAAAAgITAAADEwAAAATvCwAA8AsAAPELAADyCwAA\"]Bk[\"\",\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCAA==\"]Fc[\"AAAAAcQBAAAAAAAABG0FAABuBQAAhA8AAIUPAAA=\",\"AAA7MAAAAQAAPgABADcMPgAAAAAAAAAAAAAAAAAAAAAB4wYAAA==\"]Ao[\"\",\"AAA7MAAAAQAA5gABANcH5gA=\"]A@o[\"AAAEaQIAAHoCAACAAgAAOA8AAAHNBAAAA+sSAAAVFAAAGRQAAAMWAAAAlAAAAFARAAABqw8AADowAAABAAAAAAAMABAAAAA/A3IEcwRDBUQFWwW1BkMRVRN/E6kT4xPxEwLbAAAA3AAAAA==\",\"AAF5BwAAOzAAAAEAAAYAAwBSAgQAEQkAANoSAAABzQQAAAQTCQAA/gkAAP8JAAAACgAAAVARAAAB6wsAAAOnBgAARhEAAEcRAAAAAAAAAAAAAAAAATAPAAA=\"]AAk[\"AAAE3QIAAAEDAAAJAwAAOQ8AAAH1BAAAAAQuAAAAmwAAAFIRAADsEgAABBsBAAAcAQAAsg8AAOYTAAA6MAAAAQAAAAAACgAQAAAARgN0BEYFXAW6BkQRVhOAE6oT5BPyEwABMQ4AAA==\",\"AAGOBwAAOzAAAAEAAAYAAwC2AgQAEgkAANsSAAAB9QQAAAQUCQAAUAoAAFEKAABSCgAAAu8LAABSEQAAAqwGAADQBwAAAUgRAAAAAAAAAAAAAAAABDIPAAAzDwAANA8AADUPAAA=\"]Gc[\"AAA7MAAAAQAACwAEABwQBAAEEwAAqxMEABYUAAA=\",\"ADswAAABAAAJAAMAUgcBAFUHAgDTEgQAOzAAAAEAAAsABAAcEAQABBMAAKsTBAAWFAAA\"]Ig[\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBIDwIAxBAAANgQAQAAAScMAAAEJQwAAEsPAABNDwAAwxAAAAMjDAAAJAwAAEwPAAAAAAEmDAAA\",\"\"]Cc[\"AAAAArABAADMEAAAAAAAAAErDAAAAAFrBAAAARIHAAA=\",\"\"]Cc[\"AAAAAr8BAADNEAAAAAAAAAEsDAAAAAFsBAAAARMHAAA=\",\"\"]ABg[\"AAAAAvESAADyEgAAAAW3AQAAuAEAAMoBAADLAQAAEhEAADswAAABAAALAAMArAQHAFoFAAATDAIAOjAAAAEAAAAAAAcAEAAAAEYFwgfDB8QHxQdTD1QPqA8HDhEAAA8RAAAQEQAAEREAAHQTAADGEwAA/hMAADswAAABAAANAAQAGwwAADEOAACkDwMAEhMHADswAAABAAAHAAEA0wYHAAPFEAAAahIAAN0TAAAAAW0HAAABxQYAAAAAAAGnBQAA\",\"AAAAA9MBAADUAQAA1QEAAAABVxAAAA==\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUQUAAOkGAAA=\",\"AAAAAAAAAAI2EQAANxEAAAAAAAAAAAAAAAACxgYAANwGAAA=\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUgUAAOsGAAA=\",\"AAAAAAAAAAI4EQAAOREAAAAAAAAAAAAAAAACxwYAAN0GAAA=\"]Ak[\"\",\"AAAAAAKiDwAAow8AAA==\"]Eo[\"AAAABO8EAAAXBwAAugcAACERAAACJQkAAPgLAAABtRAAAAAAAQ8BAAABFRMAAAHWBgAA\",\"AAAAAe8EAAAAAbgBAAA=\"]Eo[\"AAAABDkFAAAbBwAAvgcAACgRAAACKQkAAPwLAAABuRAAAAGSAQAAAAABGRMAAAHaBgAA\",\"AAAAATkFAAAAAcsBAAA=\"]Bg[\"AAAAAAAAAAAAAVEEAAA=\",\"AAAAATgJAAA=\"]Ag[\"AAACrwEAAL4BAAA=\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAIlDAAAwxAAAA==\",\"\"]Ag[\"\",\"AAACRBAAAEUQAAA=\"]Bg[\"AAAAAAAAAAAAARUSAAA=\",\"AAABbwAAAA==\"]Dg[\"AAAAAtMBAADUAQAAAAADYAUAABMMAAAcEgAAAAGtAQAAAcMTAAA=\",\"AAAAAQgSAAA=\"]Hg[\"AAAAASsRAAABBxMAAAM7EAAAvxAAABURAAABYRMAAAE2EQAAASsQAAACPhEAAB8SAAABMBEAAAAAAAABlBMAAA==\",\"AAAAAAAAAALPEAAA0RAAAAAAAALOEAAA0BAAAA==\"]Ig[\"AAAAAS4RAAABCRMAAAM/EAAAwRAAABcRAAABZBMAAAE4EQAAAS0QAAACQBEAACESAAABMhEAAAAAAAABlhMAAA==\",\"AAAAAAEMEQAAAAAD0xAAANUQAADXEAAAAAAAA9IQAADUEAAA1hAAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAm4AAAA1DwAA\",\"\"]Bk[\"AAAAAAAAAdoAAAAAAAFZBAAA\",\"AAAAAc8HAAA=\"]Cc[\"AAAAAWAQAAABGxMAAAACQwQAAKYFAAA=\",\"AAAAAAHUBwAA\"]Ek[\"AAAAAdQEAAAAAR0AAAAAAAHmAAAAAAAAAAAAAAAAArcEAACPBgAA\",\"AAF/BwAAAAHUBAAAAAAAAAAAAW0QAAA=\"]Ek[\"AAAAAQUFAAAAAT0AAAABNAEAAAAAAAAAAAAAAAAAAroEAACQBgAA\",\"AAGWBwAAAAEFBQAAAAAAAAAAAW4QAAA=\"]Be[\"AAAAAAA7MAAAAQAAhgABAIERhgA=\",\"\",1]Bg[\"AAAAAAAAAAAAAVQEAAA=\",\"AAAAAeoLAAA=\"]Ec[\"AAAAAAAAAAAAAAAAAAJvBwAAcgcAAAHFBgAAAsIBAACwBgAA\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Dk[\"AAAAAAAAAAABtRMAAAH1EwAA\",\"AAAAAAABXBIAAAFAEwAAAAAAAAAAAAAAAAABVAcAAA==\"]Dg[\"AAAAAR0FAAAAAAJfAQAAYAEAAAG+BgAAAAAAAAAAAAAAAAELAgAA\",\"AAAAAR0FAAA=\"]ABc[\"AAAAA6oBAAARCgAAVhEAAAPEBgAAcwoAALEQAAAAADowAAABAAAAAAANABAAAAAgCSEJKwksCY4Pjw9hEGIQ3hLfEgUTBhNZE1oTOzAAAAEAAA8ABwCsEAEATRIFAA4TAQBbEwAAshMAAA4UAQAcFAEAAAEGFAAAAd0TAAA=\",\"AAAAA50BAACoAQAAJxAAAAQhEAAAIhAAACMQAAAkEAAAAtkBAADbAQAAAAACWxMAALITAAAAAQYUAAAB3RMAAAAAAAAAAATaAQAA3AEAAP4IAABZEQAA\"]Bk[\"AAAAAAHzBgAA\",\"AAAAAAAAAAELEQAAAAEVEgAA\"]Ho[\"AAAABcIEAABpBQAApAUAAHwMAABnEgAAAj0PAADcEwAAAuYGAACiEgAAA70AAAATEgAAcxMAAAFEBQAAAWwHAAABJhAAAA==\",\"AAAAAsIEAACUBgAAAfQGAAAAAAABrQEAAAHDEwAA\"]Gc[\"AAAAAmgSAAB1EwAAAZsGAAAByQYAAAEaAQAAAjoQAACjEgAAAAHoBgAAAAFeBQAAAAFtBwAAAcUGAAAAAAABpwUAAA==\",\"AAAAAAAAAAG7AQAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAW0AAAA=\",\"\"]Fg[\"AAADyAYAAOcGAACcDwAABA8MAABTEAAASxEAAMQTAAAFDQIAAF0FAAClBQAAbgcAAC8JAAAAAsMAAAB8DwAA\",\"AAABqhAAAA==\"]Fg[\"AAAABBAMAABUEAAATREAAMUTAAACcQcAADAJAAAByQYAAAFiAQAAAAAB6AYAAAABXgUAAAAAAAAAAAGnBQAA\",\"AAABqxAAAA==\"]Dg[\"AAAAASIFAAAAAVEAAAABawEAAA==\",\"AAAAASIFAAAAAAAAAAAAAAAAAAAAAAFwAAAA\"]Bk[\"AAAAAAEMAgAAAAAAAAFOBAAA\",\"AAAAARkMAAA=\"]Cc[\"AAAAAAHHBwAAAAAAAAFPBAAA\",\"AAAAAAACGgwAAGkSAAA=\"]Dk[\"\",\"AAAAADswAAABAAATAAEAWAcTADswAAABAAATAAEAlAATADswAAABAAATAAEAqw8TAA==\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWsAAAA=\",\"\"]Fg[\"AAAAATwFAAAAAAGZAQAAAAAAAAAAAWEEAAAAAAABJgwAAAauAAAApQEAAAUCAAC0BgAACAcAAA0SAAA=\",\"AAGlBwAAAAE8BQAA\"]Hk[\"AAAEqAAAAFUCAABNBQAABgwAAAHqBAAAAAIrAAAAmgAAAAGxDwAAAkUDAAC5BgAAAggBAAAJAQAA\",\"AAABgAIAAARjAAAAZAAAAGUAAADqBAAAAbUBAAAAAe4LAAABqwYAAA==\"]Kc[\"AAAEqQAAALkCAABOBQAABwwAAAEsBQAAAARZAAAApwAAAMQPAADJDwAAA30BAAB+AQAAvg8AAAJSAwAAwAYAAA==\",\"AAABCQMAAAEsBQAAAccBAAAB8gsAAANDBAAApgUAALIGAAAAAAAAAAAAAAAAAARrAAAAbAAAAG0AAABuAAAA\"]Ak[\"AAAAAALaDwAA2w8AAA==\",\"\"]Ao[\"AAAAAAAAAAACpgEAAE0SAAA=\",\"\"]Ao[\"AAAAAAAAAAACpwEAAFASAAA=\",\"\"]Dc[\"AAAAAAAAAAABCgEAAAAAAAAAAAAAAAWsAAAAbgQAAAEHAACGDwAAXRAAAA==\",\"\"]Fc[\"AAAAAAAAAX8BAAAAAAAAAAAAAAAAAAWtAAAAbwQAAAIHAACHDwAAXhAAAA==\",\"AAAAAAAAAAAAAegGAAAAAl4FAADFEAAA\"]Fc[\"AAAAAT0FAAAAAAGaAQAAAmYEAAC0CwAAAAAAAAEnDAAAAAAAAAAFrwAAAAMHAAD7CAAAiA8AAF8QAAA=\",\"AAAAAT0FAAA=\"]Hg[\"AAABjQAAAAHQBAAAAAIaAAAAuwwAAAAAAeIAAAAAAAAAAAAAAAADoAEAALYEAAD+CwAA\",\"AAF7BwAAAAHQBAAAAAAAAAAAAAAAAAAAAAAECQcAAAoHAAANBwAADgcAAA==\"]Hg[\"AAAAApAAAAD/BAAAAAI4AAAAvgwAAAEsAQAAAAAAAAAAAAAAAAADoQEAALkEAAAADAAA\",\"AAGSBwAAAAH/BAAAAAAAAAAAAAAAAAAAAAAECwcAAAwHAAAPBwAAEAcAAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHwEgAA\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWwAAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmcAAADlBgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVMEAAA=\",\"AAAAAboMAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAasAAAA=\",\"\"]Dk[\"AAAAAewEAAABtgEAAAABrQQAAAEeEQAAAQwBAAA=\",\"AAGIBwAAAAHsBAAAAAAAAR4RAAA=\"]Dk[\"AAAAATYFAAAByQEAAAACjwEAALEEAAABJREAAA==\",\"AAGhBwAAAAE2BQAAAAAAASURAAA=\"]Hc[\"AAAAAAABfw8AAAGSEwAAAAG2EwAAAfYTAAAAAAAAAAAAADowAAABAAAAAAANABAAAADQBvoIPQk2Do0PkA/MD54QrhBFEW8ScRJME4ET\",\"AAAAAAABXRIAAAFBEwAA\"]Ak[\"AAAAAAKYEwAAmRMAAA==\",\"\"]Cg[\"AAAAAaESAAABNAkAAAFgBAAAAAABZQQAAA==\",\"AAAAAAH/CwAA\"]Ag[\"\",\"AAAAAAAAAbMGAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmgAAABHDwAA\",\"\"]Ag[\"AAAAAAAAAAHBBgAA\",\"\"]Dk[\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwAAOzAAAAEAAD8AAgDbAD0AigEBAA==\",\"\"]Hg[\"AAAAAi0FAADqBgAAATEJAAAEWgAAAAwTAAANEwAAdhMAAAOAAQAAgQEAAPkTAAABUwMAAAABGwwAAAABahIAAAAAAcUGAAA=\",\"AAABiQ8AAAEtBQAAAcgBAAAAAU8QAAA=\"]Dk[\"AAAAAeAEAAAAASIAAAAAAbcGAAAC9gAAAPcAAAA=\",\"AAAAAuAEAAAYCgAAAAAAAakGAAA=\"]Dk[\"AAAAARcFAAAAAUgAAAACUQEAAFIBAAABvAYAAA==\",\"AAAAARcFAAABegoAAAABrgYAAA==\"]Ck[\"AAAAAcUPAAAAAAAAAnAHAACyBwAA\",\"AAAAAAAAAAACKxAAACwQAAA=\"]Ck[\"AAAAAcYPAAAAAAAAAnMHAAC0BwAA\",\"AAAAAAAAAAACLRAAAC4QAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAqcQAAAbEgAA\"]Ek[\"AAAAA9UHAAALEgAAcRMAAAAAAAAAAAGxBwAAAAABbwcAAA==\",\"AAAAAAAAAAI2EQAANxEAAAIrEAAALBAAAA==\"]Ek[\"AAAAA9YHAAAMEgAAchMAAAAAAAAAAAGzBwAAAAABcgcAAA==\",\"AAAAAAAAAAI4EQAAOREAAAItEAAALhAAAA==\"]Dg[\"AAAAAQsFAAAAAUQAAAACPwEAAEABAAA=\",\"AAAAAQsFAAAAAAAAAAEbDAAAAAFqEgAA\"]Cc[\"AAAB2AIAAAH7BAAAAAE0AAAAASYBAAA=\",\"AAAAAfsEAAA=\"]Ic[\"AAABjwAAAAHSBAAAAAIcAAAAvQwAAAAAAeQAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA2gEJAgkHDQcCCQYJPg+BD0YQmBIQEyATPBM=\",\"AAF9BwAAAALSBAAAagUAAAABRQ8AAA==\"]Ho[\"AAAAApIAAAABBQAAAAI6AAAAwAwAAAEuAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA3AEKAgsHDwcECQgJQA+DD0gQmRIREyETPRM=\",\"AAGUBwAAAAEBBQAAAAABRg8AAA==\"]Gk[\"AAACOgIAAEACAAAByAQAAAACEQAAAPoGAAACzQAAAM4AAAA=\",\"AAACPAIAAD0CAAAByAQAAAAAAAACTw8AAFAPAAAAAAJcBAAAwQ8AAAABwxAAAAEkDAAA\"]Do[\"AAAAAQMFAAAAAjsAAACeAAAAAzABAAAxAQAAtQ8AAAFJAwAA\",\"AAAAAQMFAAAAAAAAAUAEAAA=\"]Ck[\"AAAAAnkTAAB6EwAAAAAAAAAAAAABJwwAAA==\",\"AAAAAAABpBAAAA==\"]Co[\"AAAAAAAB5gYAAAMcEgAAHRIAAB4SAAAAAa0BAAA=\",\"AAAAAAABfw8AAA==\"]K@m[\"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\",1]Eo[\"AAAAAAA7MAAAAQAABQABAFoSBQA7MAAAAQAABQABAD4TBQAAOzAAAAEAAAUAAQCzEwUAOzAAAAEAAAUAAQDzEwUA\",\"\"]Ck[\"AAAAAAAAAVoFAAAAAAFMBAAA\",\"AAAAAAAAAxMMAAAUDAAAFQwAAA==\"]Cc[\"\",\"AAAAAAAESAQAAAQHAABMEQAAnBMAAAAAAlsTAACyEwAA\"]Fc[\"AAAAAf4EAAAAATcAAAACKgEAACsBAAA=\",\"AAGRBwAAAAH+BAAAAAACwA8AAE8QAAACHgwAAHwTAAAAAAEGFAAAAd0TAAA=\"]Eo[\"AAAAAUkRAAABLQkAAAACuAAAAAgMAAABExEAAAABUAQAAA==\",\"AAAAAAGlBQAAAAIIDAAAfA8AAAABbAcAAAEmEAAA\"]Dk[\"AAAABhQSAABtEgAA2RMAAOUTAAADFAAAEhQAAAAAAAABRBMAAA==\",\"AAAAAAAAAAELEQAA\"]A@g[\"AAAAOjAAAAEAAAAAABIAEAAAAGkEvwRoBZcGxgc4CeoLGQw2DLoMvw/WD8gQShFYEkcTexObE+ATOjAAAAEAAAAAAAcAEAAAAC4JJRAXEpwS5hLrEhUUGRQ6MAAAAQAAAAAABwAQAAAA2QFGBBoMRQ++EBQRaRILEzowAAABAAAAAAAHABAAAAC5AMkQVBLUE/0TBBQgFCIUAUMFAAAAAAAAAAAAAZMTAAA=\",\"AAAAAb8EAAABvggAAAABCAwAAA==\"]ACk[\"AAAAOjAAAAEAAAAAAAgAEAAAAGoEHgkMDDoPgg+bEC0RsBOxEzowAAABAAAAAAAHABAAAABKBFYFawXUB/8LDBFZEpoTOjAAAAEAAAAAAAoAEAAAANsBWgTED8kPORBXEBIRGBLlEuwSTxM6MAAAAQAAAAAABwAQAAAAGQFGD8APTxBVEuYTIRQjFAVGBQAAHgwAAHwTAADVEwAABRQAAAQWEgAAdBMAAMYTAAD+EwAAAhsMAAAxDgAAAQYUAAADxRAAAGoSAADdEwAA\",\"AAAAAAAAAAAAAAAAAAFtBwAAAAAAAAGnBQAA\"]Ho[\"AAAAAxQHAAC3BwAAHBEAAAMiCQAA9QsAAP8TAAABshAAAAABwgcAAAACpA8AABITAAAB0wYAAA==\",\"AAAAAAT1CwAA9gsAAPcLAAD4CwAAAAWsBAAArQQAAK4EAACvBAAAVBIAAA==\"]Ho[\"AAAAAxgHAAC7BwAAIxEAAAMmCQAA+QsAAAEUAAABthAAAAABxAcAAAACpg8AABYTAAAB1wYAAA==\",\"AAAAAAT5CwAA+gsAAPsLAAD8CwAAAAWwBAAAsQQAALIEAACzBAAAVRIAAA==\"]No[\"AAABjgAAAAHRBAAAAAIbAAAAvAwAAAAAAeMAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAgJJBKAGBgf8CDIJFgwcDCgMfQ+fDygQVRBaEGUQnBCoEK8QuhC8EBkROhFOEQ4SEBJWEmMSnRKfEuISIhMkE1cTXhN9E50T2hM=\",\"AAF8BwAAAAHRBAAAAAAAAAAAAAAAAAAAAAAEAgkAAAMJAAAGCQAABwkAAA==\"]No[\"AAAAApEAAAAABQAAAAI5AAAAvwwAAAEtAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAwJLBKQGBwf9CDMJFwwdDCkMfg+gDykQVhBbEGYQnRCpELAQuxC9EBoROxFPEQ8SERJXEmQSnhKgEuMSIxMlE1gTXxN+E54T2xM=\",\"AAGTBwAAAAEABQAAAAAAAAAAAAAAAAAAAAAEBAkAAAUJAAAICQAACQkAAA==\"]Cc[\"AAAAAecEAAAAAAAAAQMBAAA=\",\"AAAAAecEAAAAAAG1CwAA\"]Ck[\"AAAAASgFAAAAAAF3AQAA\",\"AAAAASgFAAAAAAO2CwAAtwsAALgLAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAFhBAAAAAAAASYMAAA=\",\"\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAATYPAAA=\"]Eo[\"AAAAARgFAAAAAUoAAAACVQEAAFYBAAABvQYAAA==\",\"AAAAARgFAAAAAAGvBgAAAAAAAAAAAAAAAAACTAUAADcPAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhAUAAARFAAA\"]Ck[\"AAAAAAAAAAABxhMAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAABJxQAAA==\"]Ag[\"AAACmgIAABoDAAA=\",\"\"]Bo[\"AAAAAAAAAcEAAAAAAAABIQwAAA==\",\"AAAAAb8PAAA=\"]Cc[\"AAAAAAACGgwAAGkSAAABUg8AAA==\",\"AAAAAAABBAcAAA==\"]Gc[\"AAAAAfoEAAAAATMAAAABJQEAAAABFhIAAAEbDAAAAAFqEgAA\",\"AAGQBwAAAAH6BAAAAAHlEgAAAcAPAAAAARYSAAAAAAAAAAAAAAABBQcAAA==\"]Do[\"AAAAAAAAAAFTDwAAAm0FAACEDwAA\",\"AAAAAa4BAAAAAAABUw8AAARtBQAAhA8AAA4RAAAPEQAA\"]Do[\"AAAAAAAAAAFUDwAAAm4FAACFDwAA\",\"AAAAAboBAAAAAAABVA8AAARuBQAAhQ8AABARAAAREQAA\"]Ao[\"AAAAAAEqEAAAAAABUBAAAA==\",\"\"]Gc[\"AAABKhEAAAJjAAAAtQcAAAEQAgAAAAHJAAAAAnIEAABGEQAAAk8PAADCDwAAAAFRDwAAAlwEAADBDwAAAAIlDAAAwxAAAAIjDAAAJAwAAA==\",\"\"]Cc[\"AAAAAAAAAANdBAAAdAQAAEgRAAA=\",\"AAAAAAABxA8AAA==\"]Ec[\"AAABPAIAAAHJBAAAAAISAAAA+wYAAALPAAAA0AAAAA==\",\"AAABPwIAAAHJBAAAAAAAAkYRAABHEQAA\"]Bo[\"AAABqhAAAAAAAALEAAAAxQAAAA==\",\"AAAAAAFdBQAA\"]Ck[\"AAABqxAAAAAAAAJmAQAAZwEAAA==\",\"AAAAAAAAAAAAAAABXgUAAA==\"]Ao[\"AAAAAAAAAR8TAAABQg8AAA==\",\"\"]Hg[\"AAAAAmUAAADPBwAAARECAAABOQkAAAPVAAAAwgYAAGMQAAACWwUAANwPAAAAAnMFAAB9DAAABkgPAABJDwAASg8AAG0QAADEEAAAexIAAAAAAksPAABNDwAAAUwPAAA=\",\"\"]Dk[\"AAAAAAABOgkAAALDBgAA0AcAAAJcBQAAZBAAAAABdAUAAAFuEAAA\",\"AAAAAAAByQ8AAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHwEgAA\",\"\"]ABc[\"AAABiQ8AAAGUBgAAAsgBAAD0BgAABJMGAAAaDAAAfw8AAGkSAAAC1BMAAAQUAAADCxEAANUTAAAFFAAABWwHAAAOEQAADxEAABARAAAREQAAASYQAAAAAAABbQcAAA==\",\"AAAABeoGAABJEQAAShEAAEsRAABNEQAAA5wBAAA8DwAAPQ8AAAFMEQAABf0TAAAgFAAAIRQAACIUAAAjFAAAAXwTAAAB/hMAAAEVEgAAAAAAAAAAAAJYDwAAcg8AAAUEAgAABQIAAIYPAACHDwAAiA8AAA==\"]Cc[\"AAAAARkFAAAAAUsAAAACVwEAAFgBAAA=\",\"AAAAARkFAAA=\"]Dc[\"AAAAAAAAAAA7MAAAAQAABQABAE0SBQA=\",\"AAAABNIBAADWAQAA1wEAANgBAAA=\"]Ao[\"AAAAAdIBAAAAAAAAAc8PAAA=\",\"\"]Ao[\"AAAAAdcBAAAAAAAAAdAPAAA=\",\"\"]Eo[\"AAAAASwRAAABCBMAAAM9EAAAwBAAABYRAAABYhMAAAE3EQAAASwQAAACPxEAACASAAABMREAAAAAAAABlRMAAA==\",\"\"]Eo[\"AAAAAS8RAAABChMAAANBEAAAwhAAABgRAAABZRMAAAE5EQAAAS4QAAACQREAACISAAABMxEAAAAAAAABlxMAAA==\",\"\"]Bc[\"AAAAAAAAAnUEAADKBgAAAAHRDwAA\",\"\"]Bc[\"AAAAAAAAAngEAADNBgAAAAHSDwAA\",\"\"]Ec[\"AAAAAcwBAAAAAm4SAABwEgAAAlwTAABdEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAAEwAwAA\"]Gg[\"AAAAAcsEAAAAAhQAAAD9BgAAAtYAAADXAAAA\",\"AAADRQIAAEYCAABHAgAAAcsEAAAAAAAB3A8AAAACcwUAAH0MAAACbRAAAHsSAAAAAAABTA8AAA==\"]Eg[\"AAAAAQYFAAAAAj4AAACgAAAAAzUBAAA2AQAAtw8AAAFLAwAA\",\"AAAAAQYFAAAAAAAAAAF0BQAAAW4QAAA=\"]Ec[\"AAAAAAAAAWUBAAAAAAAAAAAAAAAAAAK7BAAAPgkAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAacFAAA=\"]Ec[\"AAAB8wsAAAG+BAAAAAELAAAAAbQAAAA=\",\"AAAAAb4EAAAAARAJAAAAAAAAAAAAAAAAAAABkQYAAA==\"]Dg[\"AAAAAAFYBQAAAAAAAAAAAAAAAAAAAAJoEAAADREAAA==\",\"AAF2BwAAAAAAAZMGAAA=\"]Ac[\"AAABZAIAAA==\",\"\"]Do[\"AAAAAd8EAAAAASEAAAAAAAL0AAAA9QAAAA==\",\"AAACbwIAAHECAAAB3wQAAAAAAAAAAUoTAAA=\"]Dk[\"AAAAARYFAAAAAUcAAAACTwEAAFABAAA=\",\"AAAC4wIAAOQCAAABFgUAAAAAAAAAAUsTAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAXCQAA\"]Dk[\"AAAAAAAAAAABEwEAAA==\",\"AAABjgIAAAAAAAAAAAABYgQAAAESBwAAAUIEAAABbwcAAA==\"]Dg[\"AAAAAAAAAYgBAAA=\",\"AAABEwMAAAAAAAAAAAABYwQAAAETBwAAAUQEAAABcgcAAA==\"]Dk[\"AAAAAe4EAAAAAbcBAAABrgQAAAEgEQAAAQ4BAAA=\",\"AAGJBwAAAAHuBAAAAAAAASARAAA=\"]Dk[\"AAAAATgFAAAAAcoBAAACkQEAALIEAAABJxEAAA==\",\"AAGiBwAAAAE4BQAAAAAAAScRAAA=\"]Ck[\"AAAAAQcFAAAAAT8AAAACNwEAADgBAAA=\",\"AAAAAQcFAAAAAAHDBgAA\"]Eg[\"AAAAAdoEAAAAAiAAAACWAAAAAa0PAAABQQMAAALvAAAAYRIAAA==\",\"AAGEBwAAAWkCAAAC2gQAABEKAAA=\"]Eg[\"AAAAAREFAAAAAkYAAAChAAAAAkoBAAC4DwAAAUwDAAABYhIAAA==\",\"AAGcBwAAAd0CAAABEQUAAAFzCgAA\"]Ao[\"AAAAAAAAAAACWBAAAA4RAAA=\",\"\"]Ao[\"AAAAAAAAAAACWRAAABARAAA=\",\"\"]Do[\"AAABbwAAAAG9BAAAAAABswAAAA==\",\"AAAAAb0EAAAAAQ8JAAAAAAAAAAAAAAAAAAABXBAAAA==\"]Bg[\"AAAAAAAABNQAAABiBQAAFQwAAB4SAAA=\",\"\"]Ak[\"AAAAAAABQAAAAAE5AQAA\",\"\"]Do[\"AAAAAAAAAAAAAAAAAAAAAAAAAqcQAAAbEgAA\",\"AAF0BwAAAAAAAAAAAAAAAAAAAAAAAAFnEAAA\"]Cg[\"AAAAAAPEBgAANwkAALEQAAA=\",\"AAAAAAAAAAJCDwAAUBAAAA==\"]Ag[\"AAACjgIAABMDAAA=\",\"\"]Cc[\"AAAAATUKAAACNAoAAKUKAAABpgoAAAJpEAAAaxAAAA==\",\"\"]Ac[\"\",\"AAAAAVMSAAA=\"]Gg[\"AAAAAd4EAAAB3BMAAAAAAcAIAAAE8wAAANEPAAB0EgAAwRMAAAEmEAAA\",\"AAAAA7IBAADeBAAA5xMAAAABoRMAAAABwAgAAAPRDwAAdBIAAMETAAA=\"]Bc[\"AAAAAbIBAAAAAAAAAAAAAc4QAAA=\",\"\"]Gg[\"AAAAARUFAAAAAAFOAQAAAcEIAAAD0g8AAHYSAADCEwAAAAAAAAFtBwAA\",\"AAAAA8EBAAAVBQAA6BMAAAABohMAAAABwQgAAAPSDwAAdhIAAMITAAA=\"]Bc[\"AAAAAcEBAAAAAAAAAAAAAdIQAAA=\",\"\"]Fg[\"AAABRgIAAAHVBAAAAAEeAAAAAAAC5wAAAOgAAAA=\",\"AAGABwAAAAHVBAAAAAE5CQAAAsIGAABjEAAAA3IEAABzBAAAWwUAAA==\"]Eo[\"AAAAAQkFAAAAAUIAAAACOwEAADwBAAA=\",\"AAGYBwAAAAEJBQAAAAE6CQAAAdAHAAAEdAQAAFwFAABkEAAASBEAAA==\"]Ao[\"\",\"AAAAAAAAAAAAAAAB1hAAAA==\"]Ek[\"AAAAAeMEAAAAASUAAAAAAAL8AAAA/QAAAA==\",\"AAABdwIAAAHjBAAAAAAAAAFsBwAAASYQAAAAAs4QAADQEAAA\"]Eg[\"AAAAAR8FAAAAAVAAAAACYwEAAGQBAAA=\",\"AAAB8QIAAAEfBQAAAAAAAAAAAALSEAAA1BAAAAABbQcAAA==\"]Ao[\"AAAAAAAAAAFDEAAAAAExDAAA\",\"\"]Jk[\"AAAAAeQEAAAABSYAAACXAAAASAUAADsQAAA9EAAAArULAACuDwAABEIDAAABDAAAPBAAAD4QAAAE/gAAAP8AAAAOEQAADxEAAAItDAAALgwAAAIwEQAAMREAAA==\",\"AAAAAuQEAABTEAAAArMBAAA0EAAAAAABCgkAAA==\"]Og[\"AAAAASQFAAAABVMAAACkAAAASQUAAD8QAABBEAAABnABAABxAQAAtgsAALcLAAC4CwAAuw8AAARPAwAAAgwAAEAQAABCEAAAAhARAAAREQAAAi8MAAAwDAAAAjIRAAAzEQAA\",\"AAAABCQFAACpBwAAqgcAAFQQAAAEwwEAADUQAAA2EAAANxAAAAAAAQsJAAACUwUAAFQFAAAAAAAAAAAAAAA7MAAAAQAACgACAKsHBQDKBwQA\"]Cc[\"AAAAARoFAAAAAUwAAAACWQEAAFoBAAA=\",\"AAAAARoFAAA=\"]Ck[\"AAABTwUAAAHlBAAAAAEnAAAAAAABAAEAAA==\",\"AAAAAuUEAAADDAAA\"]Dg[\"AAABUAUAAAElBQAAAAFUAAAAAXIBAAAAAAAAAAAAAcUGAAA=\",\"AAAAAiUFAAAEDAAA\"]Cc[\"AAAAAT4FAAAAAWAAAAABmwEAAA==\",\"AAAAAj4FAAAFDAAA\"]Dg[\"AAAAAAAAAAAAAAABxRAAAA==\",\"AAAABjgQAABgEgAASBMAAEkTAAB5EwAAehMAAA==\"]Ak[\"AAAAAAAAAAABTxIAAA==\",\"\"]Ak[\"AAAAAAAAAAABUhIAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmoAAAAEAgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVUEAAA=\",\"AAAAAcgQAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmkAAAAFBwAA\",\"\"]Bk[\"AAAAAAAAAAAAAATTBgAA1AYAANUGAADWBgAA\",\"\"]Ec[\"AAAABJ0BAACoAQAA+QQAACcQAAAAAAEkAQAAAAAABNcGAADYBgAA2QYAANoGAAA=\",\"AAAAAfkEAAA=\"]Bg[\"AAAAAAAAAAAAAVYEAAA=\",\"AAAAAAHmEgAA\"]Cc[\"AAAAATgKAAACOQoAAKsKAAABqgoAAAJqEAAAbBAAAA==\",\"\"]Ag[\"AAAAAAAB9gYAAA==\",\"\"]No[\"AAAAAdwEAAAB9AYAAAGiEgAAAXwPAAAGEQwAAEoQAABFEwAAWRMAALkTAADhEwAAB/EAAACtAQAAdgwAAM8PAABzEgAAUBMAAFITAAABwxMAAAAAAAAAAAAAA6EGAAB6DAAAdxIAAA==\",\"AAAAAtwEAADYDwAAAAGxAQAAAXkSAAAGEQwAAEoQAABFEwAAWRMAALkTAADhEwAABXYMAADPDwAAcxIAAFATAABSEwAA\"]Bo[\"AAAAAdgPAAAAAbEBAAAAAjwQAADPEAAAAAEtDAAA\",\"\"]Nc[\"AAAAARMFAAAAAAFMAQAAOjAAAAEAAAAAAAcAEAAAALsBEgxLEKMSRhNaE7oT4hMFdwwAANAPAAB1EgAAURMAAFMTAAAAAAAAAAAAAAAEpwUAAKUGAAB7DAAAeBIAAA==\",\"AAAAAhMFAADZDwAAAAHAAQAAAXoSAAAGEgwAAEsQAABGEwAAWhMAALoTAADiEwAABXcMAADQDwAAdRIAAFETAABTEwAA\"]Bo[\"AAAAAdkPAAAAAcABAAAAAkAQAADTEAAAAAEvDAAA\",\"\"]Ao[\"AAAAAAAAAAACUBMAAFETAAA=\",\"\"]Ao[\"AAAAAAAAAAACUhMAAFMTAAA=\",\"\"]Dc[\"AAABRwIAAAHMBAAAAAIVAAAA/gYAAALYAAAA2QAAAA==\",\"AAABSgIAAAHMBAAA\"]Bk[\"AAAAAdUBAAAAAATTAAAAYQUAABQMAAAdEgAA\",\"\"]Ec[\"AAAAAgITAAADEwAAAgATAAABEwAABO8LAADwCwAA8QsAAPILAAAE6wsAAOwLAADtCwAA7gsAAA==\",\"\"]Cc[\"AAAAAAAAAAABThIAAA==\",\"AAF3BwAAAAKsAQAA4BIAAA==\"]Cc[\"AAAAAAAAAAABURIAAA==\",\"AAGMBwAAAAK5AQAA4RIAAA==\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAABxQYAAA==\"]Cg[\"AAAAATsPAAAAAAFvAQAAAToQAAA=\",\"AAGoBwAAAAAAAU8TAAA=\"]Ek[\"AAAAAcMEAAAAAAG+AAAAAAAAAAAAAAAAAAAE3BIAAOQSAAD/EgAAGhMAAA==\",\"AAF4BwAAAALDBAAAaQUAAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzsJAADNDwAAEBQAAA==\",\"\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzwJAADODwAAERQAAA==\",\"\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAYCQAA\"]Bc[\"AAAAAAABQQQAAA==\",\"AAAAAAGpBAAA\"]Ec[\"AAAAAfAEAAAAAbgBAAABrwQAAAIiEQAAdxMAAAEQAQAA\",\"AAGKBwAAAAHwBAAAAAAAAiIRAAB3EwAA\"]Ec[\"AAAAAToFAAAAAcsBAAACkwEAALMEAAACKREAAHgTAAA=\",\"AAGjBwAAAAE6BQAAAAAAAikRAAB4EwAA\"]Ag[\"\",\"AAAAAAABEhIAAA==\"]Co[\"AAAAAqIBAACpBwAAAAABaAEAAA==\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Ac[\"\",\"AAAAAAGlEgAA\"]Cg[\"AAAAAAAAAnkSAAB6EgAAAAABFRIAAA==\",\"AAAAAAAAAAFUEwAA\"]Do[\"AAAAAQQFAAAAAjwAAACfAAAAAzIBAAAzAQAAtg8AAAFKAwAA\",\"AAAAAQQFAAAAAAABXQQAAA==\"]Ak[\"AAAAAAACoRMAAKITAAA=\",\"\"]Ac[\"AAAAAdYBAAA=\",\"\"]Ac[\"AAAAAdgBAAA=\",\"\"]Eo[\"AAAC+gIAAA4DAAABLgUAAAABWwAAAAKCAQAAgwEAAA==\",\"AAAAAS4FAAAAAAAFpwYAAKgGAACpBgAAqgYAAKsGAAA=\"]Fk[\"AAAABEwQAABNEAAASBMAAEkTAAABPA8AAAGkEAAAARMSAAAAAAHDEwAAAAAAAAAAAAEmDAAA\",\"AAAAAAAAAxwSAAAdEgAAHhIAAA==\"]Fc[\"AAAAAAABkwYAAAJ5EgAAehIAAAELEQAAAAEVEgAAAAACnxMAAKATAAAAAAAB8BIAAA==\",\"AAAAAAAAAdgTAAABVBMAAA==\"]Ag[\"\",\"AAAAAAABRQUAAA==\"]Co[\"AAAAAQwFAAAAAUUAAAACQQEAAEIBAAA=\",\"AAAAAQwFAAAAAAAAAAExDgAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAeQGAAA=\",\"\"]Jc[\"AAAAAtsEAAC/EwAAAAAAAgkSAADeEgAABPAAAACtAQAAKwwAAO0SAAADPwkAAEoTAADDEwAAAAAAAaIQAAA=\",\"AAGFBwAAAAKwAQAA2wQAAAAAAAIJEgAA3hIAAAIrDAAA7RIAAAI/CQAAShMAAAAAAAGiEAAA\"]Jg[\"AAAAAhIFAADAEwAAAAABSwEAAAO7AQAAChIAAN8SAAACLAwAAO4SAAACQAkAAEsTAAAAAAABoxAAAA==\",\"AAGdBwAAAAK/AQAAEgUAAAGbBgAAAAACChIAAN8SAAACLAwAAO4SAAACQAkAAEsTAAAAAAABoxAAAA==\"]Ao[\"AAAAAAAAAcYAAAAAAAFYBAAA\",\"\"]Bc[\"AAAAAAABSQAAAAJTAQAAVAEAAA==\",\"\"]Ag[\"AAACkgIAABsDAAA=\",\"\"]Ak[\"AAAAAAAAAnYEAADLBgAA\",\"\"]Ak[\"AAAAAAAAAnkEAADOBgAA\",\"\"]Ag[\"AAAClQIAAB8DAAA=\",\"\"]Dk[\"AAAAAcoEAAAAAhMAAAD8BgAAAtEAAADSAAAA\",\"AAABQAIAAAHKBAAAAAAAAAAAAVEPAAA=\"]Dg[\"AAAAAccEAAAAAhAAAAD5BgAAAssAAADMAAAA\",\"AAABOgIAAAHHBAAAAAAAAAHCDwAA\"]Co[\"AAABGRIAAAEIBQAAAAFBAAAAAToBAAA=\",\"AAGXBwAAAQEJAAABCAUAAA==\"]Ec[\"AAAAAAABGhIAAAG1AAAAAAAAAAAAAAAAAAADbQQAAP4IAABVDwAA\",\"AAAAAaoBAAAAAAAAAUQTAAA=\"]Hk[\"AAAC0wIAAOsCAAABJgUAAAABVQAAAAJzAQAAdAEAAAAAAAAAAAAAAAAABAgCAABMBQAApgYAAOMGAAA=\",\"AAAB/wIAAALEAQAAJgUAAAAAAmQTAABlEwAAAAACQBEAAEERAAA=\"]Fc[\"AAAAAzgQAABOEAAAYBIAAAACbhIAAHASAAADmAEAAFwTAABdEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAcwBAAA=\"]Dc[\"AAAAAmIAAADGBAAAAg8CAAC/CAAAAQ8AAAAByAAAAA==\",\"AAAAAsYEAADXDwAA\"]Eg[\"AAAAAeEEAAAAASMAAAAAAAL4AAAA+QAAAAAAAAAAAAAAAAPfBgAALw8AADYPAAA=\",\"AAABcwIAAAHhBAAA\"]Eg[\"AAAAARsFAAAAAU0AAAACWwEAAFwBAAAAAAAAAAAAAAAAAAPhBgAAMQ8AADcPAAA=\",\"AAAB6wIAAAEbBQAA\"]Hk[\"AAAFKgIAAD0CAAA/AgAARQIAAEoCAAAB1gQAAAACHwAAAP8GAAAAAALpAAAA6gAAAA==\",\"AAADYQIAAGMCAABkAgAAAtYEAACXBgAAAqUFAAAlEAAAAQsTAAABfA8AAAETEQAA\"]Ek[\"AAAAAQoFAAAAAkMAAAAABwAAAj0BAAA+AQAA\",\"AAAB0wIAAAEKBQAAAAAAAAAAAAAAAAAAAAACuwQAAOQGAAA=\"]Bk[\"AAAAAAABORAAAAFuAQAA\",\"AAAAAAAAAAE6EAAA\"]Fo[\"AAABjwAAAAHTBAAAAAG9DAAAAAAB5QAAAAAAAAAAAAAAAAYKBwAADgcAAAMJAAAHCQAAPw8AAEcQAAA=\",\"AAF+BwAAAALTBAAAaAUAAA==\"]Fo[\"AAAAApIAAAACBQAAAAHADAAAAS8BAAAAAAAAAAAAAAAAAAYMBwAAEAcAAAUJAAAJCQAAQQ8AAEkQAAA=\",\"AAGVBwAAAAECBQAAAWsFAAA=\"]Ag[\"AAACnAIAAB0DAAA=\",\"\"]Cg[\"AAAAAUAFAAAAAAADQg8AAKgPAABQEAAA\",\"AAGnBwAAAAFABQAA\"]Dc[\"AAAAAiAFAACqBwAAAAABaQEAAA==\",\"AAAAASAFAAAAAAAAAAAAAAAAAAGwBgAA\"]Dg[\"AAAAAfESAAAB2g8AAAAAAALrAAAADxEAAA==\",\"AAEMCQAAAa8BAAAB8RIAAAHaDwAA\"]Dg[\"AAAAAfISAAAB2w8AAAABRgEAAAABEREAAA==\",\"AAENCQAAAb4BAAAB8hIAAAHbDwAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATQPAAA=\",\"\"]Ac[\"\",\"AAAAAAHHEwAA\"]Ag[\"AAACnQIAACEDAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAADTRIAAE4SAABPEgAA\"]Bc[\"\",\"AAAAAAAAAAADUBIAAFESAABSEgAA\"]Ak[\"\",\"AAAAAXISAAAAAAGSEwAA\"]ADc[\"AAAAAdcEAAAAAAA6MAAAAQAAAAAAFAAQAAAAvwfBDEMPiw+OD8oPyhBDEVcRaxLYEn8T1hPjE+8T8RMTFBcUGhQeFCUUOjAAAAEAAAAAAAwAEAAAAOwAWBDGEGEScxJ0Eg4TOhNNE/sTDBQOFBwUAAABPBEAAA==\",\"AAGBBwAAAAHXBAAAAAAAOjAAAAEAAAAAABQAEAAAAL8HwQxDD4sPjg/KD8oQQxFXEWsS2BJ/E9YT4xPvE/ETExQXFBoUHhQlFDowAAABAAAAAAAJABAAAABYEMYQYRIOEzoTTRP7EwwUDhQcFAAAATwRAAA=\"]ADc[\"AAAAAQ4FAAAAAAFHAQAAOjAAAAEAAAAAABQAEAAAAMAHwgxED4wPjw/LD8sQRBFYEWwS2RKAE9cT5BPwE/ITFBQYFBsUHxQmFDowAAABAAAAAAALABAAAABZEMcQYhJ1EnYSDxM7E04T/BMNFA8UHRQAAAE9EQAA\",\"AAGZBwAAAAEOBQAAAAAAOjAAAAEAAAAAABQAEAAAAMAHwgxED4wPjw/LD8sQRBFYEWwS2RKAE9cT5BPwE/ITFBQYFBsUHxQmFDowAAABAAAAAAAJABAAAABZEMcQYhIPEzsTThP8Ew0UDxQdFAAAAT0RAAA=\"]Ag[\"AAACbwIAAOMCAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAU0EAAA=\",\"AAAAAAAAAQgMAAA=\"]Bk[\"AAAAAAAAAAAAAAEgDAAA\",\"AAAAAAABnBMAAA==\"]Do[\"AAAAAeIEAAAAASQAAAAAAAL6AAAA+wAAAAAAAAAAAAAAAALgBgAAMA8AAA==\",\"AAAAAeIEAAA=\"]Do[\"AAAAARwFAAAAAU4AAAACXQEAAF4BAAAAAAAAAAAAAAAAAALiBgAAMg8AAA==\",\"AAAAARwFAAA=\"]Ag[\"AAAClwIAABgDAAA=\",\"\"]Fc[\"AAAAAR4FAAAAAk8AAACiAAAAAmEBAAC5DwAAAk0DAAA6EAAA\",\"AAAAAR4FAAAAAAAAAAAAAAABbQcAAAAAAAABpwUAAA==\"]Ac[\"\",\"AAAAAAFuBwAA\"]Ao[\"AAAAAAGpBAAA\",\"AAAAAAFxBwAA\"]Ag[\"AAAClAIAABwDAAA=\",\"\"]Ag[\"AAAClgIAACADAAA=\",\"\"]Dg[\"AAAAAfIEAAAAAAAB5xIAAAAAAAHQEAAA\",\"AAAAAvIEAAA1CgAAATQKAAAAAWkQAAA=\"]Do[\"AAABzQEAAAEyBQAAAAAAAekSAAAAAAAB1BAAAA==\",\"AAAAATIFAAABpQoAAAGmCgAAAWsQAAA=\"]Do[\"AAAAAfQEAAAAAAADPhAAANEQAADoEgAAAAEuDAAA\",\"AAAAAvQEAAA4CgAAATkKAAAAAWoQAAA=\"]Eg[\"AAABzgEAAAE0BQAAAAAAA0IQAADVEAAA6hIAAAABMAwAAA==\",\"AAAAATQFAAABqwoAAAGqCgAAAWwQAAA=\"]Cc[\"AAAAAAAAAncEAADMBgAAAAEEAQAA\",\"AAGHBwAAAAG0AQAA\"]Cc[\"AAAAAAAAA3kBAAB6BAAAzwYAAA==\",\"AAGgBwAAAAHGAQAA\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA94GAACwBwAAzgcAAA==\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATMPAAA=\",\"\"]Ao[\"AAAAAAAAAawEAAAAAQwUAAA=\",\"\"]Bk[\"AAAAAAAAAbAEAAAAAQ0UAAA=\",\"AAAAAbQEAAA=\"]Eg[\"AAAAAAAAAAABEQEAAAAAAAAAAAAAAANBCQAAqQ8AAJoSAAA=\",\"AAGLBwAAAAS3BwAAuAcAALkHAAC6BwAA\"]Eg[\"AAAAAAAAAZQBAAAAAAAAAAAAAAAAAANCCQAAqg8AAJsSAAA=\",\"AAGkBwAAAAS7BwAAvAcAAL0HAAC+BwAA\"]Bo[\"AAAAAAABsQEAAAAAAXYMAAAAAWIEAAAAAUIEAAA=\",\"\"]Bo[\"AAAAAAABwAEAAAAAAXcMAAAAAWMEAAAAAUQEAAA=\",\"\"]Ak[\"AAAAAAABDBMAAAFzEwAA\",\"\"]Ao[\"AAAAAAABDRMAAAAAAXQTAAA=\",\"\"]Fo[\"AAAAASMFAAAAAlIAAACjAAAAA2wBAABtAQAAug8AAAFOAwAA\",\"AAAB+gIAAAEjBQAAAAAAAAJTBQAAVAUAAAAAAAAAAALCAQAAsAYAAA==\"]Dg[\"AAAAAfwEAAAAATUAAAABJwEAAA==\",\"AAAAAfwEAAAAAAAAAAAAAAAAAAAAAAHlBgAA\"]Dg[\"AAAAAcEEAAAAAgwAAAD4BgAAArsAAAC8AAAA\",\"AAABKgIAAAHBBAAAAAAByRAAAA==\"]Do[\"AAAAAfcEAAAAAjEAAACcAAAAAyABAAAhAQAAsw8AAAFHAwAA\",\"AAAAAfcEAAAAAAAAAWUEAAA=\"]Ek[\"AAAAAdgEAAAAAAACVRMAAKkTAAAD7QAAAKwQAAA6EwAA\",\"AAGCBwAAAAHYBAAAAAAAAlUTAACpEwAAAawQAAA=\"]Ek[\"AAAAAQ8FAAAAAAFIAQAAAlYTAACqEwAAAq0QAAA7EwAA\",\"AAGaBwAAAAEPBQAAAAAAAlYTAACqEwAAAa0QAAA=\"]Bo[\"AAAAAAAAAAABUwUAAAAAAAAAAALCAQAAsAYAAA==\",\"\"]Fg[\"AAAAAdkEAAAAAAAEIAkAANQPAAA0EQAABRMAAALuAAAATRMAAA==\",\"AAGDBwAAAAHZBAAAAAAABCAJAADUDwAANBEAAAUTAAA=\"]Fg[\"AAAAARAFAAAAAAFJAQAABCEJAADVDwAANREAAAYTAAABThMAAA==\",\"AAGbBwAAAAEQBQAAAAAABCEJAADVDwAANREAAAYTAAA=\"]Ag[\"\",\"AAAAAAAAAdgTAAA=\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAAAAAHwEgAA\"]Ag[\"\",\"AAAAAAAAAVIPAAA=\"]Co[\"AAAAAf0EAAAAATYAAAACKAEAACkBAAA=\",\"AAAAAf0EAAAAAAAAARYSAAA=\"]Fg[\"AAABVgIAAAHmBAAAAAEoAAAAAAG4BgAAAgEBAAACAQAA\",\"AAACegIAAJ8GAAAB5gQAAAAAAAGqBgAAAAAAAAAAAAAAAAEvDwAA\"]Gc[\"AAABugIAAALEAQAAJwUAAAABVgAAAAJ1AQAAdgEAAAG/BgAA\",\"AAACAQMAAKMGAAABJwUAAAAAAbEGAAAAAAAAAAAAAAAAAAIIAgAAMQ8AAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA6wHAADLBwAAwwgAAA==\",\"\"]Cg[\"AAABdwIAAAAAAAAAARQBAAA=\",\"AAAAAAAAAAI8EAAAPhAAAA==\"]Cg[\"AAAB8QIAAAAAAAGJAQAA\",\"AAAAAAAAAANAEAAAQhAAAEMQAAA=\"]Bo[\"AAAAArQEAAA/BQAAAaUSAAA=\",\"AAAAAj8FAABaEQAA\"]Bo[\"AAAAAAAAAcIAAAAAAAABIgwAAA==\",\"AAAAAXsTAAA=\"]Io[\"AAAAAS8FAAAAAVwAAAABhAEAAAZ1BQAAzxAAANEQAADTEAAA1RAAANcQAAAAAAAFzhAAANAQAADSEAAA1BAAANYQAAAAAAAAAAABJBQAAA==\",\"AAAAAS8FAAAAAARhEwAAYhMAAGQTAABlEwAAAAFeBAAA\"]Co[\"AAAAAmQAAAC2BwAAAAABygAAAAJzBAAARxEAAAFQDwAA\",\"AAABKhEAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAwEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhcJAAAyEAAA\",\"\"]Co[\"AAAAAfMEAAAAAAAAAhcBAAAYAQAA\",\"AAAAAfMEAAAAAAJpEAAAahAAAA==\"]Dc[\"AAAAATMFAAAAAAKMAQAAjQEAAA==\",\"AAAAAjMFAABTEgAAAAACaxAAAGwQAAA=\"]Cc[\"AAAAAAGcAQAAAAG3AAAAAAAAAR8MAAA=\",\"AAAAAZsTAAA=\"]Ac[\"\",\"AAAB8wsAAA==\"]Ec[\"AAABcQIAAAHOBAAAAAEXAAAAAAAC3QAAAN4AAAA=\",\"AAAAAc4EAAAEEwkAAP4JAAD/CQAAAAoAAA==\"]Do[\"AAAB5AIAAAH2BAAAAAEvAAAAAh0BAAAeAQAA\",\"AAAAAfYEAAAEFAkAAFAKAABRCgAAUgoAAA==\"]Ak[\"\",\"AAAAAAACoRMAAKITAAA=\"]Ck[\"AAAAAsAEAAAqCQAAAb4IAAAB3RIAAAG6AAAA\",\"AAAAAsAEAADWDwAA\"]Cg[\"AAAAAU0HAAACIRAAADQQAAAAAbULAAAAAAAAAAABohAAAA==\",\"\"]Ck[\"AAAAAU4HAAACIhAAADUQAAAAArYLAAC3CwAAAAAAAAAAAaMQAAA=\",\"\"]Bc[\"AAAAAAAAAAAAAAAAAp8TAACgEwAA\",\"\"]Fo[\"AAAAAd0EAAAAAAADZwQAACsJAAC5EwAAAvIAAACmAQAA\",\"AAGGBwAAAAHdBAAAAAAAAmcEAAArCQAAAaYBAAAAAAAAAAAAAAABdxIAAA==\"]Fo[\"AAAAARQFAAAAAAFNAQAAA2gEAAAsCQAAuhMAAAGnAQAA\",\"AAGeBwAAAAEUBQAAAAAAAmgEAAAsCQAAAacBAAAAAAAAAAAAAAABeBIAAA==\"]Ck[\"AAAAAQ0FAAAAAAJDAQAARAEAAA==\",\"AAAAAQ0FAAAAAAAAAcYTAAA=\"]Ec[\"AAAAASEFAAAAAAFqAQAAAAAAAAAAAAAAAAAFowEAAKsHAADKBwAAwggAAHgMAAA=\",\"AAAAASEFAAA=\"]Dg[\"AAAAAAHHEwAAAAG2AAAAAAAAAAACnxMAAKATAAAAAAAB8BIAAA==\",\"AAABqwEAAA==\"]Ag[\"AAACmAIAACMDAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAp8TAACgEwAA\"]Cc[\"AAAAAUEFAAAAAAAAAAAAAdYQAAA=\",\"AAABzQEAAAFBBQAA\"]Ck[\"AAAAAUIFAAAAAAACQxAAANcQAAAAATEMAAA=\",\"AAABzgEAAAFCBQAA\"]Ag[\"AAACkwIAABkDAAA=\",\"\"]Dg[\"AAAAAAABLAAAAAAAARIBAAA=\",\"AAAAAAAAAAAAAAAAAAAAA5MTAACUEwAAlRMAAA==\"]Ck[\"AAAAAAABXgAAAAGHAQAA\",\"AAAAAAAAAAAAAAAAAAAAApYTAACXEwAA\"]Ag[\"AAACmwIAAB4DAAA=\",\"\"]Do[\"AAAAAU8HAAACIxAAADYQAAAAAbgLAAABYRAAAA==\",\"AAK9AQAAjQcAAAEOCQAAAAAAAAFhEAAA\"]Ec[\"AAAAAikFAABQBwAAAiQQAAA3EAAAAAF4AQAAAWIQAAA=\",\"AAGfBwAAAcUBAAABKQUAAAAAAAFiEAAA\"]Bg[\"AAAAAAAAAAABVAUAAA==\",\"AAABvAEAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAxEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhgJAAAzEAAA\",\"\"]") \ No newline at end of file diff --git a/pr/561/docs/search.index/type/5f2a66270ec3.js b/pr/561/docs/search.index/type/5f2a66270ec3.js deleted file mode 100644 index b4dfca549..000000000 --- a/pr/561/docs/search.index/type/5f2a66270ec3.js +++ /dev/null @@ -1 +0,0 @@ -rd_("CBk[\"\",\"ADswAAABAAAFAAIAOwQEAPYTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwQElQSaRLVE+ET/xMOFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJrRATElUS5xKUE5UT2BP7E/wT/RP+ExEUFRQ7MAAAAQAALAESAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAADIMAwC7DAUAqg2GADcQAACuEAcADhEAAH0RhgAUEgAAFhIAAJ4SAADoEgAABxMAADowAAABAAAAAAAdABAAAABaBWAFYQViBcIGwwbKBssGzAbNBs4Gzwa1C7YLtwu4CwgMTA9QD18QxRAPEhsTWBNZE28T0BPUE+ITABQ7MAAAAQAAPQAUAD8DFABmBAAAcgQCAEMFAQBGBQAAWwUBAHUFAAC1BgwAwgcDALQLAAAeDAAApg8AANoPAABgEAAABxEAAJ8SAADjEgMAUBMAANETAAABFAAAOzAAAAEAAFcADQDbAD0AigEBAGUEAABwBwAAcwcAALIHAAC0BwAAKRADAEkSBQBAEwAAcBMAAK8TBQDCEwAAOzAAAAEAABUABwBMBAAAfQwAADEOAACiDwMAERIAAA4TBwDvEwUAOzAAAAEAABMACQBiBAEAawQBANMGBwCxBwAAswcAAEYPAgBPDwAAwBAAAHcSAAADEgcAABMHAABmEgAAAScMAAAFbQcAAG8HAAByBwAAJAwAAL8QAAAAOzAAAAEAAAUAAgDCAQAAjxMEAAAAAacFAAA=\"]Bo[\"AAAAAAAAAAACvRMAAL4TAAAAAAAAAp4QAACfEAAA\",\"\"]0Bg[\"\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAA=\"]AGg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAADQAFAHMFAQA/CQEALQwEAH0MAAA6EQMAOjAAAAEAAAAAAAsAEAAAAGsEbASxB7MHTw9pEGoQLBEtES4RLxF3EgRcBAAAEgcAABMHAAC/DwAABEIEAABEBAAAmxMAAJwTAAAFYQQAAG8HAAByBwAASg8AAEsPAAADIwwAACUMAABJDwAAOzAAAAEAAAYAAwDCAQAAsAYAAI8TBAAB7BIAAAEmDAAA\",\"AAAAAVYRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAA==\"]ANg[\"AAAEUgIAALgCAACfBgAAowYAAAMDDAAABAwAAAUMAAACswEAAMMBAAA7MAAAAQAAhgABAH0RhgAAOzAAAAEAAAcAAwBDBQEA4xIDACEUAQAEcAcAAHMHAACyBwAAtAcAADswAAABAAASAAcAcwUBAOgGAAA/CQEALQwEAH0MAAA6EQMAGxIDADowAAABAAAAAAAKABAAAABiBGMEawRsBLEHswdPDywRLREuES8RBVwEAABeBQAAEgcAABMHAADBEAAABEIEAABEBAAAmxMAAJwTAAAEbwcAAHIHAABKDwAASw8AAATFBgAAIwwAACUMAABJDwAABY8TAACQEwAAkRMAAJITAACTEwAAAewSAAAAAacFAAA=\",\"AAAAAAACSAUAAEkFAAAAAgEMAAACDAAAAcAPAAAFLQwAAC4MAAAvDAAAMAwAADEMAAAAAAJCBAAARAQAAAAAAAAAA94GAAAVEQAAFhEAAA==\"]Dc[\"\",\"AAAAADswAAABAAAHAAEAIgkHADswAAABAAAJAAIAuhAEABARBAAAAQ8RAAA=\"]ADm[\"AAAABrABAACyAQAAvwEAAMEBAADWDwAA1w8AAAS2AQAAyQEAADUKAAA5CgAAOjAAAAEAAAAAAAkAEAAAALEBtwG4AcABygHLAacKqgqdE54TOzAAAAEAAA0ABACsBAcAeg8AAGUQAwBvEwAAArsBAACfEgAAOzAAAAEAABUACgCmAQEArQEAACsMAQB2DAEAzQ8DAFQQAQBvEgMAQBMAAL0TAQAIFAEAAb8TAAAAAAAAAAAAAAGnBQAA\",\"AAABqwEAAAK0BAAABBIAAAAAAAJADwAATBAAAAAAAAAAAAAAAAAEoQYAAKUGAAB6DAAAewwAAA==\",1]Fk[\"AAAABOsEAAAVBwAAuAcAABkRAAACIwkAAPYLAAABrxAAAAABwwcAAAELAQAAAqMPAAAPEwAAAdQGAAA=\",\"AAAAAesEAAABtgEAAA==\"]Fk[\"AAAABDUFAAAZBwAAvAcAACARAAACJwkAAPoLAAABsxAAAAGOAQAAAcUHAAAAAqUPAAATEwAAAdgGAAA=\",\"AAAAATUFAAAByQEAAA==\"]AEa[\"AAAAAq4BAAC6AQAAOzAAAAEAAAcAAQAiCQcAAARgBQAAYQUAAGIFAAAPEgAAAAABvxMAAAAAAAKeEAAAnxAAAA==\",\"AAAAADswAAABAAAQAAMAlgYAACIJBwD1CwcAOzAAAAEAAAsABAD2BgAAoBAAALoQBAAQEQQAOzAAAAEAAA8ABQCsBAcAEwwCABgSAgBQEgAA1BMAADowAAABAAAAAAAKABAAAADLEM0QzxDRENMQDxEyETMRNBE1EVATBCkQAAAqEAAAKxAAACwQAAAAAAXKEAAAzBAAAM4QAADQEAAA0hAAAAAAAAAAAAKnBQAARQ8AAA==\",1]Ec[\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCADswAAABAAAGAAIApwYEAAoJAQADXgQAAFMFAABUBQAA\",\"\"]Dg[\"AAAAAAAAAAABsBMAAAHwEwAAAAAAAAAAAAABVAcAAA==\",\"AAAAAAABVxIAAAE7EwAA\"]Eo[\"AAAAAekEAAABtQEAAAIqAAAAmQAAAAGuDwAAAUQDAAACBgEAAAcBAAA=\",\"AAABqAAAAAHpBAAAAf0SAAAAAe0LAAA=\"]Ic[\"AAAAASsFAAADxwEAABcTAACWEwAAAlgAAACmAAAABnsBAAB8AQAAQwQAAKYFAAC7DwAA4hMAAAFRAwAA\",\"AAABqQAAAAIrBQAA/xIAAAAB8QsAAAAAAAAAAAAAAAAAAAKqAAAAqwAAAA==\"]Ik[\"AAAAArwEAABuEgAAAfMGAAABkwYAAAGyAAAAAQcRAAABrxMAAAIREgAA7xMAAAAAAAAAAAAAOjAAAAEAAAAAAAkAEAAAAGcFkQZRB9IHiA+fD9EPWBCiED4R\",\"AAAAAbwEAAAAAVYSAAABOhMAAA==\"]Ck[\"AAAAAd0BAAAAAAAAAbMTAAAB8xMAAA==\",\"AAAAAAABWhIAAAE+EwAA\"]Ck[\"AAAAAd4BAAAAAAAAAbQTAAAB9BMAAA==\",\"AAAAAAABWxIAAAE/EwAA\"]Kk[\"AAAAAAAABFoFAABgBQAAYQUAAGIFAAAAOzAAAAEAAAkAAQCqCwkAOzAAAAEAAA0AAQBMBA0AOzAAAAEAAAkABAAfDAMARg8CAMAQAADUEAEAAAEnDAAAAyQMAABKDwAASw8AAAIlDAAASQ8AAA==\",\"AAAAAAABoBAAAAMTDAAAFAwAABUMAAA=\"]Nk[\"AAAAAAAAAnUSAAB2EgAABOMSAADkEgAA5RIAAOYSAAAC6RIAAOoSAAAF6AYAABsSAAAcEgAAHRIAAB4SAAACYgQAAGMEAAACXgUAAMEQAAAAAAHFBgAAAAAAAacFAAA=\",\"AAAAAAJWBQAAwxMAAAAF+RMAABwUAAAdFAAAHhQAAB8UAAABUBMAAALADwAA+hMAAAAAAAAAAAAAAAQuEAAALxAAADAQAAAxEAAA\"]Bg[\"AAAAAAAAAARTEQAAVBEAAHMTAAB0EwAA\",\"\"]Bk[\"\",\"AAAAAVIRAAAAAAAAAAAAAAAAAAAAAAFTDwAA\"]Cc[\"AAAAAAAAAV8QAAABYBAAAA==\",\"AAAAAAACOQkAADoJAAA=\"]FGo[\"AAAAADswAAABAAAVAAkADAIGAEoEAABrBQAA1AcAAP8LAAAyEAMAVRIAAJQTAQD7EwMAOzAAAAEAABMCEgBBBAAAWgQAAGAEAADJBgAA7wsDALsMBQDDDG0Bwg8AAMcPAAA3EAAAUxAAAK4QBwAOEQAAfRGGABQSAAAWEgAA6BIAAEsTAAA7MAAAAQAAwwAPALIAKAAZAXAAjAEPAEMEAABaBQAApgUAAKwGAwCxBgIAwgYBAOsLAwBEDwAAGxMAADoTBQDiEwAA9RMAADswAAABAACiAEIAPwMUAF0EAABnBAEAcgQCAEYFAABbBQEAdQUAAKcGBAC1BgwAvwcBAMIHAwDACAEACgkBACAJAQArCQEAAQwBABEMAQAeDAAAwQwBAEEPAQBRDwEAiQ8BAIwPAQCmDwAAyA8BANIPAQDaDwAAOBAAAEYQAQBdEAEAYBAAAMYQAQAPEQAAGhEAABwRAAAeEQAAIREAACMRAAAlEQAAMBEFAD8RAQBCEQIAUxEBAAUSAQBnEgEAnxIAANQSAQDaEgEA4xIDAAETAQBBEwEAURMBAFUTAQBzEwEAexMBAKUTAQC1EwEA0RMCAN0TAwDrEwMAARQAAA8UAQATFAEAFhQBABoUAQAhFAEAOzAAAAEAAI8AJgDbAD0AigEBAKYBAQBABAAAXgQAAGUEAABTBQEAbQUBAHAHAABzBwAAsgcAALQHAACqCwkAKwwBAHYMAQBNDwEAgg8BAMAPAADNDwMAVBABAKgQAQDCEAEAEhIAAF0SAQBvEgMA6RIBAAoTAQA2EwEASRMBAEwTAwBwEwAArxMFAL0TAQDCEwAA9xMBAPoTAAAIFAMAGBQBADswAAABAAAxAA0ATAQNAHMFAQDoBgAAPwkBABsMAAB9DAAAMQ4AAKIPAwA6EQMAGxIDAA4TBwBGEwEA7xMFADswAAABAAAcAA0AYgQBAGsEAQDTBgcAsQcAALMHAAAfDAMARg8CAE8PAABpEAEAwBAAANQQAQB3EgAAAhQAADowAAABAAAAAAAHABAAAABcBF4Fvw/BEDgRORFmEtkTA0IEAABEBAAAJwwAADowAAABAAAAAAAJABAAAABhBG0HbwdyByQMSg9LD54QnxC/EATFBgAAIwwAACUMAABJDwAAOzAAAAEAAAUAAgCwBgAAjxMEAAABJgwAAAGnBQAA\",\"AAAAAAA7MAAAAQAA5gABAMMM5gAAOjAAAAEAAAAAAFkAEAAAAGcEaAS/B8AHwAjBCCAJIQkrCSwJAQwCDBEMEgzBDMIMQQ9CD1EPUg+JD4oPjA+ND8gPyQ/SD9MPRhBHEF0QXhDGEMcQGhEcER4RIREjESURMBExET8RQBFTEVQRBRIGEmcSaBLUEtUS2hLbEgETAhNBE0ITURNSE1UTVhNzE3QTexN8E6UTphO1E7YT0hPTE90T3hPfE+AT6xPsE+0T7hMPFBAUExQUFBYUFxQaFBsUIRQiFDswAAABAAAvABQApgEBAG0FAQArDAEAdgwBAIIPAQDNDwMAVBABAKgQAQDCEAEAXRIBAG8SAwDpEgEAChMBADYTAQBJEwEATBMDAL0TAQD3EwEACBQDABgUAQAEPwkAAEAJAABGEwAARxMAAAACOBEAADkRAAAAAp4QAACfEAAA\"]Ic[\"AAAAARcRAAAABFcFAAAPCQAAEAkAAA4SAAA7MAAAAQAADAADAHUEBQDKBgUAjhMAAAADbAcAAMIQAADDEAAAASQQAAAAB8oQAADMEAAAzhAAANAQAADSEAAAOBEAADkRAAAAAW0HAAA=\",\"\"]Lk[\"AAACUwIAALcCAAAAArYBAADJAQAAOzAAAAEAAAsAAwC3AQEAygEBAK4QBwA7MAAAAQAABwABAKwEBwA6MAAAAQAAAAAABwAQAAAAvwfAB4kPig/SD9MPMBExEQACRhMAAEcTAAA=\",\"AAAAAYAPAAAAAAAAAAAAAAAAAAAAAAV/DwAAgQ8AAIgPAACLDwAASBMAAA==\"]AAg[\"AAAEVQIAALUCAAARCQAAEgkAAASsAQAAtAEAALkBAADGAQAAAloCAAC/AgAAAAA6MAAAAQAAAAAAEwAQAAAAZwRoBMAIwQg6EDwQPhBAEEEQyxDNEM8Q0RDTEGcSaBITFBQUFhQXFALpEgAA6hIAAAUtDAAALgwAAC8MAAAwDAAAMQwAAAAFyhAAAMwQAADOEAAA0BAAANIQAAAAAAACwgEAALAGAAA=\",\"AAAAAAAAAAAAAAAAAAAAAAAABMIIAADDCAAAxAgAAMUIAAA=\"]BKo[\"AAADDgkAANYSAADXEgAABaoBAAAXCgAAUhEAANwSAADdEgAAOjAAAAEAAAAAAAcAEAAAALUBxwETCRQJAQpSCnoKExIBFBIAAAEbEwAAOjAAAAEAAAAAABEAEAAAAMIHwwfEB8UHQA/ID8kPTBAaERwRHhEhESMRJRFBE0IT3RPeEwFAEwAAOzAAAAEAAAsAAgCiDwMADhMHADswAAABAAAJAAMA0wYHALEHAACzBwAAAAACbwcAAHIHAAA=\",\"AAAETQUAAE4FAAA4DwAAOQ8AADswAAABAAAWAAsAFAcHABgRAQAbEQAAHREAAB8RAQAiEQAAJBEAAAcSAQBtEwEAcRMAALsTAQACFxMAAJYTAAABDhIAAAAAAAAAAAAAAAAAADowAAABAAAAAABrABAAAACgAaEBowGkAQICAwIJAgoCSQRLBG0EtgS5BKAGpAbRBtIGBgcHB/wI/QgyCTMJ/gsADBYMFwwcDB0MKAwpDD4PPw9UD3sPfA+dD54P0Q8mECcQRBBFEFEQUhBWEFcQYRBiEJgQmRCiEKQQpRCrEKwQthC3ELgQuRA2ETcRShFLEQoSCxIMEg0SUhJTEl8SYBJrEm0SlBKVEpYSlxKZEpoSmxKcEtgS3hLfEuAS+xIMEw0TFhMcEx0THhMfEyATIRM4EzkTUxNUE1oTWxN5E3oTmROaE9YT1xM=\"]Ac[\"AAAAAAEwAwAA\",\"\"]Ca[\"AAAAAAJaAgAAvwIAADswAAABAAAFAAEATBEFAA==\",\"\",1]Ek[\"AAAAAAAAAAAAAAAAAAAAAAAAAsYGAADcBgAA\",\"AAAAAAACORAAADsQAAAAAjoQAAA8EAAAAAIbEgAAHBIAAA==\"]Eo[\"AAAAAAAAAAAAAAAAAAAAAAAAAscGAADdBgAA\",\"AAAAAAACPRAAAD8QAAAAAz4QAABAEAAAQRAAAAACHRIAAB4SAAA=\"]Ck[\"AAAAAAAAAAAAAAAAAAAAAAAABXAAAACkAQAArQcAAMwHAADECAAA\",\"\"]Bg[\"AAAAAAAAAUwPAAAAAAAAAjgRAAA5EQAA\",\"\"]Gk[\"AAAABGEAAADFBAAAagUAANUPAAABDgIAAAYOAAAASAQAAEUFAAAEBwAASBEAAJgTAAACxwAAAFAPAAAAAlcTAACuEwAA\",\"AAAAAcUEAAABvwgAAAFGBAAA\"]Ig[\"\",\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBGDwIAwBAAANQQAQAAAScMAAAEJAwAAEoPAABLDwAAvxAAAAMjDAAAJQwAAEkPAAAAAAEmDAAA\"]Bg[\"AAAAAAAAAAAAAAAAAAKeEAAAnxAAAA==\",\"\"]Hk[\"AAAD0AEAAAoMAAANDAAAAegEAAABtQEAAAQpAAAAmAAAADkQAAA7EAAAAa0PAAABQwMAAAMFAQAAChEAAAsRAAA=\",\"AAAC0AEAAAYMAAACaQQAAOgEAAAB/BIAAAAB7AsAAA==\"]Hk[\"AAAD0QEAAAsMAAAODAAAASoFAAABxwEAAARXAAAApQAAAD0QAAA/EAAAAnoBAAC6DwAAAVADAAADXgQAAAwRAAANEQAA\",\"AAAC0QEAAAcMAAADagQAACoFAAD+EgAAAAHwCwAA\"]2ALo[\"AAAAAAEoEAAAAAA6MAAAAQAAAAAAEQAQAAAAuwFdBBEMEgzBDMIMQQ9CD8YQxxAFEgYS6xPsEw8UEBQaFBsUAmUEAABAEwAAOzAAAAEAAAsAAgCiDwMADhMHADswAAABAAAHAAEA0wYHAAAAAAACwgEAALAGAAA=\",\"AAAHTwUAAFAFAAAKDAAACwwAAA0MAAAODAAAFRIAADowAAABAAAAAAAXABAAAAC1B7YHHgkqCQwMDwwQDDoPOw9IEEkQShCXEBcRJxEoESkRKhErEUMTrBOtE8ATwRM7MAAAAQAA+QACADkO9QADEwMAOzAAAAEAAFkABAALAFUA2RIAAAgTAQByEwAAAfUTAAAAAAQ6EQAAOxEAADwRAAA9EQAABCwRAAAtEQAALhEAAC8RAAABZhIAAAAAAAAAAAdxBAAAZwUAANAGAAA2DgAAmhAAAKoQAAA+EQAA\"]Dk[\"AAAAAAL+CQAAUQoAAAAAADswAAABAAAFAAEASRIFAAACYgQAAGMEAAAAAkIEAABEBAAA\",\"\"]BOc[\"\",\"ADswAAABAAAFAAIAOwQEAPYTAAACyAYAAOcGAAA6MAAAAQAAAAAACgAQAAAA3QHeAVkFfAwQElQSaRLVE+ET/xMOFDowAAABAAAAAAAaABAAAAAMAg0CDgIPAhACEQISAkoEWAVdBZYGxAbzBjcJrRATElUS5xKUE5UT2BP7E/wT/RP+ExEUFRQ7MAAAAQAAKAERAEgEAABFBQAAVwUAAMkGAADmBgAA9gYAALsMBQCqDYYANxAAAK4QBwAOEQAAfRGGABQSAAAWEgAAnhIAAOgSAAAHEwAAOjAAAAEAAAAAABsAEAAAAFoFYAVhBWIFwgbDBsoGywbMBs0GzgbPBrULtgu3C7gLTA9QD18QxRAPEhsTWBNZE28T0BPiEwAUOzAAAAEAADsAEgA/AxQAZgQAAHIEAgBDBQEARgUAAFsFAQB1BQAAtQYMAMIHAwC0CwAAHgwAAKYPAADaDwAAYBAAAJ8SAADjEgMA0RMAAAEUAAA7MAAAAQAAUgALANsAPQCKAQEAZQQAAHAHAABzBwAAsgcAALQHAABJEgUAcBMAAK8TBQDCEwAAOzAAAAEAABQABgBMBAAAfQwAADEOAACiDwMADhMHAO8TBQA7MAAAAQAAEwAJAGIEAQBrBAEA0wYHALEHAACzBwAARg8CAE8PAADAEAAAdxIAAAISBwAAEwcAAAEnDAAABG8HAAByBwAAJAwAAL8QAAAABY8TAACQEwAAkRMAAJITAACTEwAA\"]Bc[\"AAAAAAAAAAAAAAACOBEAADkRAAA=\",\"\"]Kc[\"AAAAAAHiEgAAADswAAABAAAGAAIAygYFAMUQAAACRgUAANoPAAABZQQAAAADaRAAAGoQAAB3EgAAAb8PAAA=\",\"AAAAAAABYAQAADswAAABAAAFAAEAdQQFAAAAAAAAAAAAAAAABwsCAAC1BAAAuAQAAN8GAADgBgAA4QYAAOIGAAA=\"]Do[\"AAAAAAABGAAAAAAAAd8AAAAAAAAAAAAAAAACtQQAANEGAAA=\",\"AAAAAAAAAAACTQ8AAE4PAAA=\"]Dk[\"AAAAAAABMAAAAAEfAQAAAAAAAAAAAAAAAAACuAQAANIGAAA=\",\"AAAAAAAAAAABQAQAAA==\"]Ac[\"AAABYgIAAA==\",\"\"]Fg[\"AAAABO0EAAAWBwAAuQcAABsRAAADJAkAAPcLAAD8EwAAAbAQAAAAAAENAQAAARATAAAB1QYAAA==\",\"AAAAAe0EAAAAAbcBAAA=\"]Fg[\"AAAABDcFAAAaBwAAvQcAACIRAAADKAkAAPsLAAD+EwAAAbQQAAABkAEAAAAAARQTAAAB2QYAAA==\",\"AAAAATcFAAAAAcoBAAA=\"]Bk[\"\",\"AAAAAAAAAAA7MAAAAQAAPwACANsAPQCKAQEA\"]Ck[\"\",\"AAAAAAGWBgAAOzAAAAEAAAkAAgD2BgAA+AYIAAHUEwAAAVATAAA=\"]Ck[\"AAACYQIAAHMCAAA=\",\"AAAAAAAAAl0TAABeEwAAAAACOhEAADsRAAA=\"]Bo[\"\",\"AAAAAAAAAAAAAAAAApsTAACcEwAAAAAAAewSAAA=\"]Eo[\"\",\"AAAAAAA7MAAAAQAABQABAFYSBQA7MAAAAQAABQABADoTBQAAOzAAAAEAAAUAAQCvEwUAOzAAAAEAAAUAAQDvEwUA\"]Cc[\"\",\"AAAAAAL8EgAA/RIAAAAE6wsAAOwLAADtCwAA7gsAAA==\"]Eg[\"AAAAAfEEAAAAAS0AAAAAAAIVAQAAFgEAAA==\",\"AAA7MAAAAQAACgABAJICCgAC8QQAAOMTAAAAAAF1EgAA\"]Eo[\"AAAAATEFAAAAAV8AAAAAAAKKAQAAiwEAAA==\",\"AAA7MAAAAQAACgACABgDAwAdAwYAAjEFAADkEwAAAAABdhIAAA==\"]Dg[\"AAABAAMAAAEwBQAAAAFdAAAAAoUBAACGAQAA\",\"AAABDwMAAAEwBQAAAAAAAAFeBAAA\"]Eo[\"AAAAAAAAApUBAACWAQAA\",\"AAAAAAAAB9ATAAD5EwAAABQAABwUAAAdFAAAHhQAAB8UAAAC0RMAAAEUAAAB+hMAAA==\"]Bk[\"AAAAAAAAAUUBAAA=\",\"AAAB2AIAAAAAAVoEAAA=\"]Bg[\"AAAAATsFAAAAAAGXAQAA\",\"AAAAATsFAAA=\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAXgMAAA=\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA64HAADNBwAAxQgAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAnEEAACvBwAA\",\"\"]Cc[\"AAAAAAAAAAIKCQAACwkAAAAAAAAAAAACwgEAALAGAAA=\",\"\"]Fo[\"AAAAAAACVwUAABYSAAAAAAAAAAAAAAAAAAAE0wcAAFQPAABjEAAAVREAAA==\",\"AAF1BwAAAAAAAAAAAAAAAAAAAAAAAAJkEAAACREAAA==\"]Bk[\"AAAAAVkFAAAAAAFMDwAAAaYPAAA=\",\"AAGmBwAA\"]Bg[\"AAAAAAAABGUQAABmEAAAZxAAAGgQAAA=\",\"\"]Ag[\"AAAAAq4BAAC6AQAA\",\"\"]Dg[\"AAAAAAAAAAAAAj8JAABACQAA\",\"AAAAAAAAAAAABS0MAAAuDAAALwwAADAMAAAxDAAA\"]AEg[\"AAAAAAKzAQAAwwEAAAAAAkMFAABEBQAABHAHAABzBwAAsgcAALQHAAA7MAAAAQAACwAEAHMFAQAtDAQAfQwAADoRAwA6MAAAAQAAAAAACwAQAAAAawRsBLEHswdPD2kQahAsES0RLhEvEXcSBFwEAAASBwAAEwcAAL8PAAAEQgQAAEQEAACbEwAAnBMAAAVhBAAAbwcAAHIHAABKDwAASw8AAAMjDAAAJQwAAEkPAAA7MAAAAQAABgADAMIBAACwBgAAjxMEAAHsEgAAASYMAAA=\",\"AAAAAVYRAAAAAkgFAABJBQAAAAIBDAAAAgwAAAAAAAACQgQAAEQEAAA=\"]He[\"\",\"AAAAAAAEMgwAADMMAAA0DAAANQwAAAIIDAAA1BMAAAIHEQAAUBMAAAUpEAAAKhAAACsQAAAsEAAAQBMAAAEREgAAAAFmEgAAAAFtBwAAAAHCAQAAAAABpwUAAA==\",1]AMk[\"AAACvAEAAMUBAAAGrAEAALQBAAC5AQAAxgEAANwSAADdEgAABFgFAAA3CQAA/wkAAFAKAAAEMgwAADMMAAA0DAAANQwAAAJYEwAAWRMAADowAAABAAAAAAAHABAAAAAKCQsJRhBHENQS1RLSE9MTOjAAAAEAAAAAAAkAEAAAAEAEcAdzB7IHtAdND04PwA/3E/gTAAKxBwAAswcAAA==\",\"AAAAOjAAAAEAAAAAABAAEAAAAKIBTQdOB08HUAfVB9YHNgzDD8QPXBDIEMkQYxJkEp0S3BMDNAkAACgQAACYEgAABjIMAAAzDAAANAwAADUMAABqEgAAbBIAAAAAAAJzBQAAdAUAAAACXAQAAL8PAAAAA2EEAABKDwAASw8AAAMjDAAAJQwAAEkPAAAAAAImDAAAggwAADowAAABAAAAAAALABAAAAClAW4EbwS3BLoEjwaQBggHUQfSB9MHnw8=\"]Bg[\"AAAAAAAAAAAAAVcEAAA=\",\"AAAAAaQFAAA=\"]Bk[\"AAAAAAAAADswAAABAAANAAIAdQUAALUGDAA=\",\"\"]Cc[\"AAABAQkAAAABEgIAAAAAAAFABAAA\",\"AAAAAAAAAAFdBAAA\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAbAGAAA=\",\"\"]Be[\"AAAAAAAAA2AFAABhBQAAYgUAAA==\",\"\",1]Bg[\"AAAAAAAAADswAAABAAAUAAEAPwMUAA==\",\"\"]Dk[\"AAAAAAHIAQAA\",\"AAAAAAUtCQAALgkAAC8JAAAwCQAAMQkAAAAAAAAAAAAAAAAAAAH9DwAA\"]Cc[\"AAAAAcQEAAAAAQ0AAAACvwAAAMAAAAA=\",\"AAAAAcQEAAA=\"]Bg[\"AAAAAAAAAAAAAVIEAAA=\",\"AAAAAcYHAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWYAAAA=\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAaoAAAA=\",\"\"]C@i[\"AAAAAAHIAQAAAZ4SAAABbxMAAAK7AQAAnxIAADowAAABAAAAAAAbABAAAACtAW0FbgWCD4MPqBCpEF0SXhIKEwsTNhM3E0kTShNME00TThNPE1cTcBOuE/cT+BMKFAsUGBQZFDswAAABAAAGAAMAPwkBAKIPAwC/EwAAAQIUAAAB2RMAAAAAAcUGAAAAAAABpwUAAA==\",\"AAAFGQkAABoJAAAbCQAAHAkAAB0JAAAEAwwAAAQMAAAFDAAABBIAADowAAABAAAAAAAXABAAAACcAakEbgdxB8cHvgi/CC0JLgkvCTAJMQk0CR8QIBAhECIQIxCYEqESAxMEEwUTBhM7MAAAAQAAIAAOANkBAADbAQAAQQQAAEYEAABaBAAAYAQAAPgGCAAyDAMAQw8AAFMQAAC6EAQAEBEEAOESAABLEwAAOzAAAAEAACMACQBDBAAAdQQFAKYFAADQBwAARA8AAKkPEwBQEgEAXRMBAGATAQA7MAAAAQAACAAEADgQAAAyEQMAQhECAHgTAAA7MAAAAQAADAAGAEAEAABNDwEAKRADAAoRAwBXEwAArhMAAAQbEgAAHBIAAB0SAAAeEgAAOzAAAAEAAAYAAwAfDAMA1BABAAIUAAAEXAQAAL8PAADBEAAA2RMAAAAAAcUGAAABwgEAAAAAOjAAAAEAAAAAABwAEAAAAKwArQCuAK8Apga0BgEHAgcDB/oIOwk8CT0JPglBCUIJjg+nD6gPyg/LD8wPWRBaEFsQQREJEn0TIBQ=\",1]Bg[\"AAAAAAAAAAAAAAAAAAKeEAAAnxAAAA==\",\"\"]Jo[\"AAAAAc8EAAAAOjAAAAEAAAAAAAcAEAAAABkAlQDZAUYEQw9NEVARCBMCqg8AAFASAAACQAMAALYGAAAC4AAAAOEAAAAAAbEHAAAAAAFvBwAA\",\"AAF6BwAAAANhAAAAYgAAAM8EAAACWgIAAMcHAAACTREAAFARAAAAAagGAAA=\"]A@c[\"AAAAAfgEAAAABzIAAACdAAAA2wEAAE8RAABREQAA4RIAAAkTAAAHIgEAACMBAABEDwAAsg8AAL4PAABLEAAAURIAAARIAwAAuwYAAB4MAAB4EwAAARISAAABMQ4AAAKzBwAAAhQAAAHZEwAAAAFyBwAA\",\"AAGPBwAAAAH4BAAAAr8CAABWBQAAAk8RAABREQAAAa0GAAAAAAEbDAAAAAFmEgAAAAAAAAAABWYAAABnAAAAaAAAAGkAAABqAAAA\"]Bo[\"\",\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwA=\"]CDe[\"\",\"AAA7MAAAAQAA5gABAMMK5gA7MAAAAQAA7QAMAMoJMwAACgAAAgoyADYKAgA6ChUAUwoeAHMKBgB7CioAqAoBAKwKFgBPEgAA4xMBADowAAABAAAAAAASABAAAABdBaUFlgYTCRQJ/gn/CQEKNQo5ClAKUQpSCnIKegqmCqsK/BL9EjowAAABAAAAAAASABAAAABIBEUF9gYEBzkJOgmnCqoKSBFWElcSWBJZEloSWxIHE5gTnROeEzowAAABAAAAAAApABAAAADCBsMG0Ae1C7YLtwu4C+sL7AvtC+4LCAxQD3oPvg9LEF8QZRBmEGcQaBDFEHUSdhI6EzsTPBM9Ez4TPxNdE14TYBNhE9AT1BP5EwAUHBQdFB4UHxQ6MAAAAQAAAAAAGgAQAAAAXQRyBHMEdARbBVwFpwaoBqkGqgarBh4M2g86EDwQPhBAEEEQYBAPEUIRQxFEEVATeBPREwEUOzAAAAEAAFkADwDbAD0AigEBAEAEAABeBAAAZQQAAFMFAQBsBwAATQ8BAMAPAAASEgAASRIFAFcTAACuEwYAwhMAAPoTAAA7MAAAAQAAEQAIAHMFAQAbDAAAfQwAADEOAAAkEAAAOhEDAEYTAQDvEwUAOjAAAAEAAAAAAAgAEAAAAGIEYwRPD2kQahDUENUQdxICFDowAAABAAAAAAALABAAAABcBF4FEgcTB78PyhDMEM4Q0BDSEGYS2RMEQgQAAEQEAACbEwAAnBMAAARtBwAAbwcAAHIHAAC/EAAAAiMMAABJDwAAOzAAAAEAAAYAAwDCAQAAsAYAAI8TBAAB7BIAAAABpwUAAA==\",1]Le[\"\",\"AAAAAswBAACUBgAAA/QGAAA8DwAAPQ8AAAPmBgAAahIAAGwSAAA6MAAAAQAAAAAABwAQAAAATA8PEhgSGRIaElgTWROOEwJmBAAAtAsAAAGtAQAAAb8TAAAERg8AAEcPAABIDwAAwBAAAAABJwwAAARhBAAAJAwAAEoPAABLDwAAASUMAAAAAAEmDAAA\",1]Gc[\"\",\"AAAAOjAAAAEAAAAAAAcAEAAAAN0B3gEQEmkS1RPhE/8TDhQC8wYAACgQAAAFkwYAAA8JAAAQCQAAfQ8AAA4SAAABGxMAAAEHEQAAAUATAAA=\"]Bo[\"\",\"AAAAAv4SAAD/EgAAAATvCwAA8AsAAPELAADyCwAA\"]Bk[\"\",\"AAAAAAAAOzAAAAEAAAYAAgCsBgMAsQYCAA==\"]Fc[\"AAAAAcQBAAAAAAAABG0FAABuBQAAgg8AAIMPAAA=\",\"AAA7MAAAAQAAPgABADcMPgAAAAAAAAAAAAAAAAAAAAAB4wYAAA==\"]Ao[\"\",\"AAA7MAAAAQAA5gABANcH5gA=\"]A@o[\"AAAEaQIAAHoCAACAAgAAOA8AAAHNBAAAA+cSAAARFAAAFRQAAAMWAAAAlAAAAEwRAAABqQ8AADowAAABAAAAAAAMABAAAAA/A3IEcwRDBUQFWwW1Bj8RURN7E6UT3xPtEwLbAAAA3AAAAA==\",\"AAF5BwAAOzAAAAEAAAYAAwBRAgQAEQkAANYSAAABzQQAAAQTCQAA/gkAAP8JAAABCgAAAUwRAAAB6wsAAAOnBgAAQhEAAEMRAAAAAAAAAAAAAAAAATAPAAA=\"]ABc[\"AAAE3gIAAAEDAAAIAwAAOQ8AAAH1BAAAAAQuAAAAmwAAAE4RAADoEgAABBsBAAAcAQAAsA8AAOITAAA6MAAAAQAAAAAACgAQAAAARgN0BEYFXAW6BkARUhN8E6YT4BPuEwABMQ4AAA==\",\"AAGOBwAAB7UCAAC2AgAAtwIAALgCAAC6AgAAEgkAANcSAAAB9QQAAAQUCQAAUAoAAFEKAABSCgAAAu8LAABOEQAAAqwGAADQBwAAAUQRAAAAAAAAAAAAAAAABDIPAAAzDwAANA8AADUPAAA=\"]Gc[\"AAA7MAAAAQAACwAEABoQBAAAEwAApxMEABIUAAA=\",\"ADswAAABAAAJAAMAUgcBAFUHAgDPEgQAOzAAAAEAAAsABAAaEAQAABMAAKcTBAASFAAA\"]Ig[\"AAAAAAAAAAA7MAAAAQAACQABAKoLCQA7MAAAAQAADQABAEwEDQA7MAAAAQAACQAEAB8MAwBGDwIAwBAAANQQAQAAAScMAAAEJAwAAEoPAABLDwAAvxAAAAMjDAAAJQwAAEkPAAAAAAEmDAAA\",\"\"]Cc[\"AAAAArABAADIEAAAAAAAAAErDAAAAAFrBAAAARIHAAA=\",\"\"]Cc[\"AAAAAr8BAADJEAAAAAAAAAEsDAAAAAFsBAAAARMHAAA=\",\"\"]ABg[\"AAAAAu0SAADuEgAAAAW3AQAAuAEAAMoBAADLAQAADhEAADswAAABAAALAAMArAQHAFoFAAATDAIAOjAAAAEAAAAAAAcAEAAAAEYFwgfDB8QHxQdRD1IPpg8HChEAAAsRAAAMEQAADREAAHATAADCEwAA+hMAADswAAABAAANAAQAGwwAADEOAACiDwMADhMHADswAAABAAAHAAEA0wYHAAPBEAAAZhIAANkTAAAAAW0HAAABxQYAAAAAAAGnBQAA\",\"AAAAA9MBAADUAQAA1QEAAAABUxAAAA==\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUQUAAOkGAAA=\",\"AAAAAAAAAAIyEQAAMxEAAAAAAAAAAAAAAAACxgYAANwGAAA=\"]Ek[\"AAAAAAAAAAAAAAAAAAAAAAACUgUAAOsGAAA=\",\"AAAAAAAAAAI0EQAANREAAAAAAAAAAAAAAAACxwYAAN0GAAA=\"]Ak[\"\",\"AAAAAAKgDwAAoQ8AAA==\"]Eo[\"AAAABO8EAAAXBwAAugcAAB0RAAACJQkAAPgLAAABsRAAAAAAAQ8BAAABERMAAAHWBgAA\",\"AAAAAe8EAAAAAbgBAAA=\"]Eo[\"AAAABDkFAAAbBwAAvgcAACQRAAACKQkAAPwLAAABtRAAAAGSAQAAAAABFRMAAAHaBgAA\",\"AAAAATkFAAAAAcsBAAA=\"]Bg[\"AAAAAAAAAAAAAVEEAAA=\",\"AAAAATgJAAA=\"]Ag[\"AAACrwEAAL4BAAA=\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAIkDAAAvxAAAA==\",\"\"]Ag[\"\",\"AAACQhAAAEMQAAA=\"]Bg[\"AAAAAAAAAAAAARESAAA=\",\"AAABbwAAAA==\"]Dg[\"AAAAAtMBAADUAQAAAAADYAUAABMMAAAYEgAAAAGtAQAAAb8TAAA=\",\"AAAAAQQSAAA=\"]Hg[\"AAAAAScRAAABAxMAAAM5EAAAuxAAABERAAABXRMAAAEyEQAAASkQAAACOhEAABsSAAABLBEAAAAAAAABkBMAAA==\",\"AAAAAAAAAALLEAAAzRAAAAAAAALKEAAAzBAAAA==\"]Ig[\"AAAAASoRAAABBRMAAAM9EAAAvRAAABMRAAABYBMAAAE0EQAAASsQAAACPBEAAB0SAAABLhEAAAAAAAABkhMAAA==\",\"AAAAAAEIEQAAAAADzxAAANEQAADTEAAAAAAAA84QAADQEAAA0hAAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAm4AAAA1DwAA\",\"\"]Bk[\"AAAAAAAAAdoAAAAAAAFZBAAA\",\"AAAAAc8HAAA=\"]Cc[\"AAAAAVwQAAABFxMAAAACQwQAAKYFAAA=\",\"AAAAAAHUBwAA\"]Ek[\"AAAAAdQEAAAAAR0AAAAAAAHmAAAAAAAAAAAAAAAAArcEAACPBgAA\",\"AAF/BwAAAAHUBAAAAAAAAAAAAWkQAAA=\"]Ek[\"AAAAAQUFAAAAAT0AAAABNAEAAAAAAAAAAAAAAAAAAroEAACQBgAA\",\"AAGWBwAAAAEFBQAAAAAAAAAAAWoQAAA=\"]Be[\"AAAAAAA7MAAAAQAAhgABAH0RhgA=\",\"\",1]Bg[\"AAAAAAAAAAAAAVQEAAA=\",\"AAAAAeoLAAA=\"]Ec[\"AAAAAAAAAAAAAAAAAAJvBwAAcgcAAAHFBgAAAsIBAACwBgAA\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Dk[\"AAAAAAAAAAABsRMAAAHxEwAA\",\"AAAAAAABWBIAAAE8EwAAAAAAAAAAAAAAAAABVAcAAA==\"]Dg[\"AAAAAR0FAAAAAAJfAQAAYAEAAAG+BgAAAAAAAAAAAAAAAAELAgAA\",\"AAAAAR0FAAA=\"]ABc[\"AAAAA6oBAAARCgAAUhEAAAPEBgAAcgoAAK0QAAAAADowAAABAAAAAAANABAAAAAgCSEJKwksCYwPjQ9dEF4Q2hLbEgETAhNVE1YTOzAAAAEAAA8ABwCoEAEASRIFAAoTAQBXEwAArhMAAAoUAQAYFAEAAAECFAAAAdkTAAA=\",\"AAAAA50BAACoAQAAJRAAAAQfEAAAIBAAACEQAAAiEAAAAtkBAADbAQAAAAACVxMAAK4TAAAAAQIUAAAB2RMAAAAAAAAAAATaAQAA3AEAAP4IAABVEQAA\"]Bk[\"AAAAAAHzBgAA\",\"AAAAAAAAAAEHEQAAAAEREgAA\"]Ho[\"AAAABcIEAABpBQAApAUAAHwMAABjEgAAAj0PAADYEwAAAuYGAACeEgAAA70AAAAPEgAAbxMAAAFEBQAAAWwHAAABJBAAAA==\",\"AAAAAsIEAACUBgAAAfQGAAAAAAABrQEAAAG/EwAA\"]Gc[\"AAAAAmQSAABxEwAAAZsGAAAByQYAAAEaAQAAAjgQAACfEgAAAAHoBgAAAAFeBQAAAAFtBwAAAcUGAAAAAAABpwUAAA==\",\"AAAAAAAAAAG7AQAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAW0AAAA=\",\"\"]Fg[\"AAADyAYAAOcGAACaDwAABA8MAABPEAAARxEAAMATAAAFDQIAAF0FAAClBQAAbgcAAC8JAAAAAsMAAAB6DwAA\",\"AAABphAAAA==\"]Fg[\"AAAABBAMAABQEAAASREAAMETAAACcQcAADAJAAAByQYAAAFiAQAAAAAB6AYAAAABXgUAAAAAAAAAAAGnBQAA\",\"AAABpxAAAA==\"]Dg[\"AAAAASIFAAAAAVEAAAABawEAAA==\",\"AAAAASIFAAAAAAAAAAAAAAAAAAAAAAFwAAAA\"]Bk[\"AAAAAAEMAgAAAAAAAAFOBAAA\",\"AAAAARkMAAA=\"]Cc[\"AAAAAAHHBwAAAAAAAAFPBAAA\",\"AAAAAAACGgwAAGUSAAA=\"]Dk[\"\",\"AAAAADswAAABAAATAAEAWAcTADswAAABAAATAAEAlAATADswAAABAAATAAEAqQ8TAA==\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWsAAAA=\",\"\"]Fg[\"AAAAATwFAAAAAAGZAQAAAAAAAAAAAWEEAAAAAAABJgwAAAauAAAApQEAAAUCAAC0BgAACAcAAAkSAAA=\",\"AAGlBwAAAAE8BQAA\"]Hk[\"AAAEqAAAAFQCAABNBQAABgwAAAHqBAAAAAIrAAAAmgAAAAGvDwAAAkUDAAC5BgAAAggBAAAJAQAA\",\"AAABgAIAAARjAAAAZAAAAGUAAADqBAAAAbUBAAAAAe4LAAABqwYAAA==\"]Kc[\"AAAEqQAAALYCAABOBQAABwwAAAEsBQAAAARZAAAApwAAAMIPAADHDwAAA30BAAB+AQAAvA8AAAJSAwAAwAYAAA==\",\"AAABCAMAAAEsBQAAAccBAAAB8gsAAANDBAAApgUAALIGAAAAAAAAAAAAAAAAAARrAAAAbAAAAG0AAABuAAAA\"]Ak[\"AAAAAALYDwAA2Q8AAA==\",\"\"]Ao[\"AAAAAAAAAAACpgEAAEkSAAA=\",\"\"]Ao[\"AAAAAAAAAAACpwEAAEwSAAA=\",\"\"]Dc[\"AAAAAAAAAAABCgEAAAAAAAAAAAAAAAWsAAAAbgQAAAEHAACEDwAAWRAAAA==\",\"\"]Fc[\"AAAAAAAAAX8BAAAAAAAAAAAAAAAAAAWtAAAAbwQAAAIHAACFDwAAWhAAAA==\",\"AAAAAAAAAAAAAegGAAAAAl4FAADBEAAA\"]Fc[\"AAAAAT0FAAAAAAGaAQAAAmYEAAC0CwAAAAAAAAEnDAAAAAAAAAAFrwAAAAMHAAD7CAAAhg8AAFsQAAA=\",\"AAAAAT0FAAA=\"]Hg[\"AAABjQAAAAHQBAAAAAIaAAAAuwwAAAAAAeIAAAAAAAAAAAAAAAADoAEAALYEAAD+CwAA\",\"AAF7BwAAAAHQBAAAAAAAAAAAAAAAAAAAAAAECQcAAAoHAAANBwAADgcAAA==\"]Hg[\"AAAAApAAAAD/BAAAAAI4AAAAvgwAAAEsAQAAAAAAAAAAAAAAAAADoQEAALkEAAAADAAA\",\"AAGSBwAAAAH/BAAAAAAAAAAAAAAAAAAAAAAECwcAAAwHAAAPBwAAEAcAAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHsEgAA\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAWwAAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmcAAADlBgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVMEAAA=\",\"AAAAAboMAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAasAAAA=\",\"\"]Dk[\"AAAAAewEAAABtgEAAAABrQQAAAEaEQAAAQwBAAA=\",\"AAGIBwAAAAHsBAAAAAAAARoRAAA=\"]Dk[\"AAAAATYFAAAByQEAAAACjwEAALEEAAABIREAAA==\",\"AAGhBwAAAAE2BQAAAAAAASERAAA=\"]Hc[\"AAAAAAABfQ8AAAGOEwAAAAGyEwAAAfITAAAAAAAAAAAAADowAAABAAAAAAANABAAAADQBvoIPQk2DosPjg/KD5oQqhBBEWsSbRJIE30T\",\"AAAAAAABWRIAAAE9EwAA\"]Ak[\"AAAAAAKUEwAAlRMAAA==\",\"\"]Cg[\"AAAAAZ0SAAABNAkAAAFgBAAAAAABZQQAAA==\",\"AAAAAAH/CwAA\"]Ag[\"\",\"AAAAAAAAAbMGAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmgAAABFDwAA\",\"\"]Ag[\"AAAAAAAAAAHBBgAA\",\"\"]Dk[\"AAAAAAAAOzAAAAEAAKkAAwCyACgAGQFwAIwBDwAAOzAAAAEAAD8AAgDbAD0AigEBAA==\",\"\"]Hg[\"AAAAAi0FAADqBgAAATEJAAAEWgAAAAgTAAAJEwAAchMAAAOAAQAAgQEAAPUTAAABUwMAAAABGwwAAAABZhIAAAAAAcUGAAA=\",\"AAABhw8AAAEtBQAAAcgBAAAAAUsQAAA=\"]Dk[\"AAAAAeAEAAAAASIAAAAAAbcGAAAC9gAAAPcAAAA=\",\"AAAAAuAEAAAXCgAAAAAAAakGAAA=\"]Dk[\"AAAAARcFAAAAAUgAAAACUQEAAFIBAAABvAYAAA==\",\"AAAAARcFAAABegoAAAABrgYAAA==\"]Ck[\"AAAAAcMPAAAAAAAAAnAHAACyBwAA\",\"AAAAAAAAAAACKRAAACoQAAA=\"]Ck[\"AAAAAcQPAAAAAAAAAnMHAAC0BwAA\",\"AAAAAAAAAAACKxAAACwQAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAqMQAAAXEgAA\"]Ek[\"AAAAA9UHAAAHEgAAbRMAAAAAAAAAAAGxBwAAAAABbwcAAA==\",\"AAAAAAAAAAIyEQAAMxEAAAIpEAAAKhAAAA==\"]Ek[\"AAAAA9YHAAAIEgAAbhMAAAAAAAAAAAGzBwAAAAABcgcAAA==\",\"AAAAAAAAAAI0EQAANREAAAIrEAAALBAAAA==\"]Dg[\"AAAAAQsFAAAAAUQAAAACPwEAAEABAAA=\",\"AAAAAQsFAAAAAAAAAAEbDAAAAAFmEgAA\"]Cc[\"AAAB2AIAAAH7BAAAAAE0AAAAASYBAAA=\",\"AAAAAfsEAAA=\"]Ic[\"AAABjwAAAAHSBAAAAAIcAAAAvQwAAAAAAeQAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA2gEJAgkHDQcCCQYJPg9/D0QQlBIMExwTOBM=\",\"AAF9BwAAAALSBAAAagUAAAABQw8AAA==\"]Ho[\"AAAAApIAAAABBQAAAAI6AAAAwAwAAAEuAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA3AEKAgsHDwcECQgJPw+BD0UQlRINEx0TORM=\",\"AAGUBwAAAAEBBQAAAAABRA8AAA==\"]Gk[\"AAACOgIAAEACAAAByAQAAAACEQAAAPoGAAACzQAAAM4AAAA=\",\"AAACPAIAAD0CAAAByAQAAAAAAAACTQ8AAE4PAAAAAAJcBAAAvw8AAAABvxAAAAEjDAAA\"]Do[\"AAAAAQMFAAAAAjsAAACeAAAAAzABAAAxAQAAsw8AAAFJAwAA\",\"AAAAAQMFAAAAAAAAAUAEAAA=\"]Ck[\"AAAAAnUTAAB2EwAAAAAAAAAAAAABJwwAAA==\",\"AAAAAAABoBAAAA==\"]Co[\"AAAAAAAB5gYAAAMYEgAAGRIAABoSAAAAAa0BAAA=\",\"AAAAAAABfQ8AAA==\"]K@m[\"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\",1]Eo[\"AAAAAAA7MAAAAQAABQABAFYSBQA7MAAAAQAABQABADoTBQAAOzAAAAEAAAUAAQCvEwUAOzAAAAEAAAUAAQDvEwUA\",\"\"]Ck[\"AAAAAAAAAVoFAAAAAAFMBAAA\",\"AAAAAAAAAxMMAAAUDAAAFQwAAA==\"]Cc[\"\",\"AAAAAAAESAQAAAQHAABIEQAAmBMAAAAAAlcTAACuEwAA\"]Fc[\"AAAAAf4EAAAAATcAAAACKgEAACsBAAA=\",\"AAGRBwAAAAH+BAAAAAACvg8AAEsQAAACHgwAAHgTAAAAAAECFAAAAdkTAAA=\"]Eo[\"AAAAAUURAAABLQkAAAACuAAAAAgMAAABDxEAAAABUAQAAA==\",\"AAAAAAGlBQAAAAIIDAAAeg8AAAABbAcAAAEkEAAA\"]Dk[\"AAAABhASAABpEgAA1RMAAOETAAD/EwAADhQAAAAAAAABQBMAAA==\",\"AAAAAAAAAAEHEQAA\"]A@g[\"AAAAOjAAAAEAAAAAABIAEAAAAGkEvwRoBZcGxgc4CeoLGQw2DLoMvQ/UD8QQRhFUEkMTdxOXE9wTOjAAAAEAAAAAAAcAEAAAAC4JIxATEpgS4hLnEhEUFRQ6MAAAAQAAAAAABwAQAAAA2QFGBBoMQw+6EBARZRIHEzowAAABAAAAAAAHABAAAAC5AMUQUBLQE/kTABQcFB4UAUMFAAAAAAAAAAAAAY8TAAA=\",\"AAAAAb8EAAABvggAAAABCAwAAA==\"]ACk[\"AAAAOjAAAAEAAAAAAAgAEAAAAGoEHgkMDDoPgA+XECkRrBOtEzowAAABAAAAAAAHABAAAABKBFYFawXUB/8LCBFVEpYTOjAAAAEAAAAAAAoAEAAAANsBWgTCD8cPNxBTEA4RFBLhEugSSxM6MAAAAQAAAAAABwAQAAAAGQFED74PSxBREuITHRQfFAVGBQAAHgwAAHgTAADREwAAARQAAAQSEgAAcBMAAMITAAD6EwAAAhsMAAAxDgAAAQIUAAADwRAAAGYSAADZEwAA\",\"AAAAAAAAAAAAAAAAAAFtBwAAAAAAAAGnBQAA\"]Ho[\"AAAAAxQHAAC3BwAAGBEAAAMiCQAA9QsAAPsTAAABrhAAAAABwgcAAAACog8AAA4TAAAB0wYAAA==\",\"AAAAAAT1CwAA9gsAAPcLAAD4CwAAAAWsBAAArQQAAK4EAACvBAAAUBIAAA==\"]Ho[\"AAAAAxgHAAC7BwAAHxEAAAMmCQAA+QsAAP0TAAABshAAAAABxAcAAAACpA8AABITAAAB1wYAAA==\",\"AAAAAAT5CwAA+gsAAPsLAAD8CwAAAAWwBAAAsQQAALIEAACzBAAAURIAAA==\"]No[\"AAABjgAAAAHRBAAAAAIbAAAAvAwAAAAAAeMAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAgJJBKAGBgf8CDIJFgwcDCgMew+dDyYQURBWEGEQmBCkEKsQthC4EBURNhFKEQoSDBJSEl8SmRKbEt4SHhMgE1MTWhN5E5kT1hM=\",\"AAF8BwAAAAHRBAAAAAAAAAAAAAAAAAAAAAAEAgkAAAMJAAAGCQAABwkAAA==\"]No[\"AAAAApEAAAAABQAAAAI5AAAAvwwAAAEtAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAAJAAQAAAAAwJLBKQGBwf9CDMJFwwdDCkMfA+eDycQUhBXEGIQmRClEKwQtxC5EBYRNxFLEQsSDRJTEmASmhKcEt8SHxMhE1QTWxN6E5oT1xM=\",\"AAGTBwAAAAEABQAAAAAAAAAAAAAAAAAAAAAEBAkAAAUJAAAICQAACQkAAA==\"]Cc[\"AAAAAecEAAAAAAAAAQMBAAA=\",\"AAAAAecEAAAAAAG1CwAA\"]Ck[\"AAAAASgFAAAAAAF3AQAA\",\"AAAAASgFAAAAAAO2CwAAtwsAALgLAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAFhBAAAAAAAASYMAAA=\",\"\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAATYPAAA=\"]Eo[\"AAAAARgFAAAAAUoAAAACVQEAAFYBAAABvQYAAA==\",\"AAAAARgFAAAAAAGvBgAAAAAAAAAAAAAAAAACTAUAADcPAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAgwUAAANFAAA\"]Ck[\"AAAAAAAAAAABwhMAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAABIxQAAA==\"]Ag[\"AAACmgIAABoDAAA=\",\"\"]Bo[\"AAAAAAAAAcEAAAAAAAABIQwAAA==\",\"AAAAAb0PAAA=\"]Cc[\"AAAAAAACGgwAAGUSAAABUA8AAA==\",\"AAAAAAABBAcAAA==\"]Gc[\"AAAAAfoEAAAAATMAAAABJQEAAAABEhIAAAEbDAAAAAFmEgAA\",\"AAGQBwAAAAH6BAAAAAHhEgAAAb4PAAAAARISAAAAAAAAAAAAAAABBQcAAA==\"]Do[\"AAAAAAAAAAFRDwAAAm0FAACCDwAA\",\"AAAAAa4BAAAAAAABUQ8AAARtBQAAgg8AAAoRAAALEQAA\"]Do[\"AAAAAAAAAAFSDwAAAm4FAACDDwAA\",\"AAAAAboBAAAAAAABUg8AAARuBQAAgw8AAAwRAAANEQAA\"]Ao[\"AAAAAAEoEAAAAAABTBAAAA==\",\"\"]Gc[\"AAABJhEAAAJjAAAAtQcAAAEQAgAAAAHJAAAAAnIEAABCEQAAAk0PAADADwAAAAFPDwAAAlwEAAC/DwAAAAIkDAAAvxAAAAIjDAAAJQwAAA==\",\"\"]Cc[\"AAAAAAAAAANdBAAAdAQAAEQRAAA=\",\"AAAAAAABwg8AAA==\"]Ec[\"AAABPAIAAAHJBAAAAAISAAAA+wYAAALPAAAA0AAAAA==\",\"AAABPwIAAAHJBAAAAAAAAkIRAABDEQAA\"]Bo[\"AAABphAAAAAAAALEAAAAxQAAAA==\",\"AAAAAAFdBQAA\"]Ck[\"AAABpxAAAAAAAAJmAQAAZwEAAA==\",\"AAAAAAAAAAAAAAABXgUAAA==\"]Ao[\"AAAAAAAAARsTAAABQA8AAA==\",\"\"]Hg[\"AAAAAmUAAADPBwAAARECAAABOQkAAAPVAAAAwgYAAF8QAAACWwUAANoPAAAAAnMFAAB9DAAABkYPAABHDwAASA8AAGkQAADAEAAAdxIAAAAAAkoPAABLDwAAAUkPAAA=\",\"\"]Dk[\"AAAAAAABOgkAAALDBgAA0AcAAAJcBQAAYBAAAAABdAUAAAFqEAAA\",\"AAAAAAABxw8AAA==\"]Bc[\"AAAAAAAAAAAAAAAAAAAAAAHsEgAA\",\"\"]ABc[\"AAABhw8AAAGUBgAAAsgBAAD0BgAABJMGAAAaDAAAfQ8AAGUSAAAC0BMAAAAUAAADBxEAANETAAABFAAABWwHAAAKEQAACxEAAAwRAAANEQAAASQQAAAAAAABbQcAAA==\",\"AAAABeoGAABFEQAARhEAAEcRAABJEQAAA5wBAAA8DwAAPQ8AAAFIEQAABfkTAAAcFAAAHRQAAB4UAAAfFAAAAXgTAAAB+hMAAAEREgAAAAAAAAAAAAJWDwAAcA8AAAUEAgAABQIAAIQPAACFDwAAhg8AAA==\"]Cc[\"AAAAARkFAAAAAUsAAAACVwEAAFgBAAA=\",\"AAAAARkFAAA=\"]Dc[\"AAAAAAAAAAA7MAAAAQAABQABAEkSBQA=\",\"AAAABNIBAADWAQAA1wEAANgBAAA=\"]Ao[\"AAAAAdIBAAAAAAAAAc0PAAA=\",\"\"]Ao[\"AAAAAdcBAAAAAAAAAc4PAAA=\",\"\"]Eo[\"AAAAASgRAAABBBMAAAM7EAAAvBAAABIRAAABXhMAAAEzEQAAASoQAAACOxEAABwSAAABLREAAAAAAAABkRMAAA==\",\"\"]Eo[\"AAAAASsRAAABBhMAAAM/EAAAvhAAABQRAAABYRMAAAE1EQAAASwQAAACPREAAB4SAAABLxEAAAAAAAABkxMAAA==\",\"\"]Bc[\"AAAAAAAAAnUEAADKBgAAAAHPDwAA\",\"\"]Bc[\"AAAAAAAAAngEAADNBgAAAAHQDwAA\",\"\"]Ec[\"AAAAAcwBAAAAAmoSAABsEgAAAlgTAABZEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAAEwAwAA\"]Gg[\"AAAAAcsEAAAAAhQAAAD9BgAAAtYAAADXAAAA\",\"AAADRQIAAEYCAABHAgAAAcsEAAAAAAAB2g8AAAACcwUAAH0MAAACaRAAAHcSAAAAAAABSQ8AAA==\"]Eg[\"AAAAAQYFAAAAAj4AAACgAAAAAzUBAAA2AQAAtQ8AAAFLAwAA\",\"AAAAAQYFAAAAAAAAAAF0BQAAAWoQAAA=\"]Ec[\"AAAAAAAAAWUBAAAAAAAAAAAAAAAAAAK7BAAAPgkAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAAacFAAA=\"]Ec[\"AAAB8wsAAAG+BAAAAAELAAAAAbQAAAA=\",\"AAAAAb4EAAAAARAJAAAAAAAAAAAAAAAAAAABkQYAAA==\"]Dg[\"AAAAAAFYBQAAAAAAAAAAAAAAAAAAAAJkEAAACREAAA==\",\"AAF2BwAAAAAAAZMGAAA=\"]Ac[\"AAABZAIAAA==\",\"\"]Do[\"AAAAAd8EAAAAASEAAAAAAAL0AAAA9QAAAA==\",\"AAACcAIAAHECAAAB3wQAAAAAAAAAAUYTAAA=\"]Dk[\"AAAAARYFAAAAAUcAAAACTwEAAFABAAA=\",\"AAAC5AIAAOUCAAABFgUAAAAAAAAAAUcTAAA=\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAXCQAA\"]Dk[\"AAAAAAAAAAABEwEAAA==\",\"AAABjQIAAAAAAAAAAAABYgQAAAESBwAAAUIEAAABbwcAAA==\"]Dg[\"AAAAAAAAAYgBAAA=\",\"AAABEwMAAAAAAAAAAAABYwQAAAETBwAAAUQEAAABcgcAAA==\"]Dk[\"AAAAAe4EAAAAAbcBAAABrgQAAAEcEQAAAQ4BAAA=\",\"AAGJBwAAAAHuBAAAAAAAARwRAAA=\"]Dk[\"AAAAATgFAAAAAcoBAAACkQEAALIEAAABIxEAAA==\",\"AAGiBwAAAAE4BQAAAAAAASMRAAA=\"]Ck[\"AAAAAQcFAAAAAT8AAAACNwEAADgBAAA=\",\"AAAAAQcFAAAAAAHDBgAA\"]Eg[\"AAAAAdoEAAAAAiAAAACWAAAAAasPAAABQQMAAALvAAAAXRIAAA==\",\"AAGEBwAAAWkCAAAC2gQAABEKAAA=\"]Eg[\"AAAAAREFAAAAAkYAAAChAAAAAkoBAAC2DwAAAUwDAAABXhIAAA==\",\"AAGcBwAAAd4CAAABEQUAAAFyCgAA\"]Ao[\"AAAAAAAAAAACVBAAAAoRAAA=\",\"\"]Ao[\"AAAAAAAAAAACVRAAAAwRAAA=\",\"\"]Do[\"AAABbwAAAAG9BAAAAAABswAAAA==\",\"AAAAAb0EAAAAAQ8JAAAAAAAAAAAAAAAAAAABWBAAAA==\"]Bg[\"AAAAAAAABNQAAABiBQAAFQwAABoSAAA=\",\"\"]Ak[\"AAAAAAABQAAAAAE5AQAA\",\"\"]Do[\"AAAAAAAAAAAAAAAAAAAAAAAAAqMQAAAXEgAA\",\"AAF0BwAAAAAAAAAAAAAAAAAAAAAAAAFjEAAA\"]Cg[\"AAAAAAPEBgAANwkAAK0QAAA=\",\"AAAAAAAAAAJADwAATBAAAA==\"]Ag[\"AAACjQIAABMDAAA=\",\"\"]Ac[\"\",\"AAAAAU8SAAA=\"]Cc[\"AAAAATQKAAACNQoAAKYKAAABpwoAAAJlEAAAZxAAAA==\",\"\"]Gg[\"AAAAAd4EAAAB2BMAAAAAAcAIAAAE8wAAAM8PAABwEgAAvRMAAAEkEAAA\",\"AAAAA7IBAADeBAAA4xMAAAABnRMAAAABwAgAAAPPDwAAcBIAAL0TAAA=\"]Bc[\"AAAAAbIBAAAAAAAAAAAAAcoQAAA=\",\"\"]Gg[\"AAAAARUFAAAAAAFOAQAAAcEIAAAD0A8AAHISAAC+EwAAAAAAAAFtBwAA\",\"AAAAA8EBAAAVBQAA5BMAAAABnhMAAAABwQgAAAPQDwAAchIAAL4TAAA=\"]Bc[\"AAAAAcEBAAAAAAAAAAAAAc4QAAA=\",\"\"]Fg[\"AAABRgIAAAHVBAAAAAEeAAAAAAAC5wAAAOgAAAA=\",\"AAGABwAAAAHVBAAAAAE5CQAAAsIGAABfEAAAA3IEAABzBAAAWwUAAA==\"]Eo[\"AAAAAQkFAAAAAUIAAAACOwEAADwBAAA=\",\"AAGYBwAAAAEJBQAAAAE6CQAAAdAHAAAEdAQAAFwFAABgEAAARBEAAA==\"]Ao[\"\",\"AAAAAAAAAAAAAAAB0hAAAA==\"]Ek[\"AAAAAeMEAAAAASUAAAAAAAL8AAAA/QAAAA==\",\"AAABdwIAAAHjBAAAAAAAAAFsBwAAASQQAAAAAsoQAADMEAAA\"]Eg[\"AAAAAR8FAAAAAVAAAAACYwEAAGQBAAA=\",\"AAAB8QIAAAEfBQAAAAAAAAAAAALOEAAA0BAAAAABbQcAAA==\"]Ao[\"AAAAAAAAAAFBEAAAAAExDAAA\",\"\"]Jk[\"AAAAAeQEAAAABSYAAACXAAAASAUAADkQAAA7EAAAArULAACsDwAABEIDAAABDAAAOhAAADwQAAAE/gAAAP8AAAAKEQAACxEAAAItDAAALgwAAAIsEQAALREAAA==\",\"AAAAAuQEAABPEAAAArMBAAAyEAAAAAABCgkAAA==\"]Og[\"AAAAASQFAAAABVMAAACkAAAASQUAAD0QAAA/EAAABnABAABxAQAAtgsAALcLAAC4CwAAuQ8AAARPAwAAAgwAAD4QAABAEAAAAgwRAAANEQAAAi8MAAAwDAAAAi4RAAAvEQAA\",\"AAAABCQFAACpBwAAqgcAAFAQAAAEwwEAADMQAAA0EAAANRAAAAAAAQsJAAACUwUAAFQFAAAAAAAAAAAAAAA7MAAAAQAACgACAKsHBQDKBwQA\"]Cc[\"AAAAARoFAAAAAUwAAAACWQEAAFoBAAA=\",\"AAAAARoFAAA=\"]Ck[\"AAABTwUAAAHlBAAAAAEnAAAAAAABAAEAAA==\",\"AAAAAuUEAAADDAAA\"]Dg[\"AAABUAUAAAElBQAAAAFUAAAAAXIBAAAAAAAAAAAAAcUGAAA=\",\"AAAAAiUFAAAEDAAA\"]Cc[\"AAAAAT4FAAAAAWAAAAABmwEAAA==\",\"AAAAAj4FAAAFDAAA\"]Dg[\"AAAAAAAAAAAAAAABwRAAAA==\",\"AAAABjYQAABcEgAARBMAAEUTAAB1EwAAdhMAAA==\"]Ak[\"AAAAAAAAAAABSxIAAA==\",\"\"]Ak[\"AAAAAAAAAAABThIAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmoAAAAEAgAA\",\"\"]Bg[\"AAAAAAAAAAAAAVUEAAA=\",\"AAAAAcQQAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAmkAAAAFBwAA\",\"\"]Bk[\"AAAAAAAAAAAAAATTBgAA1AYAANUGAADWBgAA\",\"\"]Ec[\"AAAABJ0BAACoAQAA+QQAACUQAAAAAAEkAQAAAAAABNcGAADYBgAA2QYAANoGAAA=\",\"AAAAAfkEAAA=\"]Bg[\"AAAAAAAAAAAAAVYEAAA=\",\"AAAAAAHiEgAA\"]Ag[\"AAAAAAAB9gYAAA==\",\"\"]Cc[\"AAAAAToKAAACOQoAAKsKAAABqgoAAAJmEAAAaBAAAA==\",\"\"]No[\"AAAAAdwEAAAB9AYAAAGeEgAAAXoPAAAGEQwAAEYQAABBEwAAVRMAALUTAADdEwAAB/EAAACtAQAAdgwAAM0PAABvEgAATBMAAE4TAAABvxMAAAAAAAAAAAAAA6EGAAB6DAAAcxIAAA==\",\"AAAAAtwEAADWDwAAAAGxAQAAAXUSAAAGEQwAAEYQAABBEwAAVRMAALUTAADdEwAABXYMAADNDwAAbxIAAEwTAABOEwAA\"]Bo[\"AAAAAdYPAAAAAbEBAAAAAjoQAADLEAAAAAEtDAAA\",\"\"]Nc[\"AAAAARMFAAAAAAFMAQAAOjAAAAEAAAAAAAcAEAAAALsBEgxHEJ8SQhNWE7YT3hMFdwwAAM4PAABxEgAATRMAAE8TAAAAAAAAAAAAAAAEpwUAAKUGAAB7DAAAdBIAAA==\",\"AAAAAhMFAADXDwAAAAHAAQAAAXYSAAAGEgwAAEcQAABCEwAAVhMAALYTAADeEwAABXcMAADODwAAcRIAAE0TAABPEwAA\"]Bo[\"AAAAAdcPAAAAAcABAAAAAj4QAADPEAAAAAEvDAAA\",\"\"]Ao[\"AAAAAAAAAAACTBMAAE0TAAA=\",\"\"]Ao[\"AAAAAAAAAAACThMAAE8TAAA=\",\"\"]Dc[\"AAABRQIAAAHMBAAAAAIVAAAA/gYAAALYAAAA2QAAAA==\",\"AAABSQIAAAHMBAAA\"]Bk[\"AAAAAdUBAAAAAATTAAAAYQUAABQMAAAZEgAA\",\"\"]Ec[\"AAAAAv4SAAD/EgAAAvwSAAD9EgAABO8LAADwCwAA8QsAAPILAAAE6wsAAOwLAADtCwAA7gsAAA==\",\"\"]Cc[\"AAAAAAAAAAABShIAAA==\",\"AAF3BwAAAAKsAQAA3BIAAA==\"]Cc[\"AAAAAAAAAAABTRIAAA==\",\"AAGMBwAAAAK5AQAA3RIAAA==\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAABxQYAAA==\"]Cg[\"AAAAATsPAAAAAAFvAQAAATgQAAA=\",\"AAGoBwAAAAAAAUsTAAA=\"]Ek[\"AAAAAcMEAAAAAAG+AAAAAAAAAAAAAAAAAAAE2BIAAOASAAD7EgAAFhMAAA==\",\"AAF4BwAAAALDBAAAaQUAAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzsJAADLDwAADBQAAA==\",\"\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAzwJAADMDwAADRQAAA==\",\"\"]Bk[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAYCQAA\"]Bc[\"AAAAAAABQQQAAA==\",\"AAAAAAGpBAAA\"]Ec[\"AAAAAfAEAAAAAbgBAAABrwQAAAIeEQAAcxMAAAEQAQAA\",\"AAGKBwAAAAHwBAAAAAAAAh4RAABzEwAA\"]Ec[\"AAAAAToFAAAAAcsBAAACkwEAALMEAAACJREAAHQTAAA=\",\"AAGjBwAAAAE6BQAAAAAAAiURAAB0EwAA\"]Ag[\"\",\"AAAAAAABDhIAAA==\"]Co[\"AAAAAqIBAACpBwAAAAABaAEAAA==\",\"AAAAAAAAAAAAAAAAAAAAAcIBAAA=\"]Ac[\"\",\"AAAAAAGhEgAA\"]Cg[\"AAAAAAAAAnUSAAB2EgAAAAABERIAAA==\",\"AAAAAAAAAAFQEwAA\"]Do[\"AAAAAQQFAAAAAjwAAACfAAAAAzIBAAAzAQAAtA8AAAFKAwAA\",\"AAAAAQQFAAAAAAABXQQAAA==\"]Ak[\"AAAAAAACnRMAAJ4TAAA=\",\"\"]Ac[\"AAAAAdYBAAA=\",\"\"]Ac[\"AAAAAdgBAAA=\",\"\"]Eo[\"AAAC+QIAAA8DAAABLgUAAAABWwAAAAKCAQAAgwEAAA==\",\"AAAAAS4FAAAAAAAFpwYAAKgGAACpBgAAqgYAAKsGAAA=\"]Fk[\"AAAABEgQAABJEAAARBMAAEUTAAABPA8AAAGgEAAAAQ8SAAAAAAG/EwAAAAAAAAAAAAEmDAAA\",\"AAAAAAAAAxgSAAAZEgAAGhIAAA==\"]Fc[\"AAAAAAABkwYAAAJ1EgAAdhIAAAEHEQAAAAEREgAAAAACmxMAAJwTAAAAAAAB7BIAAA==\",\"AAAAAAAAAdQTAAABUBMAAA==\"]Ag[\"\",\"AAAAAAABRQUAAA==\"]Co[\"AAAAAQwFAAAAAUUAAAACQQEAAEIBAAA=\",\"AAAAAQwFAAAAAAAAAAExDgAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAeQGAAA=\",\"\"]Jc[\"AAAAAtsEAAC7EwAAAAAAAgUSAADaEgAABPAAAACtAQAAKwwAAOkSAAADPwkAAEYTAAC/EwAAAAAAAZ4QAAA=\",\"AAGFBwAAAAKwAQAA2wQAAAAAAAIFEgAA2hIAAAIrDAAA6RIAAAI/CQAARhMAAAAAAAGeEAAA\"]Jg[\"AAAAAhIFAAC8EwAAAAABSwEAAAO7AQAABhIAANsSAAACLAwAAOoSAAACQAkAAEcTAAAAAAABnxAAAA==\",\"AAGdBwAAAAK/AQAAEgUAAAGbBgAAAAACBhIAANsSAAACLAwAAOoSAAACQAkAAEcTAAAAAAABnxAAAA==\"]Ao[\"AAAAAAAAAcYAAAAAAAFYBAAA\",\"\"]Bc[\"AAAAAAABSQAAAAJTAQAAVAEAAA==\",\"\"]Ag[\"AAAClQIAACIDAAA=\",\"\"]Ak[\"AAAAAAAAAnYEAADLBgAA\",\"\"]Ak[\"AAAAAAAAAnkEAADOBgAA\",\"\"]Ag[\"AAAClgIAAB4DAAA=\",\"\"]Dk[\"AAAAAcoEAAAAAhMAAAD8BgAAAtEAAADSAAAA\",\"AAABQAIAAAHKBAAAAAAAAAAAAU8PAAA=\"]Dg[\"AAAAAccEAAAAAhAAAAD5BgAAAssAAADMAAAA\",\"AAABOgIAAAHHBAAAAAAAAAHADwAA\"]Co[\"AAABFRIAAAEIBQAAAAFBAAAAAToBAAA=\",\"AAGXBwAAAQEJAAABCAUAAA==\"]Ec[\"AAAAAAABFhIAAAG1AAAAAAAAAAAAAAAAAAADbQQAAP4IAABTDwAA\",\"AAAAAaoBAAAAAAAAAUATAAA=\"]Hk[\"AAAC0gIAAOsCAAABJgUAAAABVQAAAAJzAQAAdAEAAAAAAAAAAAAAAAAABAgCAABMBQAApgYAAOMGAAA=\",\"AAABAAMAAALEAQAAJgUAAAAAAmATAABhEwAAAAACPBEAAD0RAAA=\"]Fc[\"AAAAAzYQAABKEAAAXBIAAAACahIAAGwSAAADmAEAAFgTAABZEwAAAmYEAAC0CwAAAAAAAAABYQQAAA==\",\"AAAAAcwBAAA=\"]Dc[\"AAAAAmIAAADGBAAAAg8CAAC/CAAAAQ8AAAAByAAAAA==\",\"AAAAAsYEAADVDwAA\"]Eg[\"AAAAAeEEAAAAASMAAAAAAAL4AAAA+QAAAAAAAAAAAAAAAAPfBgAALw8AADYPAAA=\",\"AAABcwIAAAHhBAAA\"]Eg[\"AAAAARsFAAAAAU0AAAACWwEAAFwBAAAAAAAAAAAAAAAAAAPhBgAAMQ8AADcPAAA=\",\"AAAB6wIAAAEbBQAA\"]Hk[\"AAAFKgIAAD0CAAA/AgAARwIAAEkCAAAB1gQAAAACHwAAAP8GAAAAAALpAAAA6gAAAA==\",\"AAADYQIAAGICAABkAgAAAtYEAACXBgAAAqUFAAAjEAAAAQcTAAABeg8AAAEPEQAA\"]Ek[\"AAAAAQoFAAAAAkMAAAAABwAAAj0BAAA+AQAA\",\"AAAB0gIAAAEKBQAAAAAAAAAAAAAAAAAAAAACuwQAAOQGAAA=\"]Bk[\"AAAAAAABNxAAAAFuAQAA\",\"AAAAAAAAAAE4EAAA\"]Fc[\"AAABjwAAAAHTBAAAAAG9DAAAAAAB5QAAAAAAAAAAAAAAAAQKBwAADgcAAAMJAAAHCQAA\",\"AAF+BwAAAALTBAAAaAUAAA==\"]Fc[\"AAAAApIAAAACBQAAAAHADAAAAS8BAAAAAAAAAAAAAAAAAAQMBwAAEAcAAAUJAAAJCQAA\",\"AAGVBwAAAAECBQAAAWsFAAA=\"]Ag[\"AAAClAIAAB0DAAA=\",\"\"]Cg[\"AAAAAUAFAAAAAAADQA8AAKYPAABMEAAA\",\"AAGnBwAAAAFABQAA\"]Dc[\"AAAAAiAFAACqBwAAAAABaQEAAA==\",\"AAAAASAFAAAAAAAAAAAAAAAAAAGwBgAA\"]Dg[\"AAAAAe0SAAAB2A8AAAAAAALrAAAACxEAAA==\",\"AAEMCQAAAa8BAAAB7RIAAAHYDwAA\"]Dg[\"AAAAAe4SAAAB2Q8AAAABRgEAAAABDREAAA==\",\"AAENCQAAAb4BAAAB7hIAAAHZDwAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATQPAAA=\",\"\"]Ac[\"\",\"AAAAAAHDEwAA\"]Ag[\"AAAClwIAAB8DAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAADSRIAAEoSAABLEgAA\"]Bc[\"\",\"AAAAAAAAAAADTBIAAE0SAABOEgAA\"]Ak[\"\",\"AAAAAW4SAAAAAAGOEwAA\"]ADc[\"AAAAAdcEAAAAAAA6MAAAAQAAAAAAFAAQAAAAvwfBDEEPiQ+MD8gPxhA/EVMRZxLUEnsT0hPfE+sT7RMPFBMUFhQaFCEUOjAAAAEAAAAAAAwAEAAAAOwAVBDCEF0SbxJwEgoTNhNJE/cTCBQKFBgUAAABOBEAAA==\",\"AAGBBwAAAAHXBAAAAAAAOjAAAAEAAAAAABQAEAAAAL8HwQxBD4kPjA/ID8YQPxFTEWcS1BJ7E9IT3xPrE+0TDxQTFBYUGhQhFDowAAABAAAAAAAJABAAAABUEMIQXRIKEzYTSRP3EwgUChQYFAAAATgRAAA=\"]ADc[\"AAAAAQ4FAAAAAAFHAQAAOjAAAAEAAAAAABQAEAAAAMAHwgxCD4oPjQ/JD8cQQBFUEWgS1RJ8E9MT4BPsE+4TEBQUFBcUGxQiFDowAAABAAAAAAALABAAAABVEMMQXhJxEnISCxM3E0oT+BMJFAsUGRQAAAE5EQAA\",\"AAGZBwAAAAEOBQAAAAAAOjAAAAEAAAAAABQAEAAAAMAHwgxCD4oPjQ/JD8cQQBFUEWgS1RJ8E9MT4BPsE+4TEBQUFBcUGxQiFDowAAABAAAAAAAJABAAAABVEMMQXhILEzcTShP4EwkUCxQZFAAAATkRAAA=\"]Ag[\"AAACcQIAAOQCAAA=\",\"\"]Bk[\"AAAAAAAAAAAAAU0EAAA=\",\"AAAAAAAAAQgMAAA=\"]Bk[\"AAAAAAAAAAAAAAEgDAAA\",\"AAAAAAABmBMAAA==\"]Do[\"AAAAAeIEAAAAASQAAAAAAAL6AAAA+wAAAAAAAAAAAAAAAALgBgAAMA8AAA==\",\"AAAAAeIEAAA=\"]Do[\"AAAAARwFAAAAAU4AAAACXQEAAF4BAAAAAAAAAAAAAAAAAALiBgAAMg8AAA==\",\"AAAAARwFAAA=\"]Ag[\"AAACmQIAACEDAAA=\",\"\"]Fc[\"AAAAAR4FAAAAAk8AAACiAAAAAmEBAAC3DwAAAk0DAAA4EAAA\",\"AAAAAR4FAAAAAAAAAAAAAAABbQcAAAAAAAABpwUAAA==\"]Ac[\"\",\"AAAAAAFuBwAA\"]Ao[\"AAAAAAGpBAAA\",\"AAAAAAFxBwAA\"]Ag[\"AAACkgIAABkDAAA=\",\"\"]Ag[\"AAACkwIAABsDAAA=\",\"\"]Dg[\"AAAAAfIEAAAAAAAB4xIAAAAAAAHMEAAA\",\"AAAAAvIEAAA0CgAAATUKAAAAAWUQAAA=\"]Do[\"AAABzQEAAAEyBQAAAAAAAeUSAAAAAAAB0BAAAA==\",\"AAAAATIFAAABpgoAAAGnCgAAAWcQAAA=\"]Do[\"AAAAAfQEAAAAAAADPBAAAM0QAADkEgAAAAEuDAAA\",\"AAAAAvQEAAA6CgAAATkKAAAAAWYQAAA=\"]Eg[\"AAABzgEAAAE0BQAAAAAAA0AQAADREAAA5hIAAAABMAwAAA==\",\"AAAAATQFAAABqwoAAAGqCgAAAWgQAAA=\"]Cc[\"AAAAAAAAAncEAADMBgAAAAEEAQAA\",\"AAGHBwAAAAG0AQAA\"]Cc[\"AAAAAAAAA3kBAAB6BAAAzwYAAA==\",\"AAGgBwAAAAHGAQAA\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA94GAACwBwAAzgcAAA==\",\"\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAATMPAAA=\",\"\"]Ao[\"AAAAAAAAAawEAAAAAQgUAAA=\",\"\"]Bk[\"AAAAAAAAAbAEAAAAAQkUAAA=\",\"AAAAAbQEAAA=\"]Eg[\"AAAAAAAAAAABEQEAAAAAAAAAAAAAAANBCQAApw8AAJYSAAA=\",\"AAGLBwAAAAS3BwAAuAcAALkHAAC6BwAA\"]Eg[\"AAAAAAAAAZQBAAAAAAAAAAAAAAAAAANCCQAAqA8AAJcSAAA=\",\"AAGkBwAAAAS7BwAAvAcAAL0HAAC+BwAA\"]Bo[\"AAAAAAABsQEAAAAAAXYMAAAAAWIEAAAAAUIEAAA=\",\"\"]Bo[\"AAAAAAABwAEAAAAAAXcMAAAAAWMEAAAAAUQEAAA=\",\"\"]Ak[\"AAAAAAABCBMAAAFvEwAA\",\"\"]Ao[\"AAAAAAABCRMAAAAAAXATAAA=\",\"\"]Fo[\"AAAAASMFAAAAAlIAAACjAAAAA2wBAABtAQAAuA8AAAFOAwAA\",\"AAAB+QIAAAEjBQAAAAAAAAJTBQAAVAUAAAAAAAAAAALCAQAAsAYAAA==\"]Dg[\"AAAAAfwEAAAAATUAAAABJwEAAA==\",\"AAAAAfwEAAAAAAAAAAAAAAAAAAAAAAHlBgAA\"]Dg[\"AAAAAcEEAAAAAgwAAAD4BgAAArsAAAC8AAAA\",\"AAABKgIAAAHBBAAAAAABxRAAAA==\"]Do[\"AAAAAfcEAAAAAjEAAACcAAAAAyABAAAhAQAAsQ8AAAFHAwAA\",\"AAAAAfcEAAAAAAAAAWUEAAA=\"]Ek[\"AAAAAdgEAAAAAAACURMAAKUTAAAD7QAAAKgQAAA2EwAA\",\"AAGCBwAAAAHYBAAAAAAAAlETAAClEwAAAagQAAA=\"]Ek[\"AAAAAQ8FAAAAAAFIAQAAAlITAACmEwAAAqkQAAA3EwAA\",\"AAGaBwAAAAEPBQAAAAAAAlITAACmEwAAAakQAAA=\"]Bo[\"AAAAAAAAAAABUwUAAAAAAAAAAALCAQAAsAYAAA==\",\"\"]Fg[\"AAAAAdkEAAAAAAAEIAkAANIPAAAwEQAAARMAAALuAAAASRMAAA==\",\"AAGDBwAAAAHZBAAAAAAABCAJAADSDwAAMBEAAAETAAA=\"]Fg[\"AAAAARAFAAAAAAFJAQAABCEJAADTDwAAMREAAAITAAABShMAAA==\",\"AAGbBwAAAAEQBQAAAAAABCEJAADTDwAAMREAAAITAAA=\"]Ag[\"\",\"AAAAAAAAAdQTAAA=\"]Bc[\"\",\"AAAAAAAAAAAAAAAAAAAAAAHsEgAA\"]Ag[\"\",\"AAAAAAAAAVAPAAA=\"]Co[\"AAAAAf0EAAAAATYAAAACKAEAACkBAAA=\",\"AAAAAf0EAAAAAAAAARISAAA=\"]Fg[\"AAABUQIAAAHmBAAAAAEoAAAAAAG4BgAAAgEBAAACAQAA\",\"AAACegIAAJ8GAAAB5gQAAAAAAAGqBgAAAAAAAAAAAAAAAAEvDwAA\"]Gc[\"AAABugIAAALEAQAAJwUAAAABVgAAAAJ1AQAAdgEAAAG/BgAA\",\"AAACAQMAAKMGAAABJwUAAAAAAbEGAAAAAAAAAAAAAAAAAAIIAgAAMQ8AAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA6wHAADLBwAAwwgAAA==\",\"\"]Cg[\"AAABdwIAAAAAAAAAARQBAAA=\",\"AAAAAAAAAAI6EAAAPBAAAA==\"]Cg[\"AAAB8QIAAAAAAAGJAQAA\",\"AAAAAAAAAAM+EAAAQBAAAEEQAAA=\"]Bo[\"AAAAArQEAAA/BQAAAaESAAA=\",\"AAAAAj8FAABWEQAA\"]Bo[\"AAAAAAAAAcIAAAAAAAABIgwAAA==\",\"AAAAAXcTAAA=\"]Io[\"AAAAAS8FAAAAAVwAAAABhAEAAAZ1BQAAyxAAAM0QAADPEAAA0RAAANMQAAAAAAAFyhAAAMwQAADOEAAA0BAAANIQAAAAAAAAAAABIBQAAA==\",\"AAAAAS8FAAAAAARdEwAAXhMAAGATAABhEwAAAAFeBAAA\"]Co[\"AAAAAmQAAAC2BwAAAAABygAAAAJzBAAAQxEAAAFODwAA\",\"AAABJhEAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhUJAAAuEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhcJAAAwEAAA\",\"\"]Co[\"AAAAAfMEAAAAAAAAAhcBAAAYAQAA\",\"AAAAAfMEAAAAAAJlEAAAZhAAAA==\"]Dc[\"AAAAATMFAAAAAAKMAQAAjQEAAA==\",\"AAAAAjMFAABPEgAAAAACZxAAAGgQAAA=\"]Cc[\"AAAAAAGcAQAAAAG3AAAAAAAAAR8MAAA=\",\"AAAAAZcTAAA=\"]Ac[\"\",\"AAAB8wsAAA==\"]Ec[\"AAABcAIAAAHOBAAAAAEXAAAAAAAC3QAAAN4AAAA=\",\"AAAAAc4EAAAEEwkAAP4JAAD/CQAAAQoAAA==\"]Do[\"AAAB5QIAAAH2BAAAAAEvAAAAAh0BAAAeAQAA\",\"AAAAAfYEAAAEFAkAAFAKAABRCgAAUgoAAA==\"]Ak[\"\",\"AAAAAAACnRMAAJ4TAAA=\"]Ck[\"AAAAAsAEAAAqCQAAAb4IAAAB2RIAAAG6AAAA\",\"AAAAAsAEAADUDwAA\"]Cg[\"AAAAAU0HAAACHxAAADIQAAAAAbULAAAAAAAAAAABnhAAAA==\",\"\"]Ck[\"AAAAAU4HAAACIBAAADMQAAAAArYLAAC3CwAAAAAAAAAAAZ8QAAA=\",\"\"]Bc[\"AAAAAAAAAAAAAAAAApsTAACcEwAA\",\"\"]Fo[\"AAAAAd0EAAAAAAADZwQAACsJAAC1EwAAAvIAAACmAQAA\",\"AAGGBwAAAAHdBAAAAAAAAmcEAAArCQAAAaYBAAAAAAAAAAAAAAABcxIAAA==\"]Fo[\"AAAAARQFAAAAAAFNAQAAA2gEAAAsCQAAthMAAAGnAQAA\",\"AAGeBwAAAAEUBQAAAAAAAmgEAAAsCQAAAacBAAAAAAAAAAAAAAABdBIAAA==\"]Ck[\"AAAAAQ0FAAAAAAJDAQAARAEAAA==\",\"AAAAAQ0FAAAAAAAAAcITAAA=\"]Ec[\"AAAAASEFAAAAAAFqAQAAAAAAAAAAAAAAAAAFowEAAKsHAADKBwAAwggAAHgMAAA=\",\"AAAAASEFAAA=\"]Dg[\"AAAAAAHDEwAAAAG2AAAAAAAAAAACmxMAAJwTAAAAAAAB7BIAAA==\",\"AAABqwEAAA==\"]Ag[\"AAACmAIAACMDAAA=\",\"\"]Bc[\"\",\"AAAAAAAAAAAAAAAAApsTAACcEwAA\"]Cc[\"AAAAAUEFAAAAAAAAAAAAAdIQAAA=\",\"AAABzQEAAAFBBQAA\"]Ck[\"AAAAAUIFAAAAAAACQRAAANMQAAAAATEMAAA=\",\"AAABzgEAAAFCBQAA\"]Ag[\"AAACnAIAACADAAA=\",\"\"]Dg[\"AAAAAAABLAAAAAAAARIBAAA=\",\"AAAAAAAAAAAAAAAAAAAAA48TAACQEwAAkRMAAA==\"]Ck[\"AAAAAAABXgAAAAGHAQAA\",\"AAAAAAAAAAAAAAAAAAAAApITAACTEwAA\"]Ag[\"AAACmwIAABgDAAA=\",\"\"]Do[\"AAAAAU8HAAACIRAAADQQAAAAAbgLAAABXRAAAA==\",\"AAK9AQAAjQcAAAEOCQAAAAAAAAFdEAAA\"]Ec[\"AAAAAikFAABQBwAAAiIQAAA1EAAAAAF4AQAAAV4QAAA=\",\"AAGfBwAAAcUBAAABKQUAAAAAAAFeEAAA\"]Bg[\"AAAAAAAAAAABVAUAAA==\",\"AAABvAEAAA==\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhYJAAAvEAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAhgJAAAxEAAA\",\"\"]") \ No newline at end of file diff --git a/pr/561/docs/settings.html b/pr/561/docs/settings.html index eb1ebf9ed..1adf3f67d 100644 --- a/pr/561/docs/settings.html +++ b/pr/561/docs/settings.html @@ -1 +1 @@ -Settings

All

Rustdoc settings

Back
\ No newline at end of file +Settings

All

Rustdoc settings

Back
\ No newline at end of file diff --git a/pr/561/docs/src/noq_proto/connection/mod.rs.html b/pr/561/docs/src/noq_proto/connection/mod.rs.html index 77e2b6453..6dd432650 100644 --- a/pr/561/docs/src/noq_proto/connection/mod.rs.html +++ b/pr/561/docs/src/noq_proto/connection/mod.rs.html @@ -1929,15 +1929,15 @@ 1929 } 1930 1931 // Pacing check. -1932 if let Some(delay) = self.path_data_mut(path_id).pacing_delay(bytes_to_send, now) { +1932 if let Some(resume_time) = self.path_data_mut(path_id).pacing_delay(bytes_to_send, now) { 1933 self.timers.set( 1934 Timer::PerPath(path_id, PathTimer::Pacing), -1935 delay, +1935 resume_time, 1936 self.qlog.with_time(now), 1937 ); 1938 // Loss probes and CONNECTION_CLOSE should be subject to pacing, even though 1939 // they are not congestion controlled. -1940 trace!(?space_id, %path_id, "blocked by pacing"); +1940 trace!(?space_id, %path_id, delay = ?(resume_time - now), "blocked by pacing"); 1941 return PathBlocked::Pacing; 1942 } 1943 @@ -2592,4969 +2592,4994 @@ 2592 2593 /// Whether the connection is in the process of being established 2594 /// -2595 /// If this returns `false`, the connection may be either established or closed, signaled by the -2596 /// emission of a `Connected` or `ConnectionLost` message respectively. -2597 pub fn is_handshaking(&self) -> bool { -2598 self.state.is_handshake() -2599 } -2600 -2601 /// Whether the connection is closed -2602 /// -2603 /// Closed connections cannot transport any further data. A connection becomes closed when -2604 /// either peer application intentionally closes it, or when either transport layer detects an -2605 /// error such as a time-out or certificate validation failure. -2606 /// -2607 /// A `ConnectionLost` event is emitted with details when the connection becomes closed. -2608 pub fn is_closed(&self) -> bool { -2609 self.state.is_closed() -2610 } -2611 -2612 /// Whether there is no longer any need to keep the connection around -2613 /// -2614 /// Closed connections become drained after a brief timeout to absorb any remaining in-flight -2615 /// packets from the peer. All drained connections have been closed. -2616 pub fn is_drained(&self) -> bool { -2617 self.state.is_drained() -2618 } -2619 -2620 /// For clients, if the peer accepted the 0-RTT data packets -2621 /// -2622 /// The value is meaningless until after the handshake completes. -2623 pub fn accepted_0rtt(&self) -> bool { -2624 self.crypto_state.accepted_0rtt -2625 } -2626 -2627 /// Whether 0-RTT is/was possible during the handshake -2628 pub fn has_0rtt(&self) -> bool { -2629 self.crypto_state.zero_rtt_enabled -2630 } -2631 -2632 /// Whether there are any pending retransmits -2633 pub fn has_pending_retransmits(&self) -> bool { -2634 !self.spaces[SpaceId::Data].pending.is_empty(&self.streams) -2635 } -2636 -2637 /// Look up whether we're the client or server of this Connection -2638 pub fn side(&self) -> Side { -2639 self.side.side() -2640 } -2641 -2642 /// Get the address observed by the remote over the given path -2643 pub fn path_observed_address(&self, path_id: PathId) -> Result<Option<SocketAddr>, ClosedPath> { -2644 self.path(path_id) -2645 .map(|path_data| { -2646 path_data -2647 .last_observed_addr_report -2648 .as_ref() -2649 .map(|observed| observed.socket_addr()) -2650 }) -2651 .ok_or(ClosedPath { _private: () }) -2652 } -2653 -2654 /// Current best estimate of this connection's latency (round-trip-time) -2655 pub fn rtt(&self, path_id: PathId) -> Option<Duration> { -2656 self.path(path_id).map(|d| d.rtt.get()) -2657 } -2658 -2659 /// Current state of this connection's congestion controller, for debugging purposes -2660 pub fn congestion_state(&self, path_id: PathId) -> Option<&dyn Controller> { -2661 self.path(path_id).map(|d| d.congestion.as_ref()) -2662 } -2663 -2664 /// Modify the number of remotely initiated streams that may be concurrently open -2665 /// -2666 /// No streams may be opened by the peer unless fewer than `count` are already open. Large -2667 /// `count`s increase both minimum and worst-case memory consumption. -2668 pub fn set_max_concurrent_streams(&mut self, dir: Dir, count: VarInt) { -2669 self.streams.set_max_concurrent(dir, count); -2670 // If the limit was reduced, then a flow control update previously deemed insignificant may -2671 // now be significant. -2672 let pending = &mut self.spaces[SpaceId::Data].pending; -2673 self.streams.queue_max_stream_id(pending); -2674 } -2675 -2676 /// Modify the number of open paths allowed when multipath is enabled -2677 /// -2678 /// When reducing the number of concurrent paths this will only affect delaying sending -2679 /// new MAX_PATH_ID frames until fewer than this number of paths are possible. To -2680 /// actively reduce paths they must be closed using [`Connection::close_path`], which -2681 /// can also be used to close not-yet-opened paths. -2682 /// -2683 /// If multipath is not negotiated (see the [`TransportConfig`]) this can not enable -2684 /// multipath and will fail. -2685 pub fn set_max_concurrent_paths( -2686 &mut self, -2687 now: Instant, -2688 count: NonZeroU32, -2689 ) -> Result<(), MultipathNotNegotiated> { -2690 if !self.is_multipath_negotiated() { -2691 return Err(MultipathNotNegotiated { _private: () }); -2692 } -2693 self.max_concurrent_paths = count; -2694 -2695 let in_use_count = self -2696 .local_max_path_id -2697 .next() -2698 .saturating_sub(self.abandoned_paths.len() as u32) -2699 .as_u32(); -2700 let extra_needed = count.get().saturating_sub(in_use_count); -2701 let new_max_path_id = self.local_max_path_id.saturating_add(extra_needed); -2702 -2703 self.set_max_path_id(now, new_max_path_id); -2704 -2705 Ok(()) -2706 } +2595 /// If this returns `false`, the connection may be either established or closed, +2596 /// signaled by the emission of a `Connected` or `ConnectionLost` message respectively. +2597 /// +2598 /// For an established connection this essentially means the handshake is **completed**, +2599 /// but not necessarily yet confirmed. +2600 pub fn is_handshaking(&self) -> bool { +2601 self.state.is_handshake() +2602 } +2603 +2604 /// Whether the connection is closed +2605 /// +2606 /// Closed connections cannot transport any further data. A connection becomes closed when +2607 /// either peer application intentionally closes it, or when either transport layer detects an +2608 /// error such as a time-out or certificate validation failure. +2609 /// +2610 /// A `ConnectionLost` event is emitted with details when the connection becomes closed. +2611 pub fn is_closed(&self) -> bool { +2612 self.state.is_closed() +2613 } +2614 +2615 /// Whether there is no longer any need to keep the connection around +2616 /// +2617 /// Closed connections become drained after a brief timeout to absorb any remaining in-flight +2618 /// packets from the peer. All drained connections have been closed. +2619 pub fn is_drained(&self) -> bool { +2620 self.state.is_drained() +2621 } +2622 +2623 /// For clients, if the peer accepted the 0-RTT data packets +2624 /// +2625 /// The value is meaningless until after the handshake completes. +2626 pub fn accepted_0rtt(&self) -> bool { +2627 self.crypto_state.accepted_0rtt +2628 } +2629 +2630 /// Whether 0-RTT is/was possible during the handshake +2631 pub fn has_0rtt(&self) -> bool { +2632 self.crypto_state.zero_rtt_enabled +2633 } +2634 +2635 /// Whether there are any pending retransmits +2636 pub fn has_pending_retransmits(&self) -> bool { +2637 !self.spaces[SpaceId::Data].pending.is_empty(&self.streams) +2638 } +2639 +2640 /// Look up whether we're the client or server of this Connection +2641 pub fn side(&self) -> Side { +2642 self.side.side() +2643 } +2644 +2645 /// Get the address observed by the remote over the given path +2646 pub fn path_observed_address(&self, path_id: PathId) -> Result<Option<SocketAddr>, ClosedPath> { +2647 self.path(path_id) +2648 .map(|path_data| { +2649 path_data +2650 .last_observed_addr_report +2651 .as_ref() +2652 .map(|observed| observed.socket_addr()) +2653 }) +2654 .ok_or(ClosedPath { _private: () }) +2655 } +2656 +2657 /// Current best estimate of this connection's latency (round-trip-time) +2658 pub fn rtt(&self, path_id: PathId) -> Option<Duration> { +2659 self.path(path_id).map(|d| d.rtt.get()) +2660 } +2661 +2662 /// Current state of this connection's congestion controller, for debugging purposes +2663 pub fn congestion_state(&self, path_id: PathId) -> Option<&dyn Controller> { +2664 self.path(path_id).map(|d| d.congestion.as_ref()) +2665 } +2666 +2667 /// Modify the number of remotely initiated streams that may be concurrently open +2668 /// +2669 /// No streams may be opened by the peer unless fewer than `count` are already open. Large +2670 /// `count`s increase both minimum and worst-case memory consumption. +2671 pub fn set_max_concurrent_streams(&mut self, dir: Dir, count: VarInt) { +2672 self.streams.set_max_concurrent(dir, count); +2673 // If the limit was reduced, then a flow control update previously deemed insignificant may +2674 // now be significant. +2675 let pending = &mut self.spaces[SpaceId::Data].pending; +2676 self.streams.queue_max_stream_id(pending); +2677 } +2678 +2679 /// Modify the number of open paths allowed when multipath is enabled +2680 /// +2681 /// When reducing the number of concurrent paths this will only affect delaying sending +2682 /// new MAX_PATH_ID frames until fewer than this number of paths are possible. To +2683 /// actively reduce paths they must be closed using [`Connection::close_path`], which +2684 /// can also be used to close not-yet-opened paths. +2685 /// +2686 /// If multipath is not negotiated (see the [`TransportConfig`]) this can not enable +2687 /// multipath and will fail. +2688 pub fn set_max_concurrent_paths( +2689 &mut self, +2690 now: Instant, +2691 count: NonZeroU32, +2692 ) -> Result<(), MultipathNotNegotiated> { +2693 if !self.is_multipath_negotiated() { +2694 return Err(MultipathNotNegotiated { _private: () }); +2695 } +2696 self.max_concurrent_paths = count; +2697 +2698 let in_use_count = self +2699 .local_max_path_id +2700 .next() +2701 .saturating_sub(self.abandoned_paths.len() as u32) +2702 .as_u32(); +2703 let extra_needed = count.get().saturating_sub(in_use_count); +2704 let new_max_path_id = self.local_max_path_id.saturating_add(extra_needed); +2705 +2706 self.set_max_path_id(now, new_max_path_id); 2707 -2708 /// If needed, issues a new MAX_PATH_ID frame and new CIDs for any newly allowed paths -2709 fn set_max_path_id(&mut self, now: Instant, max_path_id: PathId) { -2710 if max_path_id <= self.local_max_path_id { -2711 return; -2712 } -2713 -2714 self.local_max_path_id = max_path_id; -2715 self.spaces[SpaceId::Data].pending.max_path_id = true; +2708 Ok(()) +2709 } +2710 +2711 /// If needed, issues a new MAX_PATH_ID frame and new CIDs for any newly allowed paths +2712 fn set_max_path_id(&mut self, now: Instant, max_path_id: PathId) { +2713 if max_path_id <= self.local_max_path_id { +2714 return; +2715 } 2716 -2717 self.issue_first_path_cids(now); -2718 } +2717 self.local_max_path_id = max_path_id; +2718 self.spaces[SpaceId::Data].pending.max_path_id = true; 2719 -2720 /// Current number of remotely initiated streams that may be concurrently open -2721 /// -2722 /// If the target for this limit is reduced using [`set_max_concurrent_streams`](Self::set_max_concurrent_streams), -2723 /// it will not change immediately, even if fewer streams are open. Instead, it will -2724 /// decrement by one for each time a remotely initiated stream of matching directionality is closed. -2725 pub fn max_concurrent_streams(&self, dir: Dir) -> u64 { -2726 self.streams.max_concurrent(dir) -2727 } -2728 -2729 /// See [`TransportConfig::send_window()`] -2730 pub fn set_send_window(&mut self, send_window: u64) { -2731 self.streams.set_send_window(send_window); -2732 } -2733 -2734 /// See [`TransportConfig::receive_window()`] -2735 pub fn set_receive_window(&mut self, receive_window: VarInt) { -2736 if self.streams.set_receive_window(receive_window) { -2737 self.spaces[SpaceId::Data].pending.max_data = true; -2738 } -2739 } -2740 -2741 /// Whether the Multipath for QUIC extension is enabled. -2742 /// -2743 /// Multipath is only enabled after the handshake is completed and if it was enabled by both -2744 /// peers. -2745 pub fn is_multipath_negotiated(&self) -> bool { -2746 !self.is_handshaking() -2747 && self.config.max_concurrent_multipath_paths.is_some() -2748 && self.peer_params.initial_max_path_id.is_some() -2749 } -2750 -2751 fn on_ack_received( -2752 &mut self, -2753 now: Instant, -2754 space: SpaceId, -2755 ack: frame::Ack, -2756 ) -> Result<(), TransportError> { -2757 // All ACKs are referencing path 0 -2758 let path = PathId::ZERO; -2759 self.inner_on_ack_received(now, space, path, ack) -2760 } -2761 -2762 fn on_path_ack_received( -2763 &mut self, -2764 now: Instant, -2765 space: SpaceId, -2766 path_ack: frame::PathAck, -2767 ) -> Result<(), TransportError> { -2768 let (ack, path) = path_ack.into_ack(); -2769 self.inner_on_ack_received(now, space, path, ack) -2770 } -2771 -2772 /// Handles an ACK frame acknowledging packets sent on *path*. -2773 fn inner_on_ack_received( -2774 &mut self, -2775 now: Instant, -2776 space: SpaceId, -2777 path: PathId, -2778 ack: frame::Ack, -2779 ) -> Result<(), TransportError> { -2780 if !self.spaces[space].number_spaces.contains_key(&path) -2781 && self.abandoned_paths.contains(&path) -2782 { -2783 // See also -2784 // https://www.ietf.org/archive/id/draft-ietf-quic-multipath-21.html#section-3.4.3-3 -2785 // > When an endpoint finally deletes all state associated with the path [...] -2786 // > PATH_ACK frames received with an abandoned path ID are silently ignored, -2787 // > as specified in Section 4. -2788 trace!("silently ignoring PATH_ACK on discarded path"); -2789 return Ok(()); -2790 } -2791 if ack.largest >= self.spaces[space].for_path(path).next_packet_number { -2792 return Err(TransportError::PROTOCOL_VIOLATION("unsent packet acked")); +2720 self.issue_first_path_cids(now); +2721 } +2722 +2723 /// Current number of remotely initiated streams that may be concurrently open +2724 /// +2725 /// If the target for this limit is reduced using [`set_max_concurrent_streams`](Self::set_max_concurrent_streams), +2726 /// it will not change immediately, even if fewer streams are open. Instead, it will +2727 /// decrement by one for each time a remotely initiated stream of matching directionality is closed. +2728 pub fn max_concurrent_streams(&self, dir: Dir) -> u64 { +2729 self.streams.max_concurrent(dir) +2730 } +2731 +2732 /// See [`TransportConfig::send_window()`] +2733 pub fn set_send_window(&mut self, send_window: u64) { +2734 self.streams.set_send_window(send_window); +2735 } +2736 +2737 /// See [`TransportConfig::receive_window()`] +2738 pub fn set_receive_window(&mut self, receive_window: VarInt) { +2739 if self.streams.set_receive_window(receive_window) { +2740 self.spaces[SpaceId::Data].pending.max_data = true; +2741 } +2742 } +2743 +2744 /// Whether the Multipath for QUIC extension is enabled. +2745 /// +2746 /// Multipath is only enabled after the handshake is completed and if it was enabled by both +2747 /// peers. +2748 pub fn is_multipath_negotiated(&self) -> bool { +2749 !self.is_handshaking() +2750 && self.config.max_concurrent_multipath_paths.is_some() +2751 && self.peer_params.initial_max_path_id.is_some() +2752 } +2753 +2754 fn on_ack_received( +2755 &mut self, +2756 now: Instant, +2757 space: SpaceId, +2758 ack: frame::Ack, +2759 ) -> Result<(), TransportError> { +2760 // All ACKs are referencing path 0 +2761 let path = PathId::ZERO; +2762 self.inner_on_ack_received(now, space, path, ack) +2763 } +2764 +2765 fn on_path_ack_received( +2766 &mut self, +2767 now: Instant, +2768 space: SpaceId, +2769 path_ack: frame::PathAck, +2770 ) -> Result<(), TransportError> { +2771 let (ack, path) = path_ack.into_ack(); +2772 self.inner_on_ack_received(now, space, path, ack) +2773 } +2774 +2775 /// Handles an ACK frame acknowledging packets sent on *path*. +2776 fn inner_on_ack_received( +2777 &mut self, +2778 now: Instant, +2779 space: SpaceId, +2780 path: PathId, +2781 ack: frame::Ack, +2782 ) -> Result<(), TransportError> { +2783 if !self.spaces[space].number_spaces.contains_key(&path) +2784 && self.abandoned_paths.contains(&path) +2785 { +2786 // See also +2787 // https://www.ietf.org/archive/id/draft-ietf-quic-multipath-21.html#section-3.4.3-3 +2788 // > When an endpoint finally deletes all state associated with the path [...] +2789 // > PATH_ACK frames received with an abandoned path ID are silently ignored, +2790 // > as specified in Section 4. +2791 trace!("silently ignoring PATH_ACK on discarded path"); +2792 return Ok(()); 2793 } -2794 let new_largest = { -2795 let space = &mut self.spaces[space].for_path(path); -2796 if space.largest_acked_packet.is_none_or(|pn| ack.largest > pn) { -2797 space.largest_acked_packet = Some(ack.largest); -2798 if let Some(info) = space.sent_packets.get(ack.largest) { -2799 // This should always succeed, but a misbehaving peer might ACK a packet we -2800 // haven't sent. At worst, that will result in us spuriously reducing the -2801 // congestion window. -2802 space.largest_acked_packet_sent = info.time_sent; -2803 } -2804 true -2805 } else { -2806 false -2807 } -2808 }; -2809 -2810 if self.detect_spurious_loss(&ack, space, path) { -2811 self.path_data_mut(path) -2812 .congestion -2813 .on_spurious_congestion_event(); -2814 } -2815 -2816 // Avoid DoS from unreasonably huge ack ranges by filtering out just the new acks. -2817 let mut newly_acked = ArrayRangeSet::new(); -2818 for range in ack.iter() { -2819 self.spaces[space].for_path(path).check_ack(range.clone())?; -2820 for (pn, _) in self.spaces[space] -2821 .for_path(path) -2822 .sent_packets -2823 .iter_range(range) -2824 { -2825 newly_acked.insert_one(pn); -2826 } -2827 } -2828 -2829 if newly_acked.is_empty() { -2830 return Ok(()); -2831 } -2832 -2833 let mut ack_eliciting_acked = false; -2834 for packet in newly_acked.elts() { -2835 if let Some(info) = self.spaces[space].for_path(path).take(packet) { -2836 for (acked_path_id, acked_pn) in info.largest_acked.iter() { -2837 // Assume ACKs for all packets below the largest acknowledged in -2838 // `packet` have been received. This can cause the peer to spuriously -2839 // retransmit if some of our earlier ACKs were lost, but allows for -2840 // simpler state tracking. See discussion at -2841 // https://www.rfc-editor.org/rfc/rfc9000.html#name-limiting-ranges-by-tracking -2842 if let Some(pns) = self.spaces[space].path_space_mut(*acked_path_id) { -2843 pns.pending_acks.subtract_below(*acked_pn); -2844 } -2845 } -2846 ack_eliciting_acked |= info.ack_eliciting; -2847 -2848 // Notify MTU discovery that a packet was acked, because it might be an MTU probe -2849 let path_data = self.path_data_mut(path); -2850 let mtu_updated = path_data.mtud.on_acked(space.kind(), packet, info.size); -2851 if mtu_updated { -2852 path_data -2853 .congestion -2854 .on_mtu_update(path_data.mtud.current_mtu()); -2855 } -2856 -2857 // Notify ack frequency that a packet was acked, because it might contain an ACK_FREQUENCY frame -2858 self.ack_frequency.on_acked(path, packet); +2794 if ack.largest >= self.spaces[space].for_path(path).next_packet_number { +2795 return Err(TransportError::PROTOCOL_VIOLATION("unsent packet acked")); +2796 } +2797 let new_largest = { +2798 let space = &mut self.spaces[space].for_path(path); +2799 if space.largest_acked_packet.is_none_or(|pn| ack.largest > pn) { +2800 space.largest_acked_packet = Some(ack.largest); +2801 if let Some(info) = space.sent_packets.get(ack.largest) { +2802 // This should always succeed, but a misbehaving peer might ACK a packet we +2803 // haven't sent. At worst, that will result in us spuriously reducing the +2804 // congestion window. +2805 space.largest_acked_packet_sent = info.time_sent; +2806 } +2807 true +2808 } else { +2809 false +2810 } +2811 }; +2812 +2813 if self.detect_spurious_loss(&ack, space, path) { +2814 self.path_data_mut(path) +2815 .congestion +2816 .on_spurious_congestion_event(); +2817 } +2818 +2819 // Avoid DoS from unreasonably huge ack ranges by filtering out just the new acks. +2820 let mut newly_acked = ArrayRangeSet::new(); +2821 for range in ack.iter() { +2822 self.spaces[space].for_path(path).check_ack(range.clone())?; +2823 for (pn, _) in self.spaces[space] +2824 .for_path(path) +2825 .sent_packets +2826 .iter_range(range) +2827 { +2828 newly_acked.insert_one(pn); +2829 } +2830 } +2831 +2832 if newly_acked.is_empty() { +2833 return Ok(()); +2834 } +2835 +2836 let mut ack_eliciting_acked = false; +2837 for packet in newly_acked.elts() { +2838 if let Some(info) = self.spaces[space].for_path(path).take(packet) { +2839 for (acked_path_id, acked_pn) in info.largest_acked.iter() { +2840 // Assume ACKs for all packets below the largest acknowledged in +2841 // `packet` have been received. This can cause the peer to spuriously +2842 // retransmit if some of our earlier ACKs were lost, but allows for +2843 // simpler state tracking. See discussion at +2844 // https://www.rfc-editor.org/rfc/rfc9000.html#name-limiting-ranges-by-tracking +2845 if let Some(pns) = self.spaces[space].path_space_mut(*acked_path_id) { +2846 pns.pending_acks.subtract_below(*acked_pn); +2847 } +2848 } +2849 ack_eliciting_acked |= info.ack_eliciting; +2850 +2851 // Notify MTU discovery that a packet was acked, because it might be an MTU probe +2852 let path_data = self.path_data_mut(path); +2853 let mtu_updated = path_data.mtud.on_acked(space.kind(), packet, info.size); +2854 if mtu_updated { +2855 path_data +2856 .congestion +2857 .on_mtu_update(path_data.mtud.current_mtu()); +2858 } 2859 -2860 self.on_packet_acked(now, path, info); -2861 } -2862 } -2863 -2864 let largest_ackd = self.spaces[space].for_path(path).largest_acked_packet; -2865 let app_limited = self.app_limited; -2866 let path_data = self.path_data_mut(path); -2867 let in_flight = path_data.in_flight.bytes; -2868 -2869 path_data -2870 .congestion -2871 .on_end_acks(now, in_flight, app_limited, largest_ackd); -2872 -2873 if new_largest && ack_eliciting_acked { -2874 let ack_delay = if space != SpaceId::Data { -2875 Duration::from_micros(0) -2876 } else { -2877 cmp::min( -2878 self.ack_frequency.peer_max_ack_delay, -2879 Duration::from_micros(ack.delay << self.peer_params.ack_delay_exponent.0), -2880 ) -2881 }; -2882 let rtt = now.saturating_duration_since( -2883 self.spaces[space].for_path(path).largest_acked_packet_sent, -2884 ); -2885 -2886 let next_pn = self.spaces[space].for_path(path).next_packet_number; -2887 let path_data = self.path_data_mut(path); -2888 // TODO(@divma): should be a method of path, should be contained in a single place -2889 path_data.rtt.update(ack_delay, rtt); -2890 if path_data.first_packet_after_rtt_sample.is_none() { -2891 path_data.first_packet_after_rtt_sample = Some((space.kind(), next_pn)); -2892 } -2893 } -2894 -2895 // Must be called before crypto/pto_count are clobbered -2896 self.detect_lost_packets(now, space, path, true); +2860 // Notify ack frequency that a packet was acked, because it might contain an ACK_FREQUENCY frame +2861 self.ack_frequency.on_acked(path, packet); +2862 +2863 self.on_packet_acked(now, path, info); +2864 } +2865 } +2866 +2867 let largest_ackd = self.spaces[space].for_path(path).largest_acked_packet; +2868 let app_limited = self.app_limited; +2869 let path_data = self.path_data_mut(path); +2870 let in_flight = path_data.in_flight.bytes; +2871 +2872 path_data +2873 .congestion +2874 .on_end_acks(now, in_flight, app_limited, largest_ackd); +2875 +2876 if new_largest && ack_eliciting_acked { +2877 let ack_delay = if space != SpaceId::Data { +2878 Duration::from_micros(0) +2879 } else { +2880 cmp::min( +2881 self.ack_frequency.peer_max_ack_delay, +2882 Duration::from_micros(ack.delay << self.peer_params.ack_delay_exponent.0), +2883 ) +2884 }; +2885 let rtt = now.saturating_duration_since( +2886 self.spaces[space].for_path(path).largest_acked_packet_sent, +2887 ); +2888 +2889 let next_pn = self.spaces[space].for_path(path).next_packet_number; +2890 let path_data = self.path_data_mut(path); +2891 // TODO(@divma): should be a method of path, should be contained in a single place +2892 path_data.rtt.update(ack_delay, rtt); +2893 if path_data.first_packet_after_rtt_sample.is_none() { +2894 path_data.first_packet_after_rtt_sample = Some((space.kind(), next_pn)); +2895 } +2896 } 2897 -2898 // If the peer did not complete the handshake address validation the ACK could be -2899 // spoofed, e.g. in the Initial space. Setting the pto_count back to 0 removes the -2900 // exponential backoff from the PTO timer and would result in too many tail-loss -2901 // probes being sent. -2902 if self.peer_completed_handshake_address_validation() { -2903 self.path_data_mut(path).pto_count = 0; -2904 } -2905 -2906 // Explicit congestion notification -2907 // TODO(@divma): this code is a good example of logic that should be contained in a single -2908 // place but it's split between the path data and the packet number space data, we should -2909 // find a way to make this work without two lookups -2910 if self.path_data(path).sending_ecn { -2911 if let Some(ecn) = ack.ecn { -2912 // We only examine ECN counters from ACKs that we are certain we received in transmit -2913 // order, allowing us to compute an increase in ECN counts to compare against the number -2914 // of newly acked packets that remains well-defined in the presence of arbitrary packet -2915 // reordering. -2916 if new_largest { -2917 let sent = self.spaces[space].for_path(path).largest_acked_packet_sent; -2918 self.process_ecn(now, space, path, newly_acked.len() as u64, ecn, sent); -2919 } -2920 } else { -2921 // We always start out sending ECN, so any ack that doesn't acknowledge it disables it. -2922 debug!("ECN not acknowledged by peer"); -2923 self.path_data_mut(path).sending_ecn = false; -2924 } -2925 } -2926 -2927 self.set_loss_detection_timer(now, path); -2928 Ok(()) -2929 } -2930 -2931 fn detect_spurious_loss(&mut self, ack: &frame::Ack, space: SpaceId, path: PathId) -> bool { -2932 let lost_packets = &mut self.spaces[space].for_path(path).lost_packets; +2898 // Must be called before crypto/pto_count are clobbered +2899 self.detect_lost_packets(now, space, path, true); +2900 +2901 // If the peer did not complete the handshake address validation the ACK could be +2902 // spoofed, e.g. in the Initial space. Setting the pto_count back to 0 removes the +2903 // exponential backoff from the PTO timer and would result in too many tail-loss +2904 // probes being sent. +2905 if self.peer_completed_handshake_address_validation() { +2906 self.path_data_mut(path).pto_count = 0; +2907 } +2908 +2909 // Explicit congestion notification +2910 // TODO(@divma): this code is a good example of logic that should be contained in a single +2911 // place but it's split between the path data and the packet number space data, we should +2912 // find a way to make this work without two lookups +2913 if self.path_data(path).sending_ecn { +2914 if let Some(ecn) = ack.ecn { +2915 // We only examine ECN counters from ACKs that we are certain we received in transmit +2916 // order, allowing us to compute an increase in ECN counts to compare against the number +2917 // of newly acked packets that remains well-defined in the presence of arbitrary packet +2918 // reordering. +2919 if new_largest { +2920 let sent = self.spaces[space].for_path(path).largest_acked_packet_sent; +2921 self.process_ecn(now, space, path, newly_acked.len() as u64, ecn, sent); +2922 } +2923 } else { +2924 // We always start out sending ECN, so any ack that doesn't acknowledge it disables it. +2925 debug!("ECN not acknowledged by peer"); +2926 self.path_data_mut(path).sending_ecn = false; +2927 } +2928 } +2929 +2930 self.set_loss_detection_timer(now, path); +2931 Ok(()) +2932 } 2933 -2934 if lost_packets.is_empty() { -2935 return false; -2936 } -2937 -2938 for range in ack.iter() { -2939 let spurious_losses: Vec<u64> = lost_packets -2940 .iter_range(range.clone()) -2941 .map(|(pn, _info)| pn) -2942 .collect(); -2943 -2944 for pn in spurious_losses { -2945 lost_packets.remove(pn); -2946 } -2947 } -2948 -2949 // If this ACK frame acknowledged all deemed lost packets, -2950 // then we have raised a spurious congestion event in the past. -2951 // We cannot conclude when there are remaining packets, -2952 // but future ACK frames might indicate a spurious loss detection. -2953 lost_packets.is_empty() -2954 } -2955 -2956 /// Drain lost packets that we reasonably think will never arrive -2957 /// -2958 /// The current criterion is copied from `msquic`: -2959 /// discard packets that were sent earlier than 2 probe timeouts ago. -2960 fn drain_lost_packets(&mut self, now: Instant, space: SpaceId, path: PathId) { -2961 let two_pto = 2 * self.path_data(path).rtt.pto_base(); -2962 -2963 let lost_packets = &mut self.spaces[space].for_path(path).lost_packets; -2964 lost_packets.retain(|_pn, info| now.saturating_duration_since(info.time_sent) <= two_pto); -2965 } -2966 -2967 /// Process a new ECN block from an in-order ACK -2968 fn process_ecn( -2969 &mut self, -2970 now: Instant, -2971 space: SpaceId, -2972 path: PathId, -2973 newly_acked: u64, -2974 ecn: frame::EcnCounts, -2975 largest_sent_time: Instant, -2976 ) { -2977 match self.spaces[space] -2978 .for_path(path) -2979 .detect_ecn(newly_acked, ecn) -2980 { -2981 Err(e) => { -2982 debug!("halting ECN due to verification failure: {}", e); -2983 -2984 self.path_data_mut(path).sending_ecn = false; -2985 // Wipe out the existing value because it might be garbage and could interfere with -2986 // future attempts to use ECN on new paths. -2987 self.spaces[space].for_path(path).ecn_feedback = frame::EcnCounts::ZERO; -2988 } -2989 Ok(false) => {} -2990 Ok(true) => { -2991 self.path_stats.for_path(path).congestion_events += 1; -2992 self.path_data_mut(path).congestion.on_congestion_event( -2993 now, -2994 largest_sent_time, -2995 false, -2996 true, -2997 0, -2998 ); -2999 } -3000 } -3001 } -3002 -3003 // Not timing-aware, so it's safe to call this for inferred acks, such as arise from -3004 // high-latency handshakes -3005 fn on_packet_acked(&mut self, now: Instant, path_id: PathId, info: SentPacket) { -3006 let app_limited = self.app_limited; -3007 let path = self.path_data_mut(path_id); -3008 path.remove_in_flight(&info); -3009 if info.ack_eliciting && info.path_generation == path.generation() { -3010 // Only pass ACKs to the congestion controller if it belongs to this exact -3011 // generation of the path. Otherwise we might be feeding ACKs from the previous -3012 // 4-tuple into our congestion controller. -3013 let rtt = path.rtt; -3014 path.congestion -3015 .on_ack(now, info.time_sent, info.size.into(), app_limited, &rtt); -3016 } -3017 -3018 // Update state for confirmed delivery of frames -3019 if let Some(retransmits) = info.retransmits.get() { -3020 for (id, _) in retransmits.reset_stream.iter() { -3021 self.streams.reset_acked(*id); -3022 } -3023 } -3024 -3025 for frame in info.stream_frames { -3026 self.streams.received_ack_of(frame); -3027 } -3028 } -3029 -3030 fn set_key_discard_timer(&mut self, now: Instant, space: SpaceKind) { -3031 let start = if self.crypto_state.has_keys(EncryptionLevel::ZeroRtt) { -3032 now -3033 } else { -3034 self.crypto_state -3035 .prev_crypto -3036 .as_ref() -3037 .expect("no previous keys") -3038 .end_packet +2934 fn detect_spurious_loss(&mut self, ack: &frame::Ack, space: SpaceId, path: PathId) -> bool { +2935 let lost_packets = &mut self.spaces[space].for_path(path).lost_packets; +2936 +2937 if lost_packets.is_empty() { +2938 return false; +2939 } +2940 +2941 for range in ack.iter() { +2942 let spurious_losses: Vec<u64> = lost_packets +2943 .iter_range(range.clone()) +2944 .map(|(pn, _info)| pn) +2945 .collect(); +2946 +2947 for pn in spurious_losses { +2948 lost_packets.remove(pn); +2949 } +2950 } +2951 +2952 // If this ACK frame acknowledged all deemed lost packets, +2953 // then we have raised a spurious congestion event in the past. +2954 // We cannot conclude when there are remaining packets, +2955 // but future ACK frames might indicate a spurious loss detection. +2956 lost_packets.is_empty() +2957 } +2958 +2959 /// Drain lost packets that we reasonably think will never arrive +2960 /// +2961 /// The current criterion is copied from `msquic`: +2962 /// discard packets that were sent earlier than 2 probe timeouts ago. +2963 fn drain_lost_packets(&mut self, now: Instant, space: SpaceId, path: PathId) { +2964 let two_pto = 2 * self.path_data(path).rtt.pto_base(); +2965 +2966 let lost_packets = &mut self.spaces[space].for_path(path).lost_packets; +2967 lost_packets.retain(|_pn, info| now.saturating_duration_since(info.time_sent) <= two_pto); +2968 } +2969 +2970 /// Process a new ECN block from an in-order ACK +2971 fn process_ecn( +2972 &mut self, +2973 now: Instant, +2974 space: SpaceId, +2975 path: PathId, +2976 newly_acked: u64, +2977 ecn: frame::EcnCounts, +2978 largest_sent_time: Instant, +2979 ) { +2980 match self.spaces[space] +2981 .for_path(path) +2982 .detect_ecn(newly_acked, ecn) +2983 { +2984 Err(e) => { +2985 debug!("halting ECN due to verification failure: {}", e); +2986 +2987 self.path_data_mut(path).sending_ecn = false; +2988 // Wipe out the existing value because it might be garbage and could interfere with +2989 // future attempts to use ECN on new paths. +2990 self.spaces[space].for_path(path).ecn_feedback = frame::EcnCounts::ZERO; +2991 } +2992 Ok(false) => {} +2993 Ok(true) => { +2994 self.path_stats.for_path(path).congestion_events += 1; +2995 self.path_data_mut(path).congestion.on_congestion_event( +2996 now, +2997 largest_sent_time, +2998 false, +2999 true, +3000 0, +3001 ); +3002 } +3003 } +3004 } +3005 +3006 // Not timing-aware, so it's safe to call this for inferred acks, such as arise from +3007 // high-latency handshakes +3008 fn on_packet_acked(&mut self, now: Instant, path_id: PathId, info: SentPacket) { +3009 let app_limited = self.app_limited; +3010 let path = self.path_data_mut(path_id); +3011 path.remove_in_flight(&info); +3012 if info.ack_eliciting && info.path_generation == path.generation() { +3013 // Only pass ACKs to the congestion controller if it belongs to this exact +3014 // generation of the path. Otherwise we might be feeding ACKs from the previous +3015 // 4-tuple into our congestion controller. +3016 let rtt = path.rtt; +3017 path.congestion +3018 .on_ack(now, info.time_sent, info.size.into(), app_limited, &rtt); +3019 } +3020 +3021 // Update state for confirmed delivery of frames +3022 if let Some(retransmits) = info.retransmits.get() { +3023 for (id, _) in retransmits.reset_stream.iter() { +3024 self.streams.reset_acked(*id); +3025 } +3026 } +3027 +3028 for frame in info.stream_frames { +3029 self.streams.received_ack_of(frame); +3030 } +3031 } +3032 +3033 fn set_key_discard_timer(&mut self, now: Instant, space: SpaceKind) { +3034 let start = if self.crypto_state.has_keys(EncryptionLevel::ZeroRtt) { +3035 now +3036 } else { +3037 self.crypto_state +3038 .prev_crypto 3039 .as_ref() -3040 .expect("update not acknowledged yet") -3041 .1 -3042 }; -3043 -3044 // QUIC-MULTIPATH § 2.5 Key Phase Update Process: use largest PTO of all paths. -3045 self.timers.set( -3046 Timer::Conn(ConnTimer::KeyDiscard), -3047 start + self.max_pto_for_space(space) * 3, -3048 self.qlog.with_time(now), -3049 ); -3050 } -3051 -3052 /// Handle a [`PathTimer::LossDetection`] timeout. -3053 /// -3054 /// This timer expires for two reasons: -3055 /// - An ACK-eliciting packet we sent should be considered lost. -3056 /// - The PTO may have expired and a tail-loss probe needs to be scheduled. -3057 /// -3058 /// The former needs us to schedule re-transmission of the lost data. -3059 /// -3060 /// The latter means we have not received an ACK for an ack-eliciting packet we sent -3061 /// within the PTO time-window. We need to schedule a tail-loss probe, an ack-eliciting -3062 /// packet, to try and elicit new acknowledgements. These new acknowledgements will -3063 /// indicate whether the previously sent packets were lost or not. -3064 fn on_loss_detection_timeout(&mut self, now: Instant, path_id: PathId) { -3065 if let Some((_, pn_space)) = self.loss_time_and_space(path_id) { -3066 // Time threshold loss Detection -3067 self.detect_lost_packets(now, pn_space, path_id, false); -3068 self.set_loss_detection_timer(now, path_id); -3069 return; -3070 } -3071 -3072 let Some((_, space)) = self.pto_time_and_space(now, path_id) else { -3073 error!(%path_id, "PTO expired while unset"); -3074 return; -3075 }; -3076 trace!( -3077 in_flight = self.path_data(path_id).in_flight.bytes, -3078 count = self.path_data(path_id).pto_count, -3079 ?space, -3080 %path_id, -3081 "PTO fired" -3082 ); -3083 -3084 let count = match self.path_data(path_id).in_flight.ack_eliciting { -3085 // A PTO when we're not expecting any ACKs must be due to handshake -3086 // anti-amplification deadlock prevention. -3087 0 => { -3088 debug_assert!(!self.peer_completed_handshake_address_validation()); -3089 1 -3090 } -3091 // Conventional loss probe -3092 _ => 2, -3093 }; -3094 let pns = self.spaces[space].for_path(path_id); -3095 pns.loss_probes = pns.loss_probes.saturating_add(count); -3096 let path_data = self.path_data_mut(path_id); -3097 path_data.pto_count = path_data.pto_count.saturating_add(1); -3098 self.set_loss_detection_timer(now, path_id); -3099 } -3100 -3101 /// Detect any lost packets -3102 /// -3103 /// There are two cases in which we detects lost packets: -3104 /// -3105 /// - We received an ACK packet. -3106 /// - The [`PathTimer::LossDetection`] timer expired. So there is an un-acknowledged packet -3107 /// that was followed by an acknowledged packet. The loss timer for this -3108 /// un-acknowledged packet expired and we need to detect that packet as lost. -3109 /// -3110 /// Packets are lost if they are both (See RFC9002 §6.1): -3111 /// -3112 /// - Unacknowledged, in flight and sent prior to an acknowledged packet. -3113 /// - Old enough by either: -3114 /// - Having a packet number [`TransportConfig::packet_threshold`] lower then the last -3115 /// acknowledged packet. -3116 /// - Being sent [`TransportConfig::time_threshold`] * RTT in the past. -3117 fn detect_lost_packets( -3118 &mut self, -3119 now: Instant, -3120 pn_space: SpaceId, -3121 path_id: PathId, -3122 due_to_ack: bool, -3123 ) { -3124 let mut lost_packets = Vec::<u64>::new(); -3125 let mut lost_mtu_probe = None; -3126 let mut in_persistent_congestion = false; -3127 let mut size_of_lost_packets = 0u64; -3128 self.spaces[pn_space].for_path(path_id).loss_time = None; -3129 -3130 // Find all the lost packets, populating all variables initialised above. -3131 -3132 let path = self.path_data(path_id); -3133 let in_flight_mtu_probe = path.mtud.in_flight_mtu_probe(); -3134 let loss_delay = path -3135 .rtt -3136 .conservative() -3137 .mul_f32(self.config.time_threshold) -3138 .max(TIMER_GRANULARITY); -3139 let first_packet_after_rtt_sample = path.first_packet_after_rtt_sample; -3140 -3141 let largest_acked_packet = self.spaces[pn_space] -3142 .for_path(path_id) -3143 .largest_acked_packet -3144 .expect("detect_lost_packets only to be called if path received at least one ACK"); -3145 let packet_threshold = self.config.packet_threshold as u64; -3146 -3147 // InPersistentCongestion: Determine if all packets in the time period before the newest -3148 // lost packet, including the edges, are marked lost. PTO computation must always -3149 // include max ACK delay, i.e. operate as if in Data space (see RFC9001 §7.6.1). -3150 let congestion_period = self -3151 .pto(SpaceKind::Data, path_id) -3152 .saturating_mul(self.config.persistent_congestion_threshold); -3153 let mut persistent_congestion_start: Option<Instant> = None; -3154 let mut prev_packet = None; -3155 let space = self.spaces[pn_space].for_path(path_id); -3156 -3157 for (packet, info) in space.sent_packets.iter_range(0..largest_acked_packet) { -3158 if prev_packet != Some(packet.wrapping_sub(1)) { -3159 // An intervening packet was acknowledged -3160 persistent_congestion_start = None; -3161 } -3162 -3163 // Packets sent before now - loss_delay are deemed lost. -3164 // However, we avoid subtraction as it can panic and there's no -3165 // saturating equivalent of this subtraction operation with a Duration. -3166 let packet_too_old = now.saturating_duration_since(info.time_sent) >= loss_delay; -3167 if packet_too_old || largest_acked_packet >= packet + packet_threshold { -3168 // The packet should be declared lost. -3169 if Some(packet) == in_flight_mtu_probe { -3170 // Lost MTU probes are not included in `lost_packets`, because they -3171 // should not trigger a congestion control response -3172 lost_mtu_probe = in_flight_mtu_probe; -3173 } else { -3174 lost_packets.push(packet); -3175 size_of_lost_packets += info.size as u64; -3176 if info.ack_eliciting && due_to_ack { -3177 match persistent_congestion_start { -3178 // Two ACK-eliciting packets lost more than -3179 // congestion_period apart, with no ACKed packets in between -3180 Some(start) if info.time_sent - start > congestion_period => { -3181 in_persistent_congestion = true; -3182 } -3183 // Persistent congestion must start after the first RTT sample -3184 None if first_packet_after_rtt_sample -3185 .is_some_and(|x| x < (pn_space.kind(), packet)) => -3186 { -3187 persistent_congestion_start = Some(info.time_sent); -3188 } -3189 _ => {} -3190 } -3191 } -3192 } -3193 } else { -3194 // The packet should not yet be declared lost. -3195 if space.loss_time.is_none() { -3196 // Since we iterate in order the lowest packet number's loss time will -3197 // always be the earliest. -3198 space.loss_time = Some(info.time_sent + loss_delay); -3199 } -3200 persistent_congestion_start = None; -3201 } -3202 -3203 prev_packet = Some(packet); -3204 } +3040 .expect("no previous keys") +3041 .end_packet +3042 .as_ref() +3043 .expect("update not acknowledged yet") +3044 .1 +3045 }; +3046 +3047 // QUIC-MULTIPATH § 2.5 Key Phase Update Process: use largest PTO of all paths. +3048 self.timers.set( +3049 Timer::Conn(ConnTimer::KeyDiscard), +3050 start + self.max_pto_for_space(space) * 3, +3051 self.qlog.with_time(now), +3052 ); +3053 } +3054 +3055 /// Handle a [`PathTimer::LossDetection`] timeout. +3056 /// +3057 /// This timer expires for two reasons: +3058 /// - An ACK-eliciting packet we sent should be considered lost. +3059 /// - The PTO may have expired and a tail-loss probe needs to be scheduled. +3060 /// +3061 /// The former needs us to schedule re-transmission of the lost data. +3062 /// +3063 /// The latter means we have not received an ACK for an ack-eliciting packet we sent +3064 /// within the PTO time-window. We need to schedule a tail-loss probe, an ack-eliciting +3065 /// packet, to try and elicit new acknowledgements. These new acknowledgements will +3066 /// indicate whether the previously sent packets were lost or not. +3067 fn on_loss_detection_timeout(&mut self, now: Instant, path_id: PathId) { +3068 if let Some((_, pn_space)) = self.loss_time_and_space(path_id) { +3069 // Time threshold loss Detection +3070 self.detect_lost_packets(now, pn_space, path_id, false); +3071 self.set_loss_detection_timer(now, path_id); +3072 return; +3073 } +3074 +3075 let Some((_, space)) = self.pto_time_and_space(now, path_id) else { +3076 error!(%path_id, "PTO expired while unset"); +3077 return; +3078 }; +3079 trace!( +3080 in_flight = self.path_data(path_id).in_flight.bytes, +3081 count = self.path_data(path_id).pto_count, +3082 ?space, +3083 %path_id, +3084 "PTO fired" +3085 ); +3086 +3087 let count = match self.path_data(path_id).in_flight.ack_eliciting { +3088 // A PTO when we're not expecting any ACKs must be due to handshake +3089 // anti-amplification deadlock prevention. +3090 0 => { +3091 debug_assert!(!self.peer_completed_handshake_address_validation()); +3092 1 +3093 } +3094 // Conventional loss probe +3095 _ => 2, +3096 }; +3097 let pns = self.spaces[space].for_path(path_id); +3098 pns.loss_probes = pns.loss_probes.saturating_add(count); +3099 let path_data = self.path_data_mut(path_id); +3100 path_data.pto_count = path_data.pto_count.saturating_add(1); +3101 self.set_loss_detection_timer(now, path_id); +3102 } +3103 +3104 /// Detect any lost packets +3105 /// +3106 /// There are two cases in which we detects lost packets: +3107 /// +3108 /// - We received an ACK packet. +3109 /// - The [`PathTimer::LossDetection`] timer expired. So there is an un-acknowledged packet +3110 /// that was followed by an acknowledged packet. The loss timer for this +3111 /// un-acknowledged packet expired and we need to detect that packet as lost. +3112 /// +3113 /// Packets are lost if they are both (See RFC9002 §6.1): +3114 /// +3115 /// - Unacknowledged, in flight and sent prior to an acknowledged packet. +3116 /// - Old enough by either: +3117 /// - Having a packet number [`TransportConfig::packet_threshold`] lower then the last +3118 /// acknowledged packet. +3119 /// - Being sent [`TransportConfig::time_threshold`] * RTT in the past. +3120 fn detect_lost_packets( +3121 &mut self, +3122 now: Instant, +3123 pn_space: SpaceId, +3124 path_id: PathId, +3125 due_to_ack: bool, +3126 ) { +3127 let mut lost_packets = Vec::<u64>::new(); +3128 let mut lost_mtu_probe = None; +3129 let mut in_persistent_congestion = false; +3130 let mut size_of_lost_packets = 0u64; +3131 self.spaces[pn_space].for_path(path_id).loss_time = None; +3132 +3133 // Find all the lost packets, populating all variables initialised above. +3134 +3135 let path = self.path_data(path_id); +3136 let in_flight_mtu_probe = path.mtud.in_flight_mtu_probe(); +3137 let loss_delay = path +3138 .rtt +3139 .conservative() +3140 .mul_f32(self.config.time_threshold) +3141 .max(TIMER_GRANULARITY); +3142 let first_packet_after_rtt_sample = path.first_packet_after_rtt_sample; +3143 +3144 let largest_acked_packet = self.spaces[pn_space] +3145 .for_path(path_id) +3146 .largest_acked_packet +3147 .expect("detect_lost_packets only to be called if path received at least one ACK"); +3148 let packet_threshold = self.config.packet_threshold as u64; +3149 +3150 // InPersistentCongestion: Determine if all packets in the time period before the newest +3151 // lost packet, including the edges, are marked lost. PTO computation must always +3152 // include max ACK delay, i.e. operate as if in Data space (see RFC9001 §7.6.1). +3153 let congestion_period = self +3154 .pto(SpaceKind::Data, path_id) +3155 .saturating_mul(self.config.persistent_congestion_threshold); +3156 let mut persistent_congestion_start: Option<Instant> = None; +3157 let mut prev_packet = None; +3158 let space = self.spaces[pn_space].for_path(path_id); +3159 +3160 for (packet, info) in space.sent_packets.iter_range(0..largest_acked_packet) { +3161 if prev_packet != Some(packet.wrapping_sub(1)) { +3162 // An intervening packet was acknowledged +3163 persistent_congestion_start = None; +3164 } +3165 +3166 // Packets sent before now - loss_delay are deemed lost. +3167 // However, we avoid subtraction as it can panic and there's no +3168 // saturating equivalent of this subtraction operation with a Duration. +3169 let packet_too_old = now.saturating_duration_since(info.time_sent) >= loss_delay; +3170 if packet_too_old || largest_acked_packet >= packet + packet_threshold { +3171 // The packet should be declared lost. +3172 if Some(packet) == in_flight_mtu_probe { +3173 // Lost MTU probes are not included in `lost_packets`, because they +3174 // should not trigger a congestion control response +3175 lost_mtu_probe = in_flight_mtu_probe; +3176 } else { +3177 lost_packets.push(packet); +3178 size_of_lost_packets += info.size as u64; +3179 if info.ack_eliciting && due_to_ack { +3180 match persistent_congestion_start { +3181 // Two ACK-eliciting packets lost more than +3182 // congestion_period apart, with no ACKed packets in between +3183 Some(start) if info.time_sent - start > congestion_period => { +3184 in_persistent_congestion = true; +3185 } +3186 // Persistent congestion must start after the first RTT sample +3187 None if first_packet_after_rtt_sample +3188 .is_some_and(|x| x < (pn_space.kind(), packet)) => +3189 { +3190 persistent_congestion_start = Some(info.time_sent); +3191 } +3192 _ => {} +3193 } +3194 } +3195 } +3196 } else { +3197 // The packet should not yet be declared lost. +3198 if space.loss_time.is_none() { +3199 // Since we iterate in order the lowest packet number's loss time will +3200 // always be the earliest. +3201 space.loss_time = Some(info.time_sent + loss_delay); +3202 } +3203 persistent_congestion_start = None; +3204 } 3205 -3206 self.handle_lost_packets( -3207 pn_space, -3208 path_id, -3209 now, -3210 lost_packets, -3211 lost_mtu_probe, -3212 loss_delay, -3213 in_persistent_congestion, -3214 size_of_lost_packets, -3215 ); -3216 } -3217 -3218 /// Drops the path state, declaring any remaining in-flight packets as lost -3219 fn discard_path(&mut self, path_id: PathId, now: Instant) { -3220 trace!(%path_id, "dropping path state"); -3221 let path = self.path_data(path_id); -3222 let in_flight_mtu_probe = path.mtud.in_flight_mtu_probe(); -3223 -3224 let mut size_of_lost_packets = 0u64; // add to path_stats.lost_bytes; -3225 let lost_pns: Vec<_> = self.spaces[SpaceId::Data] -3226 .for_path(path_id) -3227 .sent_packets -3228 .iter() -3229 .filter(|(pn, _info)| Some(*pn) != in_flight_mtu_probe) -3230 .map(|(pn, info)| { -3231 size_of_lost_packets += info.size as u64; -3232 pn -3233 }) -3234 .collect(); -3235 -3236 if !lost_pns.is_empty() { -3237 trace!( -3238 %path_id, -3239 count = lost_pns.len(), -3240 lost_bytes = size_of_lost_packets, -3241 "packets lost on path abandon" -3242 ); -3243 self.handle_lost_packets( -3244 SpaceId::Data, -3245 path_id, -3246 now, -3247 lost_pns, -3248 in_flight_mtu_probe, -3249 Duration::ZERO, -3250 false, -3251 size_of_lost_packets, -3252 ); -3253 } -3254 // Before removing the path, we fetch the final path stats via `Self::path_stats`. -3255 // This updates some values for the last time. -3256 let path_stats = self.path_stats.discard(&path_id); -3257 self.partial_stats += path_stats; -3258 self.paths.remove(&path_id); -3259 self.spaces[SpaceId::Data].number_spaces.remove(&path_id); -3260 -3261 self.events.push_back( -3262 PathEvent::Discarded { -3263 id: path_id, -3264 path_stats: Box::new(path_stats), -3265 } -3266 .into(), -3267 ); -3268 } -3269 -3270 fn handle_lost_packets( -3271 &mut self, -3272 pn_space: SpaceId, -3273 path_id: PathId, -3274 now: Instant, -3275 lost_packets: Vec<u64>, -3276 lost_mtu_probe: Option<u64>, -3277 loss_delay: Duration, -3278 in_persistent_congestion: bool, -3279 size_of_lost_packets: u64, -3280 ) { -3281 debug_assert!( -3282 { -3283 let mut sorted = lost_packets.clone(); -3284 sorted.sort(); -3285 sorted == lost_packets -3286 }, -3287 "lost_packets must be sorted" -3288 ); -3289 -3290 self.drain_lost_packets(now, pn_space, path_id); -3291 -3292 // OnPacketsLost -3293 if let Some(largest_lost) = lost_packets.last().cloned() { -3294 let old_bytes_in_flight = self.path_data_mut(path_id).in_flight.bytes; -3295 let largest_lost_sent = self.spaces[pn_space] -3296 .for_path(path_id) -3297 .sent_packets -3298 .get(largest_lost) -3299 .unwrap() -3300 .time_sent; -3301 let path_stats = self.path_stats.for_path(path_id); -3302 path_stats.lost_packets += lost_packets.len() as u64; -3303 path_stats.lost_bytes += size_of_lost_packets; -3304 trace!( -3305 %path_id, -3306 count = lost_packets.len(), -3307 lost_bytes = size_of_lost_packets, -3308 "packets lost", -3309 ); -3310 -3311 for &packet in &lost_packets { -3312 let Some(info) = self.spaces[pn_space].for_path(path_id).take(packet) else { -3313 continue; -3314 }; -3315 self.qlog -3316 .emit_packet_lost(packet, &info, loss_delay, pn_space.kind(), now); -3317 self.paths -3318 .get_mut(&path_id) -3319 .unwrap() -3320 .remove_in_flight(&info); -3321 -3322 for frame in info.stream_frames { -3323 self.streams.retransmit(frame); -3324 } -3325 self.spaces[pn_space].pending |= info.retransmits; -3326 self.path_data_mut(path_id) -3327 .mtud -3328 .on_non_probe_lost(packet, info.size); -3329 -3330 self.spaces[pn_space].for_path(path_id).lost_packets.insert( -3331 packet, -3332 LostPacket { -3333 time_sent: info.time_sent, -3334 }, -3335 ); -3336 } -3337 -3338 let path = self.path_data_mut(path_id); -3339 if path.mtud.black_hole_detected(now) { -3340 path.congestion.on_mtu_update(path.mtud.current_mtu()); -3341 if let Some(max_datagram_size) = self.datagrams().max_size() -3342 && self.datagrams.drop_oversized(max_datagram_size) -3343 && self.datagrams.send_blocked -3344 { -3345 self.datagrams.send_blocked = false; -3346 self.events.push_back(Event::DatagramsUnblocked); -3347 } -3348 self.path_stats.for_path(path_id).black_holes_detected += 1; -3349 } -3350 -3351 // Don't apply congestion penalty for lost ack-only packets -3352 let lost_ack_eliciting = -3353 old_bytes_in_flight != self.path_data_mut(path_id).in_flight.bytes; -3354 -3355 if lost_ack_eliciting { -3356 self.path_stats.for_path(path_id).congestion_events += 1; -3357 self.path_data_mut(path_id).congestion.on_congestion_event( -3358 now, -3359 largest_lost_sent, -3360 in_persistent_congestion, -3361 false, -3362 size_of_lost_packets, -3363 ); -3364 } -3365 } -3366 -3367 // Handle a lost MTU probe -3368 if let Some(packet) = lost_mtu_probe { -3369 let info = self.spaces[SpaceId::Data] -3370 .for_path(path_id) -3371 .take(packet) -3372 .unwrap(); // safe: lost_mtu_probe is omitted from lost_packets, and -3373 // therefore must not have been removed yet -3374 self.paths -3375 .get_mut(&path_id) -3376 .unwrap() -3377 .remove_in_flight(&info); -3378 self.path_data_mut(path_id).mtud.on_probe_lost(); -3379 self.path_stats.for_path(path_id).lost_plpmtud_probes += 1; -3380 } -3381 } -3382 -3383 /// Returns the earliest time packets should be declared lost for all spaces on a path. -3384 /// -3385 /// If a path has an acknowledged packet with any prior un-acknowledged packets, the -3386 /// earliest un-acknowledged packet can be declared lost after a timeout has elapsed. -3387 /// The time returned is when this packet should be declared lost. -3388 fn loss_time_and_space(&self, path_id: PathId) -> Option<(Instant, SpaceId)> { -3389 SpaceId::iter() -3390 .filter_map(|id| { -3391 self.spaces[id] -3392 .number_spaces -3393 .get(&path_id) -3394 .and_then(|pns| pns.loss_time) -3395 .map(|time| (time, id)) -3396 }) -3397 .min_by_key(|&(time, _)| time) -3398 } -3399 -3400 /// Returns the earliest next PTO should fire for all spaces on a path. -3401 /// -3402 /// This needs to be fully deterministic because it is also used to determine the PTO -3403 /// that fired, not just to set the next timer. So if it fired in the past it needs to -3404 /// return the time from the past at which it fired. -3405 /// -3406 /// This is the next time a tail-loss probe should be sent. -3407 fn pto_time_and_space(&mut self, now: Instant, path_id: PathId) -> Option<(Instant, SpaceId)> { -3408 let path = self.path(path_id)?; -3409 let pto_count = path.pto_count; -3410 -3411 // Cap the maximum interval between two tail-loss probes. -3412 let max_interval = if path.rtt.get() > SLOW_RTT_THRESHOLD { -3413 // For slow links we want to increase the interval beyond 2s. -3414 (path.rtt.get() * 3) / 2 -3415 } else if let Some(idle) = path.idle_timeout.or(self.idle_timeout) -3416 && idle <= MIN_IDLE_FOR_FAST_PTO -3417 { -3418 // If the idle timeout is relatively low, cap at 1s so we get plenty of retries -3419 // before the idle timeout fires. -3420 MAX_PTO_FAST_INTERVAL -3421 } else { -3422 // Otherwise cap to 2s. -3423 MAX_PTO_INTERVAL -3424 }; -3425 -3426 if path_id == PathId::ZERO -3427 && path.in_flight.ack_eliciting == 0 -3428 && !self.peer_completed_handshake_address_validation() -3429 { -3430 // Address Validation during Connection Establishment: -3431 // https://www.rfc-editor.org/rfc/rfc9000.html#section-8.1. To prevent a -3432 // deadlock if an Initial or Handshake packet from the server is lost and the -3433 // server can not send more due to its anti-amplification limit the client must -3434 // send another packet on PTO. -3435 let space = match self.highest_space { -3436 SpaceKind::Handshake => SpaceId::Handshake, -3437 _ => SpaceId::Initial, -3438 }; -3439 -3440 let backoff = 2u32.pow(path.pto_count.min(MAX_BACKOFF_EXPONENT)); -3441 let duration = path.rtt.pto_base() * backoff; -3442 let duration = duration.min(max_interval); -3443 return Some((now + duration, space)); -3444 } -3445 -3446 let mut result = None; -3447 for space in SpaceId::iter() { -3448 let Some(pns) = self.spaces[space].number_spaces.get(&path_id) else { -3449 continue; -3450 }; -3451 -3452 if !pns.has_in_flight() { -3453 continue; -3454 } -3455 -3456 // Compute the PTO duration for this space, we want to cap the maximum interval -3457 // between two tail-loss probes so to not do a simple exponential backoff but -3458 // rather iterate through the probes to compute the capped increment for an -3459 // exponential backoff at each step. -3460 let duration = { -3461 let pto_base = path.rtt.pto_base() -3462 + if space == SpaceId::Data { -3463 self.ack_frequency.max_ack_delay_for_pto() -3464 } else { -3465 Duration::ZERO -3466 }; -3467 let mut duration = pto_base; -3468 for i in 1..=pto_count { -3469 let exponential_duration = pto_base * 2u32.pow(i.min(MAX_BACKOFF_EXPONENT)); -3470 let max_duration = duration + max_interval; -3471 duration = exponential_duration.min(max_duration); -3472 } -3473 duration -3474 }; -3475 -3476 let Some(last_ack_eliciting) = pns.time_of_last_ack_eliciting_packet else { -3477 continue; -3478 }; -3479 // Base the deadline on when the last probe was sent, so the PTO -3480 // doesn't fire before the response has had time to arrive. -3481 let pto = last_ack_eliciting + duration; -3482 if result.is_none_or(|(earliest_pto, _)| pto < earliest_pto) { -3483 if path.anti_amplification_blocked(1) { -3484 // Nothing would be able to be sent. -3485 continue; -3486 } -3487 if path.in_flight.ack_eliciting == 0 { -3488 // Nothing ack-eliciting, no PTO to arm/fire. -3489 continue; -3490 } -3491 result = Some((pto, space)); -3492 } -3493 } -3494 result -3495 } -3496 -3497 /// Whether the peer validated our address in the connection handshake. -3498 fn peer_completed_handshake_address_validation(&self) -> bool { -3499 if self.side.is_server() || self.state.is_closed() { -3500 return true; -3501 } -3502 // The server is guaranteed to have validated our address if any of our handshake or -3503 // 1-RTT packets are acknowledged or we've seen HANDSHAKE_DONE and discarded -3504 // handshake keys. -3505 self.spaces[SpaceId::Handshake] -3506 .path_space(PathId::ZERO) -3507 .and_then(|pns| pns.largest_acked_packet) -3508 .is_some() -3509 || self.spaces[SpaceId::Data] -3510 .path_space(PathId::ZERO) -3511 .and_then(|pns| pns.largest_acked_packet) -3512 .is_some() -3513 || (self.crypto_state.has_keys(EncryptionLevel::OneRtt) -3514 && !self.crypto_state.has_keys(EncryptionLevel::Handshake)) -3515 } -3516 -3517 /// Resets the the [`PathTimer::LossDetection`] timer to the next instant it may be needed -3518 /// -3519 /// The timer must fire if either: -3520 /// - An ack-eliciting packet we sent needs to be declared lost. -3521 /// - A tail-loss probe needs to be sent. -3522 /// -3523 /// See [`Connection::on_loss_detection_timeout`] for details. -3524 fn set_loss_detection_timer(&mut self, now: Instant, path_id: PathId) { -3525 if self.state.is_closed() { -3526 // No loss detection takes place on closed connections, and `close_common` already -3527 // stopped time timer. Ensure we don't restart it inadvertently, e.g. in response to a -3528 // reordered packet being handled by state-insensitive code. -3529 return; -3530 } -3531 -3532 if let Some((loss_time, _)) = self.loss_time_and_space(path_id) { -3533 // Time threshold loss detection. -3534 self.timers.set( -3535 Timer::PerPath(path_id, PathTimer::LossDetection), -3536 loss_time, -3537 self.qlog.with_time(now), -3538 ); -3539 return; +3206 prev_packet = Some(packet); +3207 } +3208 +3209 self.handle_lost_packets( +3210 pn_space, +3211 path_id, +3212 now, +3213 lost_packets, +3214 lost_mtu_probe, +3215 loss_delay, +3216 in_persistent_congestion, +3217 size_of_lost_packets, +3218 ); +3219 } +3220 +3221 /// Drops the path state, declaring any remaining in-flight packets as lost +3222 fn discard_path(&mut self, path_id: PathId, now: Instant) { +3223 trace!(%path_id, "dropping path state"); +3224 let path = self.path_data(path_id); +3225 let in_flight_mtu_probe = path.mtud.in_flight_mtu_probe(); +3226 +3227 let mut size_of_lost_packets = 0u64; // add to path_stats.lost_bytes; +3228 let lost_pns: Vec<_> = self.spaces[SpaceId::Data] +3229 .for_path(path_id) +3230 .sent_packets +3231 .iter() +3232 .filter(|(pn, _info)| Some(*pn) != in_flight_mtu_probe) +3233 .map(|(pn, info)| { +3234 size_of_lost_packets += info.size as u64; +3235 pn +3236 }) +3237 .collect(); +3238 +3239 if !lost_pns.is_empty() { +3240 trace!( +3241 %path_id, +3242 count = lost_pns.len(), +3243 lost_bytes = size_of_lost_packets, +3244 "packets lost on path abandon" +3245 ); +3246 self.handle_lost_packets( +3247 SpaceId::Data, +3248 path_id, +3249 now, +3250 lost_pns, +3251 in_flight_mtu_probe, +3252 Duration::ZERO, +3253 false, +3254 size_of_lost_packets, +3255 ); +3256 } +3257 // Before removing the path, we fetch the final path stats via `Self::path_stats`. +3258 // This updates some values for the last time. +3259 let path_stats = self.path_stats.discard(&path_id); +3260 self.partial_stats += path_stats; +3261 self.paths.remove(&path_id); +3262 self.spaces[SpaceId::Data].number_spaces.remove(&path_id); +3263 +3264 self.events.push_back( +3265 PathEvent::Discarded { +3266 id: path_id, +3267 path_stats: Box::new(path_stats), +3268 } +3269 .into(), +3270 ); +3271 } +3272 +3273 fn handle_lost_packets( +3274 &mut self, +3275 pn_space: SpaceId, +3276 path_id: PathId, +3277 now: Instant, +3278 lost_packets: Vec<u64>, +3279 lost_mtu_probe: Option<u64>, +3280 loss_delay: Duration, +3281 in_persistent_congestion: bool, +3282 size_of_lost_packets: u64, +3283 ) { +3284 debug_assert!( +3285 { +3286 let mut sorted = lost_packets.clone(); +3287 sorted.sort(); +3288 sorted == lost_packets +3289 }, +3290 "lost_packets must be sorted" +3291 ); +3292 +3293 self.drain_lost_packets(now, pn_space, path_id); +3294 +3295 // OnPacketsLost +3296 if let Some(largest_lost) = lost_packets.last().cloned() { +3297 let old_bytes_in_flight = self.path_data_mut(path_id).in_flight.bytes; +3298 let largest_lost_sent = self.spaces[pn_space] +3299 .for_path(path_id) +3300 .sent_packets +3301 .get(largest_lost) +3302 .unwrap() +3303 .time_sent; +3304 let path_stats = self.path_stats.for_path(path_id); +3305 path_stats.lost_packets += lost_packets.len() as u64; +3306 path_stats.lost_bytes += size_of_lost_packets; +3307 trace!( +3308 %path_id, +3309 count = lost_packets.len(), +3310 lost_bytes = size_of_lost_packets, +3311 "packets lost", +3312 ); +3313 +3314 for &packet in &lost_packets { +3315 let Some(info) = self.spaces[pn_space].for_path(path_id).take(packet) else { +3316 continue; +3317 }; +3318 self.qlog +3319 .emit_packet_lost(packet, &info, loss_delay, pn_space.kind(), now); +3320 self.paths +3321 .get_mut(&path_id) +3322 .unwrap() +3323 .remove_in_flight(&info); +3324 +3325 for frame in info.stream_frames { +3326 self.streams.retransmit(frame); +3327 } +3328 self.spaces[pn_space].pending |= info.retransmits; +3329 self.path_data_mut(path_id) +3330 .mtud +3331 .on_non_probe_lost(packet, info.size); +3332 +3333 self.spaces[pn_space].for_path(path_id).lost_packets.insert( +3334 packet, +3335 LostPacket { +3336 time_sent: info.time_sent, +3337 }, +3338 ); +3339 } +3340 +3341 let path = self.path_data_mut(path_id); +3342 if path.mtud.black_hole_detected(now) { +3343 path.congestion.on_mtu_update(path.mtud.current_mtu()); +3344 if let Some(max_datagram_size) = self.datagrams().max_size() +3345 && self.datagrams.drop_oversized(max_datagram_size) +3346 && self.datagrams.send_blocked +3347 { +3348 self.datagrams.send_blocked = false; +3349 self.events.push_back(Event::DatagramsUnblocked); +3350 } +3351 self.path_stats.for_path(path_id).black_holes_detected += 1; +3352 } +3353 +3354 // Don't apply congestion penalty for lost ack-only packets +3355 let lost_ack_eliciting = +3356 old_bytes_in_flight != self.path_data_mut(path_id).in_flight.bytes; +3357 +3358 if lost_ack_eliciting { +3359 self.path_stats.for_path(path_id).congestion_events += 1; +3360 self.path_data_mut(path_id).congestion.on_congestion_event( +3361 now, +3362 largest_lost_sent, +3363 in_persistent_congestion, +3364 false, +3365 size_of_lost_packets, +3366 ); +3367 } +3368 } +3369 +3370 // Handle a lost MTU probe +3371 if let Some(packet) = lost_mtu_probe { +3372 let info = self.spaces[SpaceId::Data] +3373 .for_path(path_id) +3374 .take(packet) +3375 .unwrap(); // safe: lost_mtu_probe is omitted from lost_packets, and +3376 // therefore must not have been removed yet +3377 self.paths +3378 .get_mut(&path_id) +3379 .unwrap() +3380 .remove_in_flight(&info); +3381 self.path_data_mut(path_id).mtud.on_probe_lost(); +3382 self.path_stats.for_path(path_id).lost_plpmtud_probes += 1; +3383 } +3384 } +3385 +3386 /// Returns the earliest time packets should be declared lost for all spaces on a path. +3387 /// +3388 /// If a path has an acknowledged packet with any prior un-acknowledged packets, the +3389 /// earliest un-acknowledged packet can be declared lost after a timeout has elapsed. +3390 /// The time returned is when this packet should be declared lost. +3391 fn loss_time_and_space(&self, path_id: PathId) -> Option<(Instant, SpaceId)> { +3392 SpaceId::iter() +3393 .filter_map(|id| { +3394 self.spaces[id] +3395 .number_spaces +3396 .get(&path_id) +3397 .and_then(|pns| pns.loss_time) +3398 .map(|time| (time, id)) +3399 }) +3400 .min_by_key(|&(time, _)| time) +3401 } +3402 +3403 /// Returns the earliest next PTO should fire for all spaces on a path. +3404 /// +3405 /// This needs to be fully deterministic because it is also used to determine the PTO +3406 /// that fired, not just to set the next timer. So if it fired in the past it needs to +3407 /// return the time from the past at which it fired. +3408 /// +3409 /// This is the next time a tail-loss probe should be sent. +3410 fn pto_time_and_space(&mut self, now: Instant, path_id: PathId) -> Option<(Instant, SpaceId)> { +3411 let path = self.path(path_id)?; +3412 let pto_count = path.pto_count; +3413 +3414 // Cap the maximum interval between two tail-loss probes. +3415 let max_interval = if path.rtt.get() > SLOW_RTT_THRESHOLD { +3416 // For slow links we want to increase the interval beyond 2s. +3417 (path.rtt.get() * 3) / 2 +3418 } else if let Some(idle) = path.idle_timeout.or(self.idle_timeout) +3419 && idle <= MIN_IDLE_FOR_FAST_PTO +3420 { +3421 // If the idle timeout is relatively low, cap at 1s so we get plenty of retries +3422 // before the idle timeout fires. +3423 MAX_PTO_FAST_INTERVAL +3424 } else { +3425 // Otherwise cap to 2s. +3426 MAX_PTO_INTERVAL +3427 }; +3428 +3429 if path_id == PathId::ZERO +3430 && path.in_flight.ack_eliciting == 0 +3431 && !self.peer_completed_handshake_address_validation() +3432 { +3433 // Address Validation during Connection Establishment: +3434 // https://www.rfc-editor.org/rfc/rfc9000.html#section-8.1. To prevent a +3435 // deadlock if an Initial or Handshake packet from the server is lost and the +3436 // server can not send more due to its anti-amplification limit the client must +3437 // send another packet on PTO. +3438 let space = match self.highest_space { +3439 SpaceKind::Handshake => SpaceId::Handshake, +3440 _ => SpaceId::Initial, +3441 }; +3442 +3443 let backoff = 2u32.pow(path.pto_count.min(MAX_BACKOFF_EXPONENT)); +3444 let duration = path.rtt.pto_base() * backoff; +3445 let duration = duration.min(max_interval); +3446 return Some((now + duration, space)); +3447 } +3448 +3449 let mut result = None; +3450 for space in SpaceId::iter() { +3451 let Some(pns) = self.spaces[space].number_spaces.get(&path_id) else { +3452 continue; +3453 }; +3454 +3455 if space == SpaceId::Data && !self.is_handshake_confirmed() { +3456 // https://www.rfc-editor.org/rfc/rfc9002.html#section-6.2.1-7: +3457 // An endpoint MUST NOT set its PTO timer for the Application Data packet +3458 // number space until the handshake is confirmed. +3459 continue; +3460 } +3461 +3462 if !pns.has_in_flight() { +3463 continue; +3464 } +3465 +3466 // Compute the PTO duration for this space, we want to cap the maximum interval +3467 // between two tail-loss probes so to not do a simple exponential backoff but +3468 // rather iterate through the probes to compute the capped increment for an +3469 // exponential backoff at each step. +3470 let duration = { +3471 let max_ack_delay = if space == SpaceId::Data { +3472 self.ack_frequency.max_ack_delay_for_pto() +3473 } else { +3474 Duration::ZERO +3475 }; +3476 let pto_base = path.rtt.pto_base() + max_ack_delay; +3477 let mut duration = pto_base; +3478 for i in 1..=pto_count { +3479 let exponential_duration = pto_base * 2u32.pow(i.min(MAX_BACKOFF_EXPONENT)); +3480 let max_duration = duration + max_interval; +3481 duration = exponential_duration.min(max_duration); +3482 } +3483 duration +3484 }; +3485 +3486 let Some(last_ack_eliciting) = pns.time_of_last_ack_eliciting_packet else { +3487 continue; +3488 }; +3489 // Base the deadline on when the last probe was sent, so the PTO +3490 // doesn't fire before the response has had time to arrive. +3491 let pto = last_ack_eliciting + duration; +3492 if result.is_none_or(|(earliest_pto, _)| pto < earliest_pto) { +3493 if path.anti_amplification_blocked(1) { +3494 // Nothing would be able to be sent. +3495 continue; +3496 } +3497 if path.in_flight.ack_eliciting == 0 { +3498 // Nothing ack-eliciting, no PTO to arm/fire. +3499 continue; +3500 } +3501 result = Some((pto, space)); +3502 } +3503 } +3504 result +3505 } +3506 +3507 /// Whether the peer validated our address in the connection handshake. +3508 fn peer_completed_handshake_address_validation(&self) -> bool { +3509 if self.side.is_server() || self.state.is_closed() { +3510 return true; +3511 } +3512 // The server is guaranteed to have validated our address if any of our handshake or +3513 // 1-RTT packets are acknowledged or we've seen HANDSHAKE_DONE and discarded +3514 // handshake keys. +3515 self.spaces[SpaceId::Handshake] +3516 .path_space(PathId::ZERO) +3517 .and_then(|pns| pns.largest_acked_packet) +3518 .is_some() +3519 || self.spaces[SpaceId::Data] +3520 .path_space(PathId::ZERO) +3521 .and_then(|pns| pns.largest_acked_packet) +3522 .is_some() +3523 || (self.crypto_state.has_keys(EncryptionLevel::OneRtt) +3524 && !self.crypto_state.has_keys(EncryptionLevel::Handshake)) +3525 } +3526 +3527 /// Resets the the [`PathTimer::LossDetection`] timer to the next instant it may be needed +3528 /// +3529 /// The timer must fire if either: +3530 /// - An ack-eliciting packet we sent needs to be declared lost. +3531 /// - A tail-loss probe needs to be sent. +3532 /// +3533 /// See [`Connection::on_loss_detection_timeout`] for details. +3534 fn set_loss_detection_timer(&mut self, now: Instant, path_id: PathId) { +3535 if self.state.is_closed() { +3536 // No loss detection takes place on closed connections, and `close_common` already +3537 // stopped time timer. Ensure we don't restart it inadvertently, e.g. in response to a +3538 // reordered packet being handled by state-insensitive code. +3539 return; 3540 } 3541 -3542 // Determine which PN space to arm PTO for. -3543 // Calculate PTO duration -3544 if let Some((timeout, _)) = self.pto_time_and_space(now, path_id) { -3545 self.timers.set( -3546 Timer::PerPath(path_id, PathTimer::LossDetection), -3547 timeout, -3548 self.qlog.with_time(now), -3549 ); -3550 } else { -3551 self.timers.stop( -3552 Timer::PerPath(path_id, PathTimer::LossDetection), -3553 self.qlog.with_time(now), -3554 ); -3555 } -3556 } -3557 -3558 /// The maximum probe timeout across all paths -3559 /// -3560 /// See [`Connection::pto`] -3561 fn max_pto_for_space(&self, space: SpaceKind) -> Duration { -3562 self.paths -3563 .keys() -3564 .map(|path_id| self.pto(space, *path_id)) -3565 .max() -3566 .unwrap_or_else(|| { -3567 // No paths remain (e.g. last path was abandoned and the NoAvailablePath grace timer -3568 // fired before any new path was opened). Fall back to a PTO derived from the -3569 // configured initial RTT, matching RFC 9002 §6.2.2 initial values. -3570 let rtt = self.config.initial_rtt; -3571 let max_ack_delay = match space { -3572 SpaceKind::Initial | SpaceKind::Handshake => Duration::ZERO, -3573 SpaceKind::Data => self.ack_frequency.max_ack_delay_for_pto(), -3574 }; -3575 rtt + cmp::max(4 * (rtt / 2), TIMER_GRANULARITY) + max_ack_delay -3576 }) -3577 } -3578 -3579 /// Probe Timeout -3580 /// -3581 /// The PTO is logically the time in which you'd expect to receive an acknowledgement -3582 /// for a packet. So approximately RTT + max_ack_delay. -3583 fn pto(&self, space: SpaceKind, path_id: PathId) -> Duration { -3584 let max_ack_delay = match space { -3585 SpaceKind::Initial | SpaceKind::Handshake => Duration::ZERO, -3586 SpaceKind::Data => self.ack_frequency.max_ack_delay_for_pto(), -3587 }; -3588 self.path_data(path_id).rtt.pto_base() + max_ack_delay -3589 } -3590 -3591 fn on_packet_authenticated( -3592 &mut self, -3593 now: Instant, -3594 space_id: SpaceKind, -3595 path_id: PathId, -3596 ecn: Option<EcnCodepoint>, -3597 packet: Option<u64>, -3598 spin: bool, -3599 is_1rtt: bool, -3600 ) { -3601 self.total_authed_packets += 1; -3602 self.reset_keep_alive(path_id, now); -3603 self.reset_idle_timeout(now, space_id, path_id); -3604 self.permit_idle_reset = true; -3605 self.receiving_ecn |= ecn.is_some(); -3606 if let Some(x) = ecn { -3607 let space = &mut self.spaces[space_id]; -3608 space.for_path(path_id).ecn_counters += x; -3609 -3610 if x.is_ce() { -3611 space -3612 .for_path(path_id) -3613 .pending_acks -3614 .set_immediate_ack_required(); -3615 } -3616 } -3617 -3618 let Some(packet) = packet else { -3619 return; -3620 }; -3621 match &self.side { -3622 ConnectionSide::Client { .. } => { -3623 // If we received a handshake packet that authenticated, then we're talking to -3624 // the real server. From now on we should no longer allow the server to migrate -3625 // its address. -3626 if space_id == SpaceKind::Handshake -3627 && let Some(hs) = self.state.as_handshake_mut() -3628 { -3629 hs.allow_server_migration = false; -3630 } -3631 } -3632 ConnectionSide::Server { .. } => { -3633 if self.crypto_state.has_keys(EncryptionLevel::Initial) -3634 && space_id == SpaceKind::Handshake -3635 { -3636 // A server stops sending and processing Initial packets when it receives its first Handshake packet. -3637 self.discard_space(now, SpaceKind::Initial); -3638 } -3639 if self.crypto_state.has_keys(EncryptionLevel::ZeroRtt) && is_1rtt { -3640 // Discard 0-RTT keys soon after receiving a 1-RTT packet -3641 self.set_key_discard_timer(now, space_id) -3642 } -3643 } -3644 } -3645 let space = self.spaces[space_id].for_path(path_id); -3646 space.pending_acks.insert_one(packet, now); -3647 if packet >= space.rx_packet.unwrap_or_default() { -3648 space.rx_packet = Some(packet); -3649 // Update outgoing spin bit, inverting iff we're the client -3650 self.spin = self.side.is_client() ^ spin; -3651 } -3652 } -3653 -3654 /// Resets the idle timeout timers -3655 /// -3656 /// Without multipath there is only the connection-wide idle timeout. When multipath is -3657 /// enabled there is an additional per-path idle timeout. -3658 fn reset_idle_timeout(&mut self, now: Instant, space: SpaceKind, path_id: PathId) { -3659 // First reset the global idle timeout. -3660 if let Some(timeout) = self.idle_timeout { -3661 if self.state.is_closed() { -3662 self.timers -3663 .stop(Timer::Conn(ConnTimer::Idle), self.qlog.with_time(now)); -3664 } else { -3665 let dt = cmp::max(timeout, 3 * self.max_pto_for_space(space)); -3666 self.timers.set( -3667 Timer::Conn(ConnTimer::Idle), -3668 now + dt, -3669 self.qlog.with_time(now), -3670 ); -3671 } -3672 } -3673 -3674 // Now handle the per-path state -3675 if let Some(timeout) = self.path_data(path_id).idle_timeout { -3676 if self.state.is_closed() { -3677 self.timers.stop( -3678 Timer::PerPath(path_id, PathTimer::PathIdle), +3542 if let Some((loss_time, _)) = self.loss_time_and_space(path_id) { +3543 // Time threshold loss detection. +3544 self.timers.set( +3545 Timer::PerPath(path_id, PathTimer::LossDetection), +3546 loss_time, +3547 self.qlog.with_time(now), +3548 ); +3549 return; +3550 } +3551 +3552 // Determine which PN space to arm PTO for. +3553 // Calculate PTO duration +3554 if let Some((timeout, _)) = self.pto_time_and_space(now, path_id) { +3555 self.timers.set( +3556 Timer::PerPath(path_id, PathTimer::LossDetection), +3557 timeout, +3558 self.qlog.with_time(now), +3559 ); +3560 } else { +3561 self.timers.stop( +3562 Timer::PerPath(path_id, PathTimer::LossDetection), +3563 self.qlog.with_time(now), +3564 ); +3565 } +3566 } +3567 +3568 /// The maximum probe timeout across all paths +3569 /// +3570 /// See [`Connection::pto`] +3571 fn max_pto_for_space(&self, space: SpaceKind) -> Duration { +3572 self.paths +3573 .keys() +3574 .map(|path_id| self.pto(space, *path_id)) +3575 .max() +3576 .unwrap_or_else(|| { +3577 // No paths remain (e.g. last path was abandoned and the NoAvailablePath grace timer +3578 // fired before any new path was opened). Fall back to a PTO derived from the +3579 // configured initial RTT, matching RFC 9002 §6.2.2 initial values. +3580 let rtt = self.config.initial_rtt; +3581 let max_ack_delay = match space { +3582 SpaceKind::Initial | SpaceKind::Handshake => Duration::ZERO, +3583 SpaceKind::Data => self.ack_frequency.max_ack_delay_for_pto(), +3584 }; +3585 rtt + cmp::max(4 * (rtt / 2), TIMER_GRANULARITY) + max_ack_delay +3586 }) +3587 } +3588 +3589 /// Probe Timeout +3590 /// +3591 /// The PTO is logically the time in which you'd expect to receive an acknowledgement +3592 /// for a packet. So approximately RTT + max_ack_delay. +3593 fn pto(&self, space: SpaceKind, path_id: PathId) -> Duration { +3594 let max_ack_delay = match space { +3595 SpaceKind::Initial | SpaceKind::Handshake => Duration::ZERO, +3596 SpaceKind::Data => self.ack_frequency.max_ack_delay_for_pto(), +3597 }; +3598 self.path_data(path_id).rtt.pto_base() + max_ack_delay +3599 } +3600 +3601 fn on_packet_authenticated( +3602 &mut self, +3603 now: Instant, +3604 space_id: SpaceKind, +3605 path_id: PathId, +3606 ecn: Option<EcnCodepoint>, +3607 packet: Option<u64>, +3608 spin: bool, +3609 is_1rtt: bool, +3610 ) { +3611 self.total_authed_packets += 1; +3612 self.reset_keep_alive(path_id, now); +3613 self.reset_idle_timeout(now, space_id, path_id); +3614 self.permit_idle_reset = true; +3615 self.receiving_ecn |= ecn.is_some(); +3616 if let Some(x) = ecn { +3617 let space = &mut self.spaces[space_id]; +3618 space.for_path(path_id).ecn_counters += x; +3619 +3620 if x.is_ce() { +3621 space +3622 .for_path(path_id) +3623 .pending_acks +3624 .set_immediate_ack_required(); +3625 } +3626 } +3627 +3628 let Some(packet) = packet else { +3629 return; +3630 }; +3631 match &self.side { +3632 ConnectionSide::Client { .. } => { +3633 // If we received a handshake packet that authenticated, then we're talking to +3634 // the real server. From now on we should no longer allow the server to migrate +3635 // its address. +3636 if space_id == SpaceKind::Handshake +3637 && let Some(hs) = self.state.as_handshake_mut() +3638 { +3639 hs.allow_server_migration = false; +3640 } +3641 } +3642 ConnectionSide::Server { .. } => { +3643 if self.crypto_state.has_keys(EncryptionLevel::Initial) +3644 && space_id == SpaceKind::Handshake +3645 { +3646 // A server stops sending and processing Initial packets when it receives its first Handshake packet. +3647 self.discard_space(now, SpaceKind::Initial); +3648 } +3649 if self.crypto_state.has_keys(EncryptionLevel::ZeroRtt) && is_1rtt { +3650 // Discard 0-RTT keys soon after receiving a 1-RTT packet +3651 self.set_key_discard_timer(now, space_id) +3652 } +3653 } +3654 } +3655 let space = self.spaces[space_id].for_path(path_id); +3656 space.pending_acks.insert_one(packet, now); +3657 if packet >= space.rx_packet.unwrap_or_default() { +3658 space.rx_packet = Some(packet); +3659 // Update outgoing spin bit, inverting iff we're the client +3660 self.spin = self.side.is_client() ^ spin; +3661 } +3662 } +3663 +3664 /// Resets the idle timeout timers +3665 /// +3666 /// Without multipath there is only the connection-wide idle timeout. When multipath is +3667 /// enabled there is an additional per-path idle timeout. +3668 fn reset_idle_timeout(&mut self, now: Instant, space: SpaceKind, path_id: PathId) { +3669 // First reset the global idle timeout. +3670 if let Some(timeout) = self.idle_timeout { +3671 if self.state.is_closed() { +3672 self.timers +3673 .stop(Timer::Conn(ConnTimer::Idle), self.qlog.with_time(now)); +3674 } else { +3675 let dt = cmp::max(timeout, 3 * self.max_pto_for_space(space)); +3676 self.timers.set( +3677 Timer::Conn(ConnTimer::Idle), +3678 now + dt, 3679 self.qlog.with_time(now), 3680 ); -3681 } else { -3682 let dt = cmp::max(timeout, 3 * self.pto(space, path_id)); -3683 self.timers.set( -3684 Timer::PerPath(path_id, PathTimer::PathIdle), -3685 now + dt, -3686 self.qlog.with_time(now), -3687 ); -3688 } -3689 } -3690 } -3691 -3692 /// Resets both the [`ConnTimer::KeepAlive`] and [`PathTimer::PathKeepAlive`] timers -3693 fn reset_keep_alive(&mut self, path_id: PathId, now: Instant) { -3694 if !self.state.is_established() { -3695 return; -3696 } -3697 -3698 if let Some(interval) = self.config.keep_alive_interval { -3699 self.timers.set( -3700 Timer::Conn(ConnTimer::KeepAlive), -3701 now + interval, -3702 self.qlog.with_time(now), -3703 ); -3704 } -3705 -3706 if let Some(interval) = self.path_data(path_id).keep_alive { -3707 self.timers.set( -3708 Timer::PerPath(path_id, PathTimer::PathKeepAlive), -3709 now + interval, -3710 self.qlog.with_time(now), -3711 ); -3712 } -3713 } -3714 -3715 /// Sets the timer for when a previously issued CID should be retired next -3716 fn reset_cid_retirement(&mut self, now: Instant) { -3717 if let Some((_path, t)) = self.next_cid_retirement() { -3718 self.timers.set( -3719 Timer::Conn(ConnTimer::PushNewCid), -3720 t, -3721 self.qlog.with_time(now), -3722 ); -3723 } -3724 } -3725 -3726 /// The next time when a previously issued CID should be retired -3727 fn next_cid_retirement(&self) -> Option<(PathId, Instant)> { -3728 self.local_cid_state -3729 .iter() -3730 .filter_map(|(path_id, cid_state)| cid_state.next_timeout().map(|t| (*path_id, t))) -3731 .min_by_key(|(_path_id, timeout)| *timeout) -3732 } -3733 -3734 /// Handle the already-decrypted first packet from the client -3735 /// -3736 /// Decrypting the first packet in the `Endpoint` allows stateless packet handling to be more -3737 /// efficient. -3738 pub(crate) fn handle_first_packet( -3739 &mut self, -3740 now: Instant, -3741 network_path: FourTuple, -3742 ecn: Option<EcnCodepoint>, -3743 packet_number: u64, -3744 packet: InitialPacket, -3745 remaining: Option<BytesMut>, -3746 ) -> Result<(), ConnectionError> { -3747 let span = trace_span!("first recv"); -3748 let _guard = span.enter(); -3749 debug_assert!(self.side.is_server()); -3750 let len = packet.header_data.len() + packet.payload.len(); -3751 let path_id = PathId::ZERO; -3752 self.path_data_mut(path_id).total_recvd = len as u64; -3753 -3754 if let Some(hs) = self.state.as_handshake_mut() { -3755 hs.expected_token = packet.header.token.clone(); -3756 } else { -3757 unreachable!("first packet must be delivered in Handshake state"); -3758 } -3759 -3760 // The first packet is always on PathId::ZERO -3761 self.on_packet_authenticated( -3762 now, -3763 SpaceKind::Initial, -3764 path_id, -3765 ecn, -3766 Some(packet_number), -3767 false, -3768 false, -3769 ); -3770 -3771 let packet: Packet = packet.into(); -3772 -3773 let mut qlog = QlogRecvPacket::new(len); -3774 qlog.header(&packet.header, Some(packet_number), path_id); -3775 -3776 self.process_decrypted_packet( -3777 now, -3778 network_path, -3779 path_id, -3780 Some(packet_number), -3781 packet, -3782 &mut qlog, -3783 )?; -3784 self.qlog.emit_packet_received(qlog, now); -3785 if let Some(data) = remaining { -3786 self.handle_coalesced(now, network_path, path_id, ecn, data); -3787 } -3788 -3789 self.qlog.emit_recovery_metrics( -3790 path_id, -3791 &mut self.paths.get_mut(&path_id).unwrap().data, -3792 now, -3793 ); -3794 -3795 Ok(()) -3796 } -3797 -3798 fn init_0rtt(&mut self, now: Instant) { -3799 let Some((header, packet)) = self.crypto_state.session.early_crypto() else { -3800 return; -3801 }; -3802 if self.side.is_client() { -3803 match self.crypto_state.session.transport_parameters() { -3804 Ok(params) => { -3805 let params = params -3806 .expect("crypto layer didn't supply transport parameters with ticket"); -3807 // Certain values must not be cached -3808 let params = TransportParameters { -3809 initial_src_cid: None, -3810 original_dst_cid: None, -3811 preferred_address: None, -3812 retry_src_cid: None, -3813 stateless_reset_token: None, -3814 min_ack_delay: None, -3815 ack_delay_exponent: TransportParameters::default().ack_delay_exponent, -3816 max_ack_delay: TransportParameters::default().max_ack_delay, -3817 initial_max_path_id: None, -3818 ..params -3819 }; -3820 self.set_peer_params(params); -3821 self.qlog.emit_peer_transport_params_restored(self, now); -3822 } -3823 Err(e) => { -3824 error!("session ticket has malformed transport parameters: {}", e); -3825 return; -3826 } -3827 } -3828 } -3829 trace!("0-RTT enabled"); -3830 self.crypto_state.enable_zero_rtt(header, packet); -3831 } -3832 -3833 fn read_crypto( -3834 &mut self, -3835 space: SpaceId, -3836 crypto: &frame::Crypto, -3837 payload_len: usize, -3838 ) -> Result<(), TransportError> { -3839 let expected = if !self.state.is_handshake() { -3840 SpaceId::Data -3841 } else if self.highest_space == SpaceKind::Initial { -3842 SpaceId::Initial -3843 } else { -3844 // On the server, self.highest_space can be Data after receiving the client's first -3845 // flight, but we expect Handshake CRYPTO until the handshake is complete. -3846 SpaceId::Handshake -3847 }; -3848 // We can't decrypt Handshake packets when highest_space is Initial, CRYPTO frames in 0-RTT -3849 // packets are illegal, and we don't process 1-RTT packets until the handshake is -3850 // complete. Therefore, we will never see CRYPTO data from a later-than-expected space. -3851 debug_assert!(space <= expected, "received out-of-order CRYPTO data"); -3852 -3853 let end = crypto.offset + crypto.data.len() as u64; -3854 if space < expected -3855 && end -3856 > self.crypto_state.spaces[space.kind()] -3857 .crypto_stream -3858 .bytes_read() -3859 { -3860 warn!( -3861 "received new {:?} CRYPTO data when expecting {:?}", -3862 space, expected -3863 ); -3864 return Err(TransportError::PROTOCOL_VIOLATION( -3865 "new data at unexpected encryption level", -3866 )); -3867 } -3868 -3869 let crypto_space = &mut self.crypto_state.spaces[space.kind()]; -3870 let max = end.saturating_sub(crypto_space.crypto_stream.bytes_read()); -3871 if max > self.config.crypto_buffer_size as u64 { -3872 return Err(TransportError::CRYPTO_BUFFER_EXCEEDED("")); -3873 } -3874 -3875 crypto_space -3876 .crypto_stream -3877 .insert(crypto.offset, crypto.data.clone(), payload_len); -3878 while let Some(chunk) = crypto_space.crypto_stream.read(usize::MAX, true) { -3879 trace!("consumed {} CRYPTO bytes", chunk.bytes.len()); -3880 if self.crypto_state.session.read_handshake(&chunk.bytes)? { -3881 self.events.push_back(Event::HandshakeDataReady); -3882 } +3681 } +3682 } +3683 +3684 // Now handle the per-path state +3685 if let Some(timeout) = self.path_data(path_id).idle_timeout { +3686 if self.state.is_closed() { +3687 self.timers.stop( +3688 Timer::PerPath(path_id, PathTimer::PathIdle), +3689 self.qlog.with_time(now), +3690 ); +3691 } else { +3692 let dt = cmp::max(timeout, 3 * self.pto(space, path_id)); +3693 self.timers.set( +3694 Timer::PerPath(path_id, PathTimer::PathIdle), +3695 now + dt, +3696 self.qlog.with_time(now), +3697 ); +3698 } +3699 } +3700 } +3701 +3702 /// Resets both the [`ConnTimer::KeepAlive`] and [`PathTimer::PathKeepAlive`] timers +3703 fn reset_keep_alive(&mut self, path_id: PathId, now: Instant) { +3704 if !self.state.is_established() { +3705 return; +3706 } +3707 +3708 if let Some(interval) = self.config.keep_alive_interval { +3709 self.timers.set( +3710 Timer::Conn(ConnTimer::KeepAlive), +3711 now + interval, +3712 self.qlog.with_time(now), +3713 ); +3714 } +3715 +3716 if let Some(interval) = self.path_data(path_id).keep_alive { +3717 self.timers.set( +3718 Timer::PerPath(path_id, PathTimer::PathKeepAlive), +3719 now + interval, +3720 self.qlog.with_time(now), +3721 ); +3722 } +3723 } +3724 +3725 /// Sets the timer for when a previously issued CID should be retired next +3726 fn reset_cid_retirement(&mut self, now: Instant) { +3727 if let Some((_path, t)) = self.next_cid_retirement() { +3728 self.timers.set( +3729 Timer::Conn(ConnTimer::PushNewCid), +3730 t, +3731 self.qlog.with_time(now), +3732 ); +3733 } +3734 } +3735 +3736 /// The next time when a previously issued CID should be retired +3737 fn next_cid_retirement(&self) -> Option<(PathId, Instant)> { +3738 self.local_cid_state +3739 .iter() +3740 .filter_map(|(path_id, cid_state)| cid_state.next_timeout().map(|t| (*path_id, t))) +3741 .min_by_key(|(_path_id, timeout)| *timeout) +3742 } +3743 +3744 /// Handle the already-decrypted first packet from the client +3745 /// +3746 /// Decrypting the first packet in the `Endpoint` allows stateless packet handling to be more +3747 /// efficient. +3748 pub(crate) fn handle_first_packet( +3749 &mut self, +3750 now: Instant, +3751 network_path: FourTuple, +3752 ecn: Option<EcnCodepoint>, +3753 packet_number: u64, +3754 packet: InitialPacket, +3755 remaining: Option<BytesMut>, +3756 ) -> Result<(), ConnectionError> { +3757 let span = trace_span!("first recv"); +3758 let _guard = span.enter(); +3759 debug_assert!(self.side.is_server()); +3760 let len = packet.header_data.len() + packet.payload.len(); +3761 let path_id = PathId::ZERO; +3762 self.path_data_mut(path_id).total_recvd = len as u64; +3763 +3764 if let Some(hs) = self.state.as_handshake_mut() { +3765 hs.expected_token = packet.header.token.clone(); +3766 } else { +3767 unreachable!("first packet must be delivered in Handshake state"); +3768 } +3769 +3770 // The first packet is always on PathId::ZERO +3771 self.on_packet_authenticated( +3772 now, +3773 SpaceKind::Initial, +3774 path_id, +3775 ecn, +3776 Some(packet_number), +3777 false, +3778 false, +3779 ); +3780 +3781 let packet: Packet = packet.into(); +3782 +3783 let mut qlog = QlogRecvPacket::new(len); +3784 qlog.header(&packet.header, Some(packet_number), path_id); +3785 +3786 self.process_decrypted_packet( +3787 now, +3788 network_path, +3789 path_id, +3790 Some(packet_number), +3791 packet, +3792 &mut qlog, +3793 )?; +3794 self.qlog.emit_packet_received(qlog, now); +3795 if let Some(data) = remaining { +3796 self.handle_coalesced(now, network_path, path_id, ecn, data); +3797 } +3798 +3799 self.qlog.emit_recovery_metrics( +3800 path_id, +3801 &mut self.paths.get_mut(&path_id).unwrap().data, +3802 now, +3803 ); +3804 +3805 Ok(()) +3806 } +3807 +3808 fn init_0rtt(&mut self, now: Instant) { +3809 let Some((header, packet)) = self.crypto_state.session.early_crypto() else { +3810 return; +3811 }; +3812 if self.side.is_client() { +3813 match self.crypto_state.session.transport_parameters() { +3814 Ok(params) => { +3815 let params = params +3816 .expect("crypto layer didn't supply transport parameters with ticket"); +3817 // Certain values must not be cached +3818 let params = TransportParameters { +3819 initial_src_cid: None, +3820 original_dst_cid: None, +3821 preferred_address: None, +3822 retry_src_cid: None, +3823 stateless_reset_token: None, +3824 min_ack_delay: None, +3825 ack_delay_exponent: TransportParameters::default().ack_delay_exponent, +3826 max_ack_delay: TransportParameters::default().max_ack_delay, +3827 initial_max_path_id: None, +3828 ..params +3829 }; +3830 self.set_peer_params(params); +3831 self.qlog.emit_peer_transport_params_restored(self, now); +3832 } +3833 Err(e) => { +3834 error!("session ticket has malformed transport parameters: {}", e); +3835 return; +3836 } +3837 } +3838 } +3839 trace!("0-RTT enabled"); +3840 self.crypto_state.enable_zero_rtt(header, packet); +3841 } +3842 +3843 fn read_crypto( +3844 &mut self, +3845 space: SpaceId, +3846 crypto: &frame::Crypto, +3847 payload_len: usize, +3848 ) -> Result<(), TransportError> { +3849 let expected = if !self.state.is_handshake() { +3850 SpaceId::Data +3851 } else if self.highest_space == SpaceKind::Initial { +3852 SpaceId::Initial +3853 } else { +3854 // On the server, self.highest_space can be Data after receiving the client's first +3855 // flight, but we expect Handshake CRYPTO until the handshake is complete. +3856 SpaceId::Handshake +3857 }; +3858 // We can't decrypt Handshake packets when highest_space is Initial, CRYPTO frames in 0-RTT +3859 // packets are illegal, and we don't process 1-RTT packets until the handshake is +3860 // complete. Therefore, we will never see CRYPTO data from a later-than-expected space. +3861 debug_assert!(space <= expected, "received out-of-order CRYPTO data"); +3862 +3863 let end = crypto.offset + crypto.data.len() as u64; +3864 if space < expected +3865 && end +3866 > self.crypto_state.spaces[space.kind()] +3867 .crypto_stream +3868 .bytes_read() +3869 { +3870 warn!( +3871 "received new {:?} CRYPTO data when expecting {:?}", +3872 space, expected +3873 ); +3874 return Err(TransportError::PROTOCOL_VIOLATION( +3875 "new data at unexpected encryption level", +3876 )); +3877 } +3878 +3879 let crypto_space = &mut self.crypto_state.spaces[space.kind()]; +3880 let max = end.saturating_sub(crypto_space.crypto_stream.bytes_read()); +3881 if max > self.config.crypto_buffer_size as u64 { +3882 return Err(TransportError::CRYPTO_BUFFER_EXCEEDED("")); 3883 } 3884 -3885 Ok(()) -3886 } -3887 -3888 fn write_crypto(&mut self) { -3889 loop { -3890 let space = self.highest_space; -3891 let mut outgoing = Vec::new(); -3892 if let Some(crypto) = self.crypto_state.session.write_handshake(&mut outgoing) { -3893 match space { -3894 SpaceKind::Initial => { -3895 self.upgrade_crypto(SpaceKind::Handshake, crypto); -3896 } -3897 SpaceKind::Handshake => { -3898 self.upgrade_crypto(SpaceKind::Data, crypto); -3899 } -3900 SpaceKind::Data => unreachable!("got updated secrets during 1-RTT"), -3901 } -3902 } -3903 if outgoing.is_empty() { -3904 if space == self.highest_space { -3905 break; -3906 } else { -3907 // Keys updated, check for more data to send -3908 continue; -3909 } -3910 } -3911 let offset = self.crypto_state.spaces[space].crypto_offset; -3912 let outgoing = Bytes::from(outgoing); -3913 if let Some(hs) = self.state.as_handshake_mut() -3914 && space == SpaceKind::Initial -3915 && offset == 0 -3916 && self.side.is_client() -3917 { -3918 hs.client_hello = Some(outgoing.clone()); -3919 } -3920 self.crypto_state.spaces[space].crypto_offset += outgoing.len() as u64; -3921 trace!("wrote {} {:?} CRYPTO bytes", outgoing.len(), space); -3922 self.spaces[space].pending.crypto.push_back(frame::Crypto { -3923 offset, -3924 data: outgoing, -3925 }); -3926 } -3927 } -3928 -3929 /// Switch to stronger cryptography during handshake -3930 fn upgrade_crypto(&mut self, space: SpaceKind, crypto: Keys) { -3931 debug_assert!( -3932 !self.crypto_state.has_keys(space.encryption_level()), -3933 "already reached packet space {space:?}" -3934 ); -3935 trace!("{:?} keys ready", space); -3936 if space == SpaceKind::Data { -3937 // Precompute the first key update -3938 self.crypto_state.next_crypto = Some( -3939 self.crypto_state -3940 .session -3941 .next_1rtt_keys() -3942 .expect("handshake should be complete"), -3943 ); -3944 } -3945 -3946 self.crypto_state.spaces[space].keys = Some(crypto); -3947 debug_assert!(space > self.highest_space); -3948 self.highest_space = space; -3949 if space == SpaceKind::Data && self.side.is_client() { -3950 // Discard 0-RTT keys because 1-RTT keys are available. -3951 self.crypto_state.discard_zero_rtt(); -3952 } -3953 } -3954 -3955 fn discard_space(&mut self, now: Instant, space: SpaceKind) { -3956 debug_assert!(space != SpaceKind::Data); -3957 trace!("discarding {:?} keys", space); -3958 if space == SpaceKind::Initial { -3959 // No longer needed -3960 if let ConnectionSide::Client { token, .. } = &mut self.side { -3961 *token = Bytes::new(); -3962 } -3963 } -3964 self.crypto_state.spaces[space].keys = None; -3965 let space = &mut self.spaces[space]; -3966 let pns = space.for_path(PathId::ZERO); -3967 pns.time_of_last_ack_eliciting_packet = None; -3968 pns.loss_time = None; -3969 pns.loss_probes = 0; -3970 let sent_packets = mem::take(&mut pns.sent_packets); -3971 let path = self.paths.get_mut(&PathId::ZERO).unwrap(); -3972 for (_, packet) in sent_packets.into_iter() { -3973 path.data.remove_in_flight(&packet); -3974 } -3975 -3976 self.set_loss_detection_timer(now, PathId::ZERO) -3977 } -3978 -3979 fn handle_coalesced( -3980 &mut self, -3981 now: Instant, -3982 network_path: FourTuple, -3983 path_id: PathId, -3984 ecn: Option<EcnCodepoint>, -3985 data: BytesMut, -3986 ) { -3987 self.path_data_mut(path_id) -3988 .inc_total_recvd(data.len() as u64); -3989 let mut remaining = Some(data); -3990 let cid_len = self -3991 .local_cid_state -3992 .values() -3993 .map(|cid_state| cid_state.cid_len()) -3994 .next() -3995 .expect("one cid_state must exist"); -3996 while let Some(data) = remaining { -3997 match PartialDecode::new( -3998 data, -3999 &FixedLengthConnectionIdParser::new(cid_len), -4000 &[self.version], -4001 self.endpoint_config.grease_quic_bit, -4002 ) { -4003 Ok((partial_decode, rest)) => { -4004 remaining = rest; -4005 self.handle_decode(now, network_path, path_id, ecn, partial_decode); -4006 } -4007 Err(e) => { -4008 trace!("malformed header: {}", e); -4009 return; -4010 } -4011 } -4012 } -4013 } -4014 -4015 fn handle_decode( -4016 &mut self, -4017 now: Instant, -4018 network_path: FourTuple, -4019 path_id: PathId, -4020 ecn: Option<EcnCodepoint>, -4021 partial_decode: PartialDecode, -4022 ) { -4023 let qlog = QlogRecvPacket::new(partial_decode.len()); -4024 if let Some(decoded) = self -4025 .crypto_state -4026 .unprotect_header(partial_decode, self.peer_params.stateless_reset_token) -4027 { -4028 self.handle_packet( -4029 now, -4030 network_path, -4031 path_id, -4032 ecn, -4033 decoded.packet, -4034 decoded.stateless_reset, -4035 qlog, -4036 ); -4037 } -4038 } -4039 -4040 fn handle_packet( -4041 &mut self, -4042 now: Instant, -4043 network_path: FourTuple, -4044 path_id: PathId, -4045 ecn: Option<EcnCodepoint>, -4046 packet: Option<Packet>, -4047 stateless_reset: bool, -4048 mut qlog: QlogRecvPacket, -4049 ) { -4050 self.path_stats.for_path(path_id).udp_rx.ios += 1; -4051 -4052 if let Some(ref packet) = packet { -4053 trace!( -4054 "got {:?} packet ({} bytes) from {} using id {}", -4055 packet.header.space(), -4056 packet.payload.len() + packet.header_data.len(), -4057 network_path, -4058 packet.header.dst_cid(), -4059 ); -4060 } +3885 crypto_space +3886 .crypto_stream +3887 .insert(crypto.offset, crypto.data.clone(), payload_len); +3888 while let Some(chunk) = crypto_space.crypto_stream.read(usize::MAX, true) { +3889 trace!("consumed {} CRYPTO bytes", chunk.bytes.len()); +3890 if self.crypto_state.session.read_handshake(&chunk.bytes)? { +3891 self.events.push_back(Event::HandshakeDataReady); +3892 } +3893 } +3894 +3895 Ok(()) +3896 } +3897 +3898 fn write_crypto(&mut self) { +3899 loop { +3900 let space = self.highest_space; +3901 let mut outgoing = Vec::new(); +3902 if let Some(crypto) = self.crypto_state.session.write_handshake(&mut outgoing) { +3903 match space { +3904 SpaceKind::Initial => { +3905 self.upgrade_crypto(SpaceKind::Handshake, crypto); +3906 } +3907 SpaceKind::Handshake => { +3908 self.upgrade_crypto(SpaceKind::Data, crypto); +3909 } +3910 SpaceKind::Data => unreachable!("got updated secrets during 1-RTT"), +3911 } +3912 } +3913 if outgoing.is_empty() { +3914 if space == self.highest_space { +3915 break; +3916 } else { +3917 // Keys updated, check for more data to send +3918 continue; +3919 } +3920 } +3921 let offset = self.crypto_state.spaces[space].crypto_offset; +3922 let outgoing = Bytes::from(outgoing); +3923 if let Some(hs) = self.state.as_handshake_mut() +3924 && space == SpaceKind::Initial +3925 && offset == 0 +3926 && self.side.is_client() +3927 { +3928 hs.client_hello = Some(outgoing.clone()); +3929 } +3930 self.crypto_state.spaces[space].crypto_offset += outgoing.len() as u64; +3931 trace!("wrote {} {:?} CRYPTO bytes", outgoing.len(), space); +3932 self.spaces[space].pending.crypto.push_back(frame::Crypto { +3933 offset, +3934 data: outgoing, +3935 }); +3936 } +3937 } +3938 +3939 /// Switch to stronger cryptography during handshake +3940 fn upgrade_crypto(&mut self, space: SpaceKind, crypto: Keys) { +3941 debug_assert!( +3942 !self.crypto_state.has_keys(space.encryption_level()), +3943 "already reached packet space {space:?}" +3944 ); +3945 trace!("{:?} keys ready", space); +3946 if space == SpaceKind::Data { +3947 // Precompute the first key update +3948 self.crypto_state.next_crypto = Some( +3949 self.crypto_state +3950 .session +3951 .next_1rtt_keys() +3952 .expect("handshake should be complete"), +3953 ); +3954 } +3955 +3956 self.crypto_state.spaces[space].keys = Some(crypto); +3957 debug_assert!(space > self.highest_space); +3958 self.highest_space = space; +3959 if space == SpaceKind::Data && self.side.is_client() { +3960 // Discard 0-RTT keys because 1-RTT keys are available. +3961 self.crypto_state.discard_zero_rtt(); +3962 } +3963 } +3964 +3965 fn discard_space(&mut self, now: Instant, space: SpaceKind) { +3966 debug_assert!(space != SpaceKind::Data); +3967 trace!("discarding {:?} keys", space); +3968 if space == SpaceKind::Initial { +3969 // No longer needed +3970 if let ConnectionSide::Client { token, .. } = &mut self.side { +3971 *token = Bytes::new(); +3972 } +3973 } +3974 self.crypto_state.spaces[space].keys = None; +3975 let space = &mut self.spaces[space]; +3976 let pns = space.for_path(PathId::ZERO); +3977 pns.time_of_last_ack_eliciting_packet = None; +3978 pns.loss_time = None; +3979 pns.loss_probes = 0; +3980 let sent_packets = mem::take(&mut pns.sent_packets); +3981 let path = self.paths.get_mut(&PathId::ZERO).unwrap(); +3982 for (_, packet) in sent_packets.into_iter() { +3983 path.data.remove_in_flight(&packet); +3984 } +3985 +3986 self.set_loss_detection_timer(now, PathId::ZERO) +3987 } +3988 +3989 fn handle_coalesced( +3990 &mut self, +3991 now: Instant, +3992 network_path: FourTuple, +3993 path_id: PathId, +3994 ecn: Option<EcnCodepoint>, +3995 data: BytesMut, +3996 ) { +3997 self.path_data_mut(path_id) +3998 .inc_total_recvd(data.len() as u64); +3999 let mut remaining = Some(data); +4000 let cid_len = self +4001 .local_cid_state +4002 .values() +4003 .map(|cid_state| cid_state.cid_len()) +4004 .next() +4005 .expect("one cid_state must exist"); +4006 while let Some(data) = remaining { +4007 match PartialDecode::new( +4008 data, +4009 &FixedLengthConnectionIdParser::new(cid_len), +4010 &[self.version], +4011 self.endpoint_config.grease_quic_bit, +4012 ) { +4013 Ok((partial_decode, rest)) => { +4014 remaining = rest; +4015 self.handle_decode(now, network_path, path_id, ecn, partial_decode); +4016 } +4017 Err(e) => { +4018 trace!("malformed header: {}", e); +4019 return; +4020 } +4021 } +4022 } +4023 } +4024 +4025 fn handle_decode( +4026 &mut self, +4027 now: Instant, +4028 network_path: FourTuple, +4029 path_id: PathId, +4030 ecn: Option<EcnCodepoint>, +4031 partial_decode: PartialDecode, +4032 ) { +4033 let qlog = QlogRecvPacket::new(partial_decode.len()); +4034 if let Some(decoded) = self +4035 .crypto_state +4036 .unprotect_header(partial_decode, self.peer_params.stateless_reset_token) +4037 { +4038 self.handle_packet( +4039 now, +4040 network_path, +4041 path_id, +4042 ecn, +4043 decoded.packet, +4044 decoded.stateless_reset, +4045 qlog, +4046 ); +4047 } +4048 } +4049 +4050 fn handle_packet( +4051 &mut self, +4052 now: Instant, +4053 network_path: FourTuple, +4054 path_id: PathId, +4055 ecn: Option<EcnCodepoint>, +4056 packet: Option<Packet>, +4057 stateless_reset: bool, +4058 mut qlog: QlogRecvPacket, +4059 ) { +4060 self.path_stats.for_path(path_id).udp_rx.ios += 1; 4061 -4062 if self.is_handshaking() { -4063 if path_id != PathId::ZERO { -4064 debug!(%network_path, %path_id, "discarding multipath packet during handshake"); -4065 return; -4066 } -4067 if network_path != self.path_data_mut(path_id).network_path { -4068 if let Some(hs) = self.state.as_handshake() { -4069 if hs.allow_server_migration { -4070 trace!(%network_path, prev = %self.path_data(path_id).network_path, "server migrated to new remote"); -4071 self.path_data_mut(path_id).network_path = network_path; -4072 self.qlog.emit_tuple_assigned(path_id, network_path, now); -4073 } else { -4074 debug!("discarding packet with unexpected remote during handshake"); -4075 return; -4076 } -4077 } else { -4078 debug!("discarding packet with unexpected remote during handshake"); -4079 return; -4080 } -4081 } -4082 } -4083 -4084 let was_closed = self.state.is_closed(); -4085 let was_drained = self.state.is_drained(); -4086 -4087 let decrypted = match packet { -4088 None => Err(None), -4089 Some(mut packet) => self -4090 .decrypt_packet(now, path_id, &mut packet) -4091 .map(move |number| (packet, number)), -4092 }; -4093 let result = match decrypted { -4094 _ if stateless_reset => { -4095 debug!("got stateless reset"); -4096 Err(ConnectionError::Reset) -4097 } -4098 Err(Some(e)) => { -4099 warn!("illegal packet: {}", e); -4100 Err(e.into()) -4101 } -4102 Err(None) => { -4103 debug!("failed to authenticate packet"); -4104 self.authentication_failures += 1; -4105 let integrity_limit = self -4106 .crypto_state -4107 .integrity_limit(self.highest_space) -4108 .unwrap(); -4109 if self.authentication_failures > integrity_limit { -4110 Err(TransportError::AEAD_LIMIT_REACHED("integrity limit violated").into()) -4111 } else { -4112 return; -4113 } -4114 } -4115 Ok((packet, number)) => { -4116 qlog.header(&packet.header, number, path_id); -4117 let span = match number { -4118 Some(pn) => trace_span!("recv", space = ?packet.header.space(), pn), -4119 None => trace_span!("recv", space = ?packet.header.space()), -4120 }; -4121 let _guard = span.enter(); -4122 -4123 let dedup = self.spaces[packet.header.space()] -4124 .path_space_mut(path_id) -4125 .map(|pns| &mut pns.dedup); -4126 if number.zip(dedup).is_some_and(|(n, d)| d.insert(n)) { -4127 debug!("discarding possible duplicate packet"); -4128 self.qlog.emit_packet_received(qlog, now); -4129 return; -4130 } else if self.state.is_handshake() && packet.header.is_short() { -4131 // TODO: SHOULD buffer these to improve reordering tolerance. -4132 trace!("dropping short packet during handshake"); -4133 self.qlog.emit_packet_received(qlog, now); -4134 return; -4135 } else { -4136 if let Header::Initial(InitialHeader { ref token, .. }) = packet.header -4137 && let Some(hs) = self.state.as_handshake() -4138 && self.side.is_server() -4139 && token != &hs.expected_token -4140 { -4141 // Clients must send the same retry token in every Initial. Initial -4142 // packets can be spoofed, so we discard rather than killing the -4143 // connection. -4144 warn!("discarding Initial with invalid retry token"); -4145 self.qlog.emit_packet_received(qlog, now); -4146 return; -4147 } -4148 -4149 if !self.state.is_closed() { -4150 let spin = match packet.header { -4151 Header::Short { spin, .. } => spin, -4152 _ => false, -4153 }; -4154 -4155 if self.side().is_server() && !self.abandoned_paths.contains(&path_id) { -4156 // Only the client is allowed to open paths -4157 self.ensure_path(path_id, network_path, now, number); -4158 } -4159 if self.paths.contains_key(&path_id) { -4160 self.on_packet_authenticated( -4161 now, -4162 packet.header.space(), -4163 path_id, -4164 ecn, -4165 number, -4166 spin, -4167 packet.header.is_1rtt(), -4168 ); -4169 } -4170 } -4171 -4172 let res = self.process_decrypted_packet( -4173 now, -4174 network_path, -4175 path_id, -4176 number, -4177 packet, -4178 &mut qlog, -4179 ); -4180 -4181 self.qlog.emit_packet_received(qlog, now); -4182 res -4183 } -4184 } -4185 }; -4186 -4187 // State transitions for error cases -4188 if let Err(conn_err) = result { -4189 match conn_err { -4190 ConnectionError::ApplicationClosed(reason) => self.state.move_to_closed(reason), -4191 ConnectionError::ConnectionClosed(reason) => self.state.move_to_closed(reason), -4192 ConnectionError::Reset -4193 | ConnectionError::TransportError(TransportError { -4194 code: TransportErrorCode::AEAD_LIMIT_REACHED, -4195 .. -4196 }) => { -4197 self.state.move_to_drained(Some(conn_err)); -4198 } -4199 ConnectionError::TimedOut => { -4200 unreachable!("timeouts aren't generated by packet processing"); -4201 } -4202 ConnectionError::TransportError(err) => { -4203 debug!("closing connection due to transport error: {}", err); -4204 self.state.move_to_closed(err); -4205 } -4206 ConnectionError::VersionMismatch => { -4207 self.state.move_to_draining(Some(conn_err)); +4062 if let Some(ref packet) = packet { +4063 trace!( +4064 "got {:?} packet ({} bytes) from {} using id {}", +4065 packet.header.space(), +4066 packet.payload.len() + packet.header_data.len(), +4067 network_path, +4068 packet.header.dst_cid(), +4069 ); +4070 } +4071 +4072 if self.is_handshaking() { +4073 if path_id != PathId::ZERO { +4074 debug!(%network_path, %path_id, "discarding multipath packet during handshake"); +4075 return; +4076 } +4077 if network_path != self.path_data_mut(path_id).network_path { +4078 if let Some(hs) = self.state.as_handshake() { +4079 if hs.allow_server_migration { +4080 trace!(%network_path, prev = %self.path_data(path_id).network_path, "server migrated to new remote"); +4081 self.path_data_mut(path_id).network_path = network_path; +4082 self.qlog.emit_tuple_assigned(path_id, network_path, now); +4083 } else { +4084 debug!("discarding packet with unexpected remote during handshake"); +4085 return; +4086 } +4087 } else { +4088 debug!("discarding packet with unexpected remote during handshake"); +4089 return; +4090 } +4091 } +4092 } +4093 +4094 let was_closed = self.state.is_closed(); +4095 let was_drained = self.state.is_drained(); +4096 +4097 let decrypted = match packet { +4098 None => Err(None), +4099 Some(mut packet) => self +4100 .decrypt_packet(now, path_id, &mut packet) +4101 .map(move |number| (packet, number)), +4102 }; +4103 let result = match decrypted { +4104 _ if stateless_reset => { +4105 debug!("got stateless reset"); +4106 Err(ConnectionError::Reset) +4107 } +4108 Err(Some(e)) => { +4109 warn!("illegal packet: {}", e); +4110 Err(e.into()) +4111 } +4112 Err(None) => { +4113 debug!("failed to authenticate packet"); +4114 self.authentication_failures += 1; +4115 let integrity_limit = self +4116 .crypto_state +4117 .integrity_limit(self.highest_space) +4118 .unwrap(); +4119 if self.authentication_failures > integrity_limit { +4120 Err(TransportError::AEAD_LIMIT_REACHED("integrity limit violated").into()) +4121 } else { +4122 return; +4123 } +4124 } +4125 Ok((packet, number)) => { +4126 qlog.header(&packet.header, number, path_id); +4127 let span = match number { +4128 Some(pn) => trace_span!("recv", space = ?packet.header.space(), pn), +4129 None => trace_span!("recv", space = ?packet.header.space()), +4130 }; +4131 let _guard = span.enter(); +4132 +4133 let dedup = self.spaces[packet.header.space()] +4134 .path_space_mut(path_id) +4135 .map(|pns| &mut pns.dedup); +4136 if number.zip(dedup).is_some_and(|(n, d)| d.insert(n)) { +4137 debug!("discarding possible duplicate packet"); +4138 self.qlog.emit_packet_received(qlog, now); +4139 return; +4140 } else if self.state.is_handshake() && packet.header.is_short() { +4141 // TODO: SHOULD buffer these to improve reordering tolerance. +4142 trace!("dropping short packet during handshake"); +4143 self.qlog.emit_packet_received(qlog, now); +4144 return; +4145 } else { +4146 if let Header::Initial(InitialHeader { ref token, .. }) = packet.header +4147 && let Some(hs) = self.state.as_handshake() +4148 && self.side.is_server() +4149 && token != &hs.expected_token +4150 { +4151 // Clients must send the same retry token in every Initial. Initial +4152 // packets can be spoofed, so we discard rather than killing the +4153 // connection. +4154 warn!("discarding Initial with invalid retry token"); +4155 self.qlog.emit_packet_received(qlog, now); +4156 return; +4157 } +4158 +4159 if !self.state.is_closed() { +4160 let spin = match packet.header { +4161 Header::Short { spin, .. } => spin, +4162 _ => false, +4163 }; +4164 +4165 if self.side().is_server() && !self.abandoned_paths.contains(&path_id) { +4166 // Only the client is allowed to open paths +4167 self.ensure_path(path_id, network_path, now, number); +4168 } +4169 if self.paths.contains_key(&path_id) { +4170 self.on_packet_authenticated( +4171 now, +4172 packet.header.space(), +4173 path_id, +4174 ecn, +4175 number, +4176 spin, +4177 packet.header.is_1rtt(), +4178 ); +4179 } +4180 } +4181 +4182 let res = self.process_decrypted_packet( +4183 now, +4184 network_path, +4185 path_id, +4186 number, +4187 packet, +4188 &mut qlog, +4189 ); +4190 +4191 self.qlog.emit_packet_received(qlog, now); +4192 res +4193 } +4194 } +4195 }; +4196 +4197 // State transitions for error cases +4198 if let Err(conn_err) = result { +4199 match conn_err { +4200 ConnectionError::ApplicationClosed(reason) => self.state.move_to_closed(reason), +4201 ConnectionError::ConnectionClosed(reason) => self.state.move_to_closed(reason), +4202 ConnectionError::Reset +4203 | ConnectionError::TransportError(TransportError { +4204 code: TransportErrorCode::AEAD_LIMIT_REACHED, +4205 .. +4206 }) => { +4207 self.state.move_to_drained(Some(conn_err)); 4208 } -4209 ConnectionError::LocallyClosed => { -4210 unreachable!("LocallyClosed isn't generated by packet processing"); +4209 ConnectionError::TimedOut => { +4210 unreachable!("timeouts aren't generated by packet processing"); 4211 } -4212 ConnectionError::CidsExhausted => { -4213 unreachable!("CidsExhausted isn't generated by packet processing"); -4214 } -4215 }; -4216 } -4217 -4218 if !was_closed && self.state.is_closed() { -4219 self.close_common(); -4220 if !self.state.is_drained() { -4221 self.set_close_timer(now); -4222 } -4223 } -4224 if !was_drained && self.state.is_drained() { -4225 self.endpoint_events.push_back(EndpointEventInner::Drained); -4226 // Close timer may have been started previously, e.g. if we sent a close and got a -4227 // stateless reset in response -4228 self.timers -4229 .stop(Timer::Conn(ConnTimer::Close), self.qlog.with_time(now)); -4230 } -4231 -4232 // Transmit CONNECTION_CLOSE if necessary. -4233 // -4234 // If we received a valid packet and we are in the closed state we should respond -4235 // with a CONNECTION_CLOSE frame. -4236 // TODO: This SHOULD be rate-limited according to §10.2.1 of QUIC-TRANSPORT, but -4237 // that does not yet happen. This is triggered by each received packet. -4238 if matches!(self.state.as_type(), StateType::Closed) { -4239 // From https://www.rfc-editor.org/rfc/rfc9000.html#section-10.2.1-7 -4240 // -4241 // While in the closing state we must either: -4242 // - discard packets coming from an un-validated remote OR -4243 // - ensure we do not send more than 3 times the received data -4244 // -4245 // Doing the 2nd would mean we would be able to send CONNECTION_CLOSE to a peer -4246 // who was (involuntary) migrated just at the time we initiated immediate -4247 // close. It is a lot more work though. So while we would like to do this for -4248 // now we only do 1. -4249 // -4250 // Another shortcoming of the current implementation is that when we have a -4251 // previous PathData which is validated and the remote matches that path, we -4252 // should schedule CONNECTION_CLOSE on that path. However currently we can not -4253 // schedule such a packet. We should also fix this some day. This makes us -4254 // vulnerable to an attacker faking a migration at the right time and then we'd -4255 // be unable to send the CONNECTION_CLOSE to the real remote. -4256 if self -4257 .paths -4258 .get(&path_id) -4259 .map(|p| p.data.validated && p.data.network_path == network_path) -4260 .unwrap_or(false) -4261 { -4262 self.connection_close_pending = true; -4263 } -4264 } -4265 } -4266 -4267 fn process_decrypted_packet( -4268 &mut self, -4269 now: Instant, -4270 network_path: FourTuple, -4271 path_id: PathId, -4272 number: Option<u64>, -4273 packet: Packet, -4274 qlog: &mut QlogRecvPacket, -4275 ) -> Result<(), ConnectionError> { -4276 if !self.paths.contains_key(&path_id) { -4277 // There is a chance this is a server side, first (for this path) packet, which would -4278 // be a protocol violation. It's more likely, however, that this is a packet of a -4279 // pruned path -4280 trace!(%path_id, ?number, "discarding packet for unknown path"); -4281 return Ok(()); -4282 } -4283 let state = match self.state.as_type() { -4284 StateType::Established => { -4285 match packet.header.space() { -4286 SpaceKind::Data => self.process_payload( -4287 now, -4288 network_path, -4289 path_id, -4290 number.unwrap(), -4291 packet, -4292 qlog, -4293 )?, -4294 _ if packet.header.has_frames() => { -4295 self.process_early_payload(now, path_id, packet, qlog)? -4296 } -4297 _ => { -4298 trace!("discarding unexpected pre-handshake packet"); -4299 } -4300 } -4301 return Ok(()); -4302 } -4303 StateType::Closed => { -4304 for result in frame::Iter::new(packet.payload.freeze())? { -4305 let frame = match result { -4306 Ok(frame) => frame, -4307 Err(err) => { -4308 debug!("frame decoding error: {err:?}"); -4309 continue; -4310 } -4311 }; -4312 qlog.frame(&frame); -4313 -4314 if let Frame::Padding = frame { -4315 continue; -4316 }; -4317 -4318 self.path_stats -4319 .for_path(path_id) -4320 .frame_rx -4321 .record(frame.ty()); -4322 -4323 if let Frame::Close(_error) = frame { -4324 self.state.move_to_draining(None); -4325 break; -4326 } -4327 } -4328 return Ok(()); -4329 } -4330 StateType::Draining | StateType::Drained => return Ok(()), -4331 StateType::Handshake => self.state.as_handshake_mut().expect("checked"), -4332 }; -4333 -4334 match packet.header { -4335 Header::Retry { -4336 src_cid: remote_cid, -4337 .. -4338 } => { -4339 debug_assert_eq!(path_id, PathId::ZERO); -4340 if self.side.is_server() { -4341 return Err(TransportError::PROTOCOL_VIOLATION("client sent Retry").into()); -4342 } +4212 ConnectionError::TransportError(err) => { +4213 debug!("closing connection due to transport error: {}", err); +4214 self.state.move_to_closed(err); +4215 } +4216 ConnectionError::VersionMismatch => { +4217 self.state.move_to_draining(Some(conn_err)); +4218 } +4219 ConnectionError::LocallyClosed => { +4220 unreachable!("LocallyClosed isn't generated by packet processing"); +4221 } +4222 ConnectionError::CidsExhausted => { +4223 unreachable!("CidsExhausted isn't generated by packet processing"); +4224 } +4225 }; +4226 } +4227 +4228 if !was_closed && self.state.is_closed() { +4229 self.close_common(); +4230 if !self.state.is_drained() { +4231 self.set_close_timer(now); +4232 } +4233 } +4234 if !was_drained && self.state.is_drained() { +4235 self.endpoint_events.push_back(EndpointEventInner::Drained); +4236 // Close timer may have been started previously, e.g. if we sent a close and got a +4237 // stateless reset in response +4238 self.timers +4239 .stop(Timer::Conn(ConnTimer::Close), self.qlog.with_time(now)); +4240 } +4241 +4242 // Transmit CONNECTION_CLOSE if necessary. +4243 // +4244 // If we received a valid packet and we are in the closed state we should respond +4245 // with a CONNECTION_CLOSE frame. +4246 // TODO: This SHOULD be rate-limited according to §10.2.1 of QUIC-TRANSPORT, but +4247 // that does not yet happen. This is triggered by each received packet. +4248 if matches!(self.state.as_type(), StateType::Closed) { +4249 // From https://www.rfc-editor.org/rfc/rfc9000.html#section-10.2.1-7 +4250 // +4251 // While in the closing state we must either: +4252 // - discard packets coming from an un-validated remote OR +4253 // - ensure we do not send more than 3 times the received data +4254 // +4255 // Doing the 2nd would mean we would be able to send CONNECTION_CLOSE to a peer +4256 // who was (involuntary) migrated just at the time we initiated immediate +4257 // close. It is a lot more work though. So while we would like to do this for +4258 // now we only do 1. +4259 // +4260 // Another shortcoming of the current implementation is that when we have a +4261 // previous PathData which is validated and the remote matches that path, we +4262 // should schedule CONNECTION_CLOSE on that path. However currently we can not +4263 // schedule such a packet. We should also fix this some day. This makes us +4264 // vulnerable to an attacker faking a migration at the right time and then we'd +4265 // be unable to send the CONNECTION_CLOSE to the real remote. +4266 if self +4267 .paths +4268 .get(&path_id) +4269 .map(|p| p.data.validated && p.data.network_path == network_path) +4270 .unwrap_or(false) +4271 { +4272 self.connection_close_pending = true; +4273 } +4274 } +4275 } +4276 +4277 fn process_decrypted_packet( +4278 &mut self, +4279 now: Instant, +4280 network_path: FourTuple, +4281 path_id: PathId, +4282 number: Option<u64>, +4283 packet: Packet, +4284 qlog: &mut QlogRecvPacket, +4285 ) -> Result<(), ConnectionError> { +4286 if !self.paths.contains_key(&path_id) { +4287 // There is a chance this is a server side, first (for this path) packet, which would +4288 // be a protocol violation. It's more likely, however, that this is a packet of a +4289 // pruned path +4290 trace!(%path_id, ?number, "discarding packet for unknown path"); +4291 return Ok(()); +4292 } +4293 let state = match self.state.as_type() { +4294 StateType::Established => { +4295 match packet.header.space() { +4296 SpaceKind::Data => self.process_payload( +4297 now, +4298 network_path, +4299 path_id, +4300 number.unwrap(), +4301 packet, +4302 qlog, +4303 )?, +4304 _ if packet.header.has_frames() => { +4305 self.process_early_payload(now, path_id, packet, qlog)? +4306 } +4307 _ => { +4308 trace!("discarding unexpected pre-handshake packet"); +4309 } +4310 } +4311 return Ok(()); +4312 } +4313 StateType::Closed => { +4314 for result in frame::Iter::new(packet.payload.freeze())? { +4315 let frame = match result { +4316 Ok(frame) => frame, +4317 Err(err) => { +4318 debug!("frame decoding error: {err:?}"); +4319 continue; +4320 } +4321 }; +4322 qlog.frame(&frame); +4323 +4324 if let Frame::Padding = frame { +4325 continue; +4326 }; +4327 +4328 self.path_stats +4329 .for_path(path_id) +4330 .frame_rx +4331 .record(frame.ty()); +4332 +4333 if let Frame::Close(_error) = frame { +4334 self.state.move_to_draining(None); +4335 break; +4336 } +4337 } +4338 return Ok(()); +4339 } +4340 StateType::Draining | StateType::Drained => return Ok(()), +4341 StateType::Handshake => self.state.as_handshake_mut().expect("checked"), +4342 }; 4343 -4344 let is_valid_retry = self -4345 .remote_cids -4346 .get(&path_id) -4347 .map(|cids| cids.active()) -4348 .map(|orig_dst_cid| { -4349 self.crypto_state.session.is_valid_retry( -4350 orig_dst_cid, -4351 &packet.header_data, -4352 &packet.payload, -4353 ) -4354 }) -4355 .unwrap_or_default(); -4356 if self.total_authed_packets > 1 -4357 || packet.payload.len() <= 16 // token + 16 byte tag -4358 || !is_valid_retry -4359 { -4360 trace!("discarding invalid Retry"); -4361 // - After the client has received and processed an Initial or Retry -4362 // packet from the server, it MUST discard any subsequent Retry -4363 // packets that it receives. -4364 // - A client MUST discard a Retry packet with a zero-length Retry Token -4365 // field. -4366 // - Clients MUST discard Retry packets that have a Retry Integrity Tag -4367 // that cannot be validated -4368 return Ok(()); -4369 } -4370 -4371 trace!("retrying with CID {}", remote_cid); -4372 let client_hello = state.client_hello.take().unwrap(); -4373 self.retry_src_cid = Some(remote_cid); -4374 self.remote_cids -4375 .get_mut(&path_id) -4376 .expect("PathId::ZERO not yet abandoned, is_valid_retry would have been false") -4377 .update_initial_cid(remote_cid); -4378 self.remote_handshake_cid = remote_cid; -4379 -4380 let space = &mut self.spaces[SpaceId::Initial]; -4381 if let Some(info) = space.for_path(PathId::ZERO).take(0) { -4382 self.on_packet_acked(now, PathId::ZERO, info); -4383 }; -4384 -4385 self.discard_space(now, SpaceKind::Initial); // Make sure we clean up after -4386 // any retransmitted Initials -4387 let crypto_space = &mut self.crypto_state.spaces[SpaceKind::Initial]; -4388 crypto_space.keys = Some( -4389 self.crypto_state -4390 .session -4391 .initial_keys(remote_cid, self.side.side()), -4392 ); -4393 crypto_space.crypto_offset = client_hello.len() as u64; +4344 match packet.header { +4345 Header::Retry { +4346 src_cid: remote_cid, +4347 .. +4348 } => { +4349 debug_assert_eq!(path_id, PathId::ZERO); +4350 if self.side.is_server() { +4351 return Err(TransportError::PROTOCOL_VIOLATION("client sent Retry").into()); +4352 } +4353 +4354 let is_valid_retry = self +4355 .remote_cids +4356 .get(&path_id) +4357 .map(|cids| cids.active()) +4358 .map(|orig_dst_cid| { +4359 self.crypto_state.session.is_valid_retry( +4360 orig_dst_cid, +4361 &packet.header_data, +4362 &packet.payload, +4363 ) +4364 }) +4365 .unwrap_or_default(); +4366 if self.total_authed_packets > 1 +4367 || packet.payload.len() <= 16 // token + 16 byte tag +4368 || !is_valid_retry +4369 { +4370 trace!("discarding invalid Retry"); +4371 // - After the client has received and processed an Initial or Retry +4372 // packet from the server, it MUST discard any subsequent Retry +4373 // packets that it receives. +4374 // - A client MUST discard a Retry packet with a zero-length Retry Token +4375 // field. +4376 // - Clients MUST discard Retry packets that have a Retry Integrity Tag +4377 // that cannot be validated +4378 return Ok(()); +4379 } +4380 +4381 trace!("retrying with CID {}", remote_cid); +4382 let client_hello = state.client_hello.take().unwrap(); +4383 self.retry_src_cid = Some(remote_cid); +4384 self.remote_cids +4385 .get_mut(&path_id) +4386 .expect("PathId::ZERO not yet abandoned, is_valid_retry would have been false") +4387 .update_initial_cid(remote_cid); +4388 self.remote_handshake_cid = remote_cid; +4389 +4390 let space = &mut self.spaces[SpaceId::Initial]; +4391 if let Some(info) = space.for_path(PathId::ZERO).take(0) { +4392 self.on_packet_acked(now, PathId::ZERO, info); +4393 }; 4394 -4395 let next_pn = self.spaces[SpaceId::Initial] -4396 .for_path(path_id) -4397 .next_packet_number; -4398 self.spaces[SpaceId::Initial] = { -4399 let mut space = PacketSpace::new(now, SpaceId::Initial, &mut self.rng); -4400 space.for_path(path_id).next_packet_number = next_pn; -4401 space.pending.crypto.push_back(frame::Crypto { -4402 offset: 0, -4403 data: client_hello, -4404 }); -4405 space -4406 }; -4407 -4408 // Retransmit all 0-RTT data -4409 let zero_rtt = mem::take( -4410 &mut self.spaces[SpaceId::Data] -4411 .for_path(PathId::ZERO) -4412 .sent_packets, -4413 ); -4414 for (_, info) in zero_rtt.into_iter() { -4415 self.paths -4416 .get_mut(&PathId::ZERO) -4417 .unwrap() -4418 .remove_in_flight(&info); -4419 self.spaces[SpaceId::Data].pending |= info.retransmits; -4420 } -4421 self.streams.retransmit_all_for_0rtt(); -4422 -4423 let token_len = packet.payload.len() - 16; -4424 let ConnectionSide::Client { ref mut token, .. } = self.side else { -4425 unreachable!("we already short-circuited if we're server"); -4426 }; -4427 *token = packet.payload.freeze().split_to(token_len); -4428 -4429 self.state = State::handshake(state::Handshake { -4430 expected_token: Bytes::new(), -4431 remote_cid_set: false, -4432 client_hello: None, -4433 allow_server_migration: true, -4434 }); -4435 Ok(()) -4436 } -4437 Header::Long { -4438 ty: LongType::Handshake, -4439 src_cid: remote_cid, -4440 dst_cid: local_cid, -4441 .. -4442 } => { -4443 debug_assert_eq!(path_id, PathId::ZERO); -4444 if remote_cid != self.remote_handshake_cid { -4445 debug!( -4446 "discarding packet with mismatched remote CID: {} != {}", -4447 self.remote_handshake_cid, remote_cid -4448 ); -4449 return Ok(()); -4450 } -4451 self.on_path_validated(path_id); -4452 -4453 self.process_early_payload(now, path_id, packet, qlog)?; -4454 if self.state.is_closed() { -4455 return Ok(()); -4456 } -4457 -4458 if self.crypto_state.session.is_handshaking() { -4459 trace!("handshake ongoing"); -4460 return Ok(()); -4461 } +4395 self.discard_space(now, SpaceKind::Initial); // Make sure we clean up after +4396 // any retransmitted Initials +4397 let crypto_space = &mut self.crypto_state.spaces[SpaceKind::Initial]; +4398 crypto_space.keys = Some( +4399 self.crypto_state +4400 .session +4401 .initial_keys(remote_cid, self.side.side()), +4402 ); +4403 crypto_space.crypto_offset = client_hello.len() as u64; +4404 +4405 let next_pn = self.spaces[SpaceId::Initial] +4406 .for_path(path_id) +4407 .next_packet_number; +4408 self.spaces[SpaceId::Initial] = { +4409 let mut space = PacketSpace::new(now, SpaceId::Initial, &mut self.rng); +4410 space.for_path(path_id).next_packet_number = next_pn; +4411 space.pending.crypto.push_back(frame::Crypto { +4412 offset: 0, +4413 data: client_hello, +4414 }); +4415 space +4416 }; +4417 +4418 // Retransmit all 0-RTT data +4419 let zero_rtt = mem::take( +4420 &mut self.spaces[SpaceId::Data] +4421 .for_path(PathId::ZERO) +4422 .sent_packets, +4423 ); +4424 for (_, info) in zero_rtt.into_iter() { +4425 self.paths +4426 .get_mut(&PathId::ZERO) +4427 .unwrap() +4428 .remove_in_flight(&info); +4429 self.spaces[SpaceId::Data].pending |= info.retransmits; +4430 } +4431 self.streams.retransmit_all_for_0rtt(); +4432 +4433 let token_len = packet.payload.len() - 16; +4434 let ConnectionSide::Client { ref mut token, .. } = self.side else { +4435 unreachable!("we already short-circuited if we're server"); +4436 }; +4437 *token = packet.payload.freeze().split_to(token_len); +4438 +4439 self.state = State::handshake(state::Handshake { +4440 expected_token: Bytes::new(), +4441 remote_cid_set: false, +4442 client_hello: None, +4443 allow_server_migration: true, +4444 }); +4445 Ok(()) +4446 } +4447 Header::Long { +4448 ty: LongType::Handshake, +4449 src_cid: remote_cid, +4450 dst_cid: local_cid, +4451 .. +4452 } => { +4453 debug_assert_eq!(path_id, PathId::ZERO); +4454 if remote_cid != self.remote_handshake_cid { +4455 debug!( +4456 "discarding packet with mismatched remote CID: {} != {}", +4457 self.remote_handshake_cid, remote_cid +4458 ); +4459 return Ok(()); +4460 } +4461 self.on_path_validated(path_id); 4462 -4463 if self.side.is_client() { -4464 // Client-only because server params were set from the client's Initial -4465 let params = self -4466 .crypto_state -4467 .session -4468 .transport_parameters()? -4469 .ok_or_else(|| { -4470 TransportError::new( -4471 TransportErrorCode::crypto(0x6d), -4472 "transport parameters missing".to_owned(), -4473 ) -4474 })?; -4475 -4476 if self.has_0rtt() { -4477 if !self.crypto_state.session.early_data_accepted().unwrap() { -4478 debug_assert!(self.side.is_client()); -4479 debug!("0-RTT rejected"); -4480 self.crypto_state.accepted_0rtt = false; -4481 self.streams.zero_rtt_rejected(); -4482 -4483 // Discard already-queued frames -4484 self.spaces[SpaceId::Data].pending = Retransmits::default(); +4463 self.process_early_payload(now, path_id, packet, qlog)?; +4464 if self.state.is_closed() { +4465 return Ok(()); +4466 } +4467 +4468 if self.crypto_state.session.is_handshaking() { +4469 trace!("handshake ongoing"); +4470 return Ok(()); +4471 } +4472 +4473 if self.side.is_client() { +4474 // Client-only because server params were set from the client's Initial +4475 let params = self +4476 .crypto_state +4477 .session +4478 .transport_parameters()? +4479 .ok_or_else(|| { +4480 TransportError::new( +4481 TransportErrorCode::crypto(0x6d), +4482 "transport parameters missing".to_owned(), +4483 ) +4484 })?; 4485 -4486 // Discard 0-RTT packets -4487 let sent_packets = mem::take( -4488 &mut self.spaces[SpaceId::Data].for_path(path_id).sent_packets, -4489 ); -4490 for (_, packet) in sent_packets.into_iter() { -4491 self.paths -4492 .get_mut(&path_id) -4493 .unwrap() -4494 .remove_in_flight(&packet); -4495 } -4496 } else { -4497 self.crypto_state.accepted_0rtt = true; -4498 params.validate_resumption_from(&self.peer_params)?; -4499 } -4500 } -4501 if let Some(token) = params.stateless_reset_token { -4502 let remote = self.path_data(path_id).network_path.remote; -4503 debug_assert!(!self.state.is_drained()); // requirement for endpoint events, checked above -4504 self.endpoint_events -4505 .push_back(EndpointEventInner::ResetToken(path_id, remote, token)); -4506 } -4507 self.handle_peer_params(params, local_cid, remote_cid, now)?; -4508 self.issue_first_cids(now); -4509 } else { -4510 // Server-only -4511 self.spaces[SpaceId::Data].pending.handshake_done = true; -4512 self.discard_space(now, SpaceKind::Handshake); -4513 self.events.push_back(Event::HandshakeConfirmed); -4514 trace!("handshake confirmed"); -4515 } -4516 -4517 self.events.push_back(Event::Connected); -4518 self.state.move_to_established(); -4519 trace!("established"); -4520 -4521 // Multipath can only be enabled after the state has reached Established. -4522 // So this can not happen any earlier. -4523 self.issue_first_path_cids(now); -4524 Ok(()) -4525 } -4526 Header::Initial(InitialHeader { -4527 src_cid: remote_cid, -4528 dst_cid: local_cid, -4529 .. -4530 }) => { -4531 debug_assert_eq!(path_id, PathId::ZERO); -4532 if !state.remote_cid_set { -4533 trace!("switching remote CID to {}", remote_cid); -4534 let mut state = state.clone(); -4535 self.remote_cids -4536 .get_mut(&path_id) -4537 .expect("PathId::ZERO not yet abandoned") -4538 .update_initial_cid(remote_cid); -4539 self.remote_handshake_cid = remote_cid; -4540 self.original_remote_cid = remote_cid; -4541 state.remote_cid_set = true; -4542 self.state.move_to_handshake(state); -4543 } else if remote_cid != self.remote_handshake_cid { -4544 debug!( -4545 "discarding packet with mismatched remote CID: {} != {}", -4546 self.remote_handshake_cid, remote_cid -4547 ); -4548 return Ok(()); -4549 } -4550 -4551 let starting_space = self.highest_space; -4552 self.process_early_payload(now, path_id, packet, qlog)?; -4553 -4554 if self.side.is_server() -4555 && starting_space == SpaceKind::Initial -4556 && self.highest_space != SpaceKind::Initial -4557 { -4558 let params = self -4559 .crypto_state -4560 .session -4561 .transport_parameters()? -4562 .ok_or_else(|| { -4563 TransportError::new( -4564 TransportErrorCode::crypto(0x6d), -4565 "transport parameters missing".to_owned(), -4566 ) -4567 })?; -4568 self.handle_peer_params(params, local_cid, remote_cid, now)?; -4569 self.issue_first_cids(now); -4570 self.init_0rtt(now); -4571 } -4572 Ok(()) -4573 } -4574 Header::Long { -4575 ty: LongType::ZeroRtt, -4576 .. -4577 } => { -4578 self.process_payload(now, network_path, path_id, number.unwrap(), packet, qlog)?; -4579 Ok(()) -4580 } -4581 Header::VersionNegotiate { .. } => { -4582 if self.total_authed_packets > 1 { -4583 return Ok(()); -4584 } -4585 let supported = packet -4586 .payload -4587 .chunks(4) -4588 .any(|x| match <[u8; 4]>::try_from(x) { -4589 Ok(version) => self.version == u32::from_be_bytes(version), -4590 Err(_) => false, -4591 }); -4592 if supported { +4486 if self.has_0rtt() { +4487 if !self.crypto_state.session.early_data_accepted().unwrap() { +4488 debug_assert!(self.side.is_client()); +4489 debug!("0-RTT rejected"); +4490 self.crypto_state.accepted_0rtt = false; +4491 self.streams.zero_rtt_rejected(); +4492 +4493 // Discard already-queued frames +4494 self.spaces[SpaceId::Data].pending = Retransmits::default(); +4495 +4496 // Discard 0-RTT packets +4497 let sent_packets = mem::take( +4498 &mut self.spaces[SpaceId::Data].for_path(path_id).sent_packets, +4499 ); +4500 for (_, packet) in sent_packets.into_iter() { +4501 self.paths +4502 .get_mut(&path_id) +4503 .unwrap() +4504 .remove_in_flight(&packet); +4505 } +4506 } else { +4507 self.crypto_state.accepted_0rtt = true; +4508 params.validate_resumption_from(&self.peer_params)?; +4509 } +4510 } +4511 if let Some(token) = params.stateless_reset_token { +4512 let remote = self.path_data(path_id).network_path.remote; +4513 debug_assert!(!self.state.is_drained()); // requirement for endpoint events, checked above +4514 self.endpoint_events +4515 .push_back(EndpointEventInner::ResetToken(path_id, remote, token)); +4516 } +4517 self.handle_peer_params(params, local_cid, remote_cid, now)?; +4518 self.issue_first_cids(now); +4519 } else { +4520 // Server-only +4521 self.spaces[SpaceId::Data].pending.handshake_done = true; +4522 self.discard_space(now, SpaceKind::Handshake); +4523 self.events.push_back(Event::HandshakeConfirmed); +4524 trace!("handshake confirmed"); +4525 } +4526 +4527 self.events.push_back(Event::Connected); +4528 self.state.move_to_established(); +4529 trace!("established"); +4530 +4531 // Multipath can only be enabled after the state has reached Established. +4532 // So this can not happen any earlier. +4533 self.issue_first_path_cids(now); +4534 Ok(()) +4535 } +4536 Header::Initial(InitialHeader { +4537 src_cid: remote_cid, +4538 dst_cid: local_cid, +4539 .. +4540 }) => { +4541 debug_assert_eq!(path_id, PathId::ZERO); +4542 if !state.remote_cid_set { +4543 trace!("switching remote CID to {}", remote_cid); +4544 let mut state = state.clone(); +4545 self.remote_cids +4546 .get_mut(&path_id) +4547 .expect("PathId::ZERO not yet abandoned") +4548 .update_initial_cid(remote_cid); +4549 self.remote_handshake_cid = remote_cid; +4550 self.original_remote_cid = remote_cid; +4551 state.remote_cid_set = true; +4552 self.state.move_to_handshake(state); +4553 } else if remote_cid != self.remote_handshake_cid { +4554 debug!( +4555 "discarding packet with mismatched remote CID: {} != {}", +4556 self.remote_handshake_cid, remote_cid +4557 ); +4558 return Ok(()); +4559 } +4560 +4561 let starting_space = self.highest_space; +4562 self.process_early_payload(now, path_id, packet, qlog)?; +4563 +4564 if self.side.is_server() +4565 && starting_space == SpaceKind::Initial +4566 && self.highest_space != SpaceKind::Initial +4567 { +4568 let params = self +4569 .crypto_state +4570 .session +4571 .transport_parameters()? +4572 .ok_or_else(|| { +4573 TransportError::new( +4574 TransportErrorCode::crypto(0x6d), +4575 "transport parameters missing".to_owned(), +4576 ) +4577 })?; +4578 self.handle_peer_params(params, local_cid, remote_cid, now)?; +4579 self.issue_first_cids(now); +4580 self.init_0rtt(now); +4581 } +4582 Ok(()) +4583 } +4584 Header::Long { +4585 ty: LongType::ZeroRtt, +4586 .. +4587 } => { +4588 self.process_payload(now, network_path, path_id, number.unwrap(), packet, qlog)?; +4589 Ok(()) +4590 } +4591 Header::VersionNegotiate { .. } => { +4592 if self.total_authed_packets > 1 { 4593 return Ok(()); 4594 } -4595 debug!("remote doesn't support our version"); -4596 Err(ConnectionError::VersionMismatch) -4597 } -4598 Header::Short { .. } => unreachable!( -4599 "short packets received during handshake are discarded in handle_packet" -4600 ), -4601 } -4602 } -4603 -4604 /// Process an Initial or Handshake packet payload -4605 fn process_early_payload( -4606 &mut self, -4607 now: Instant, -4608 path_id: PathId, -4609 packet: Packet, -4610 #[allow(unused)] qlog: &mut QlogRecvPacket, -4611 ) -> Result<(), TransportError> { -4612 debug_assert_ne!(packet.header.space(), SpaceKind::Data); -4613 debug_assert_eq!(path_id, PathId::ZERO); -4614 let payload_len = packet.payload.len(); -4615 let mut ack_eliciting = false; -4616 for result in frame::Iter::new(packet.payload.freeze())? { -4617 let frame = result?; -4618 qlog.frame(&frame); -4619 let span = match frame { -4620 Frame::Padding => continue, -4621 _ => Some(trace_span!("frame", ty = %frame.ty(), path = tracing::field::Empty)), -4622 }; -4623 -4624 self.path_stats -4625 .for_path(path_id) -4626 .frame_rx -4627 .record(frame.ty()); -4628 -4629 let _guard = span.as_ref().map(|x| x.enter()); -4630 ack_eliciting |= frame.is_ack_eliciting(); -4631 -4632 // Process frames -4633 if frame.is_1rtt() && packet.header.space() != SpaceKind::Data { -4634 return Err(TransportError::PROTOCOL_VIOLATION( -4635 "illegal frame type in handshake", -4636 )); -4637 } +4595 let supported = packet +4596 .payload +4597 .chunks(4) +4598 .any(|x| match <[u8; 4]>::try_from(x) { +4599 Ok(version) => self.version == u32::from_be_bytes(version), +4600 Err(_) => false, +4601 }); +4602 if supported { +4603 return Ok(()); +4604 } +4605 debug!("remote doesn't support our version"); +4606 Err(ConnectionError::VersionMismatch) +4607 } +4608 Header::Short { .. } => unreachable!( +4609 "short packets received during handshake are discarded in handle_packet" +4610 ), +4611 } +4612 } +4613 +4614 /// Process an Initial or Handshake packet payload +4615 fn process_early_payload( +4616 &mut self, +4617 now: Instant, +4618 path_id: PathId, +4619 packet: Packet, +4620 #[allow(unused)] qlog: &mut QlogRecvPacket, +4621 ) -> Result<(), TransportError> { +4622 debug_assert_ne!(packet.header.space(), SpaceKind::Data); +4623 debug_assert_eq!(path_id, PathId::ZERO); +4624 let payload_len = packet.payload.len(); +4625 let mut ack_eliciting = false; +4626 for result in frame::Iter::new(packet.payload.freeze())? { +4627 let frame = result?; +4628 qlog.frame(&frame); +4629 let span = match frame { +4630 Frame::Padding => continue, +4631 _ => Some(trace_span!("frame", ty = %frame.ty(), path = tracing::field::Empty)), +4632 }; +4633 +4634 self.path_stats +4635 .for_path(path_id) +4636 .frame_rx +4637 .record(frame.ty()); 4638 -4639 match frame { -4640 Frame::Padding | Frame::Ping => {} -4641 Frame::Crypto(frame) => { -4642 self.read_crypto(packet.header.space().into(), &frame, payload_len)?; -4643 } -4644 Frame::Ack(ack) => { -4645 self.on_ack_received(now, packet.header.space().into(), ack)?; -4646 } -4647 Frame::PathAck(ack) => { -4648 span.as_ref() -4649 .map(|span| span.record("path", tracing::field::display(&ack.path_id))); -4650 self.on_path_ack_received(now, packet.header.space().into(), ack)?; -4651 } -4652 Frame::Close(reason) => { -4653 self.state.move_to_draining(Some(reason.into())); -4654 return Ok(()); -4655 } -4656 _ => { -4657 let mut err = -4658 TransportError::PROTOCOL_VIOLATION("illegal frame type in handshake"); -4659 err.frame = frame::MaybeFrame::Known(frame.ty()); -4660 return Err(err); +4639 let _guard = span.as_ref().map(|x| x.enter()); +4640 ack_eliciting |= frame.is_ack_eliciting(); +4641 +4642 // Process frames +4643 if frame.is_1rtt() && packet.header.space() != SpaceKind::Data { +4644 return Err(TransportError::PROTOCOL_VIOLATION( +4645 "illegal frame type in handshake", +4646 )); +4647 } +4648 +4649 match frame { +4650 Frame::Padding | Frame::Ping => {} +4651 Frame::Crypto(frame) => { +4652 self.read_crypto(packet.header.space().into(), &frame, payload_len)?; +4653 } +4654 Frame::Ack(ack) => { +4655 self.on_ack_received(now, packet.header.space().into(), ack)?; +4656 } +4657 Frame::PathAck(ack) => { +4658 span.as_ref() +4659 .map(|span| span.record("path", tracing::field::display(&ack.path_id))); +4660 self.on_path_ack_received(now, packet.header.space().into(), ack)?; 4661 } -4662 } -4663 } -4664 -4665 if ack_eliciting { -4666 // In the initial and handshake spaces, ACKs must be sent immediately -4667 self.spaces[packet.header.space()] -4668 .for_path(path_id) -4669 .pending_acks -4670 .set_immediate_ack_required(); -4671 } -4672 -4673 self.write_crypto(); -4674 Ok(()) -4675 } -4676 -4677 /// Processes the packet payload, always in the data space. -4678 fn process_payload( -4679 &mut self, -4680 now: Instant, -4681 network_path: FourTuple, -4682 path_id: PathId, -4683 number: u64, -4684 packet: Packet, -4685 #[allow(unused)] qlog: &mut QlogRecvPacket, -4686 ) -> Result<(), TransportError> { -4687 let is_multipath_negotiated = self.is_multipath_negotiated(); -4688 let payload = packet.payload.freeze(); -4689 let mut is_probing_packet = true; -4690 let mut close = None; -4691 let payload_len = payload.len(); -4692 let mut ack_eliciting = false; -4693 // if this packet triggers a path migration and includes a observed address frame, it's -4694 // stored here -4695 let mut migration_observed_addr = None; -4696 for result in frame::Iter::new(payload)? { -4697 let frame = result?; -4698 qlog.frame(&frame); -4699 let span = match frame { -4700 Frame::Padding => continue, -4701 _ => trace_span!("frame", ty = %frame.ty(), path = tracing::field::Empty), -4702 }; -4703 -4704 self.path_stats -4705 .for_path(path_id) -4706 .frame_rx -4707 .record(frame.ty()); -4708 // Crypto, Stream and Datagram frames are special cased in order no pollute -4709 // the log with payload data -4710 match &frame { -4711 Frame::Crypto(f) => { -4712 trace!(offset = f.offset, len = f.data.len(), "got frame CRYPTO"); -4713 } -4714 Frame::Stream(f) => { -4715 trace!(id = %f.id, offset = f.offset, len = f.data.len(), fin = f.fin, "got frame STREAM"); -4716 } -4717 Frame::Datagram(f) => { -4718 trace!(len = f.data.len(), "got frame DATAGRAM"); -4719 } -4720 f => { -4721 trace!("got frame {f}"); -4722 } -4723 } -4724 -4725 let _guard = span.enter(); -4726 if packet.header.is_0rtt() { -4727 match frame { -4728 Frame::Crypto(_) | Frame::Close(Close::Application(_)) => { -4729 return Err(TransportError::PROTOCOL_VIOLATION( -4730 "illegal frame type in 0-RTT", -4731 )); -4732 } -4733 _ => { -4734 if frame.is_1rtt() { -4735 return Err(TransportError::PROTOCOL_VIOLATION( -4736 "illegal frame type in 0-RTT", -4737 )); -4738 } -4739 } -4740 } -4741 } -4742 ack_eliciting |= frame.is_ack_eliciting(); -4743 -4744 // Check whether this could be a probing packet -4745 match frame { -4746 Frame::Padding -4747 | Frame::PathChallenge(_) -4748 | Frame::PathResponse(_) -4749 | Frame::NewConnectionId(_) -4750 | Frame::ObservedAddr(_) => {} -4751 _ => { -4752 is_probing_packet = false; -4753 } -4754 } -4755 -4756 match frame { -4757 Frame::Crypto(frame) => { -4758 self.read_crypto(SpaceId::Data, &frame, payload_len)?; -4759 } -4760 Frame::Stream(frame) => { -4761 if self.streams.received(frame, payload_len)?.should_transmit() { -4762 self.spaces[SpaceId::Data].pending.max_data = true; -4763 } -4764 } -4765 Frame::Ack(ack) => { -4766 self.on_ack_received(now, SpaceId::Data, ack)?; -4767 } -4768 Frame::PathAck(ack) => { -4769 span.record("path", tracing::field::display(&ack.path_id)); -4770 self.on_path_ack_received(now, SpaceId::Data, ack)?; -4771 } -4772 Frame::Padding | Frame::Ping => {} -4773 Frame::Close(reason) => { -4774 close = Some(reason); -4775 } -4776 Frame::PathChallenge(challenge) => { -4777 let path = &mut self -4778 .path_mut(path_id) -4779 .expect("payload is processed only after the path becomes known"); -4780 path.path_responses.push(number, challenge.0, network_path); -4781 // At this point, update_network_path_or_discard was already called, so -4782 // we don't need to be lenient about `local_ip` possibly mis-matching. -4783 if network_path == path.network_path { -4784 // PATH_CHALLENGE on active path, possible off-path packet forwarding -4785 // attack. Send a non-probing packet to recover the active path. -4786 // TODO(flub): No longer true! We now path_challege also to validate -4787 // the path if the path is new, without an RFC9000-style -4788 // migration involved. This means we add in an extra -4789 // IMMEDIATE_ACK on some challenges. It isn't really wrong to do -4790 // so, but it still is something untidy. We should instead -4791 // suppress this when we know the remote is still validating the -4792 // path. -4793 match self.peer_supports_ack_frequency() { -4794 true => self.immediate_ack(path_id), -4795 false => { -4796 self.ping_path(path_id).ok(); -4797 } -4798 } -4799 } -4800 } -4801 Frame::PathResponse(response) => { -4802 let path = self -4803 .paths -4804 .get_mut(&path_id) -4805 .expect("payload is processed only after the path becomes known"); -4806 -4807 use PathTimer::*; -4808 use paths::OnPathResponseReceived::*; -4809 match path -4810 .data -4811 .on_path_response_received(now, response.0, network_path) -4812 { -4813 OnPath { was_open } => { -4814 let qlog = self.qlog.with_time(now); -4815 -4816 self.timers -4817 .stop(Timer::PerPath(path_id, PathValidationFailed), qlog.clone()); -4818 self.timers -4819 .stop(Timer::PerPath(path_id, PathOpenFailed), qlog.clone()); -4820 -4821 let next_challenge = path -4822 .data -4823 .earliest_on_path_expiring_challenge() -4824 .map(|time| time + self.ack_frequency.max_ack_delay_for_pto()); -4825 self.timers.set_or_stop( -4826 Timer::PerPath(path_id, PathChallengeLost), -4827 next_challenge, -4828 qlog, -4829 ); +4662 Frame::Close(reason) => { +4663 self.state.move_to_draining(Some(reason.into())); +4664 return Ok(()); +4665 } +4666 _ => { +4667 let mut err = +4668 TransportError::PROTOCOL_VIOLATION("illegal frame type in handshake"); +4669 err.frame = frame::MaybeFrame::Known(frame.ty()); +4670 return Err(err); +4671 } +4672 } +4673 } +4674 +4675 if ack_eliciting { +4676 // In the initial and handshake spaces, ACKs must be sent immediately +4677 self.spaces[packet.header.space()] +4678 .for_path(path_id) +4679 .pending_acks +4680 .set_immediate_ack_required(); +4681 } +4682 +4683 self.write_crypto(); +4684 Ok(()) +4685 } +4686 +4687 /// Processes the packet payload, always in the data space. +4688 fn process_payload( +4689 &mut self, +4690 now: Instant, +4691 network_path: FourTuple, +4692 path_id: PathId, +4693 number: u64, +4694 packet: Packet, +4695 #[allow(unused)] qlog: &mut QlogRecvPacket, +4696 ) -> Result<(), TransportError> { +4697 let is_multipath_negotiated = self.is_multipath_negotiated(); +4698 let payload = packet.payload.freeze(); +4699 let mut is_probing_packet = true; +4700 let mut close = None; +4701 let payload_len = payload.len(); +4702 let mut ack_eliciting = false; +4703 // if this packet triggers a path migration and includes a observed address frame, it's +4704 // stored here +4705 let mut migration_observed_addr = None; +4706 for result in frame::Iter::new(payload)? { +4707 let frame = result?; +4708 qlog.frame(&frame); +4709 let span = match frame { +4710 Frame::Padding => continue, +4711 _ => trace_span!("frame", ty = %frame.ty(), path = tracing::field::Empty), +4712 }; +4713 +4714 self.path_stats +4715 .for_path(path_id) +4716 .frame_rx +4717 .record(frame.ty()); +4718 // Crypto, Stream and Datagram frames are special cased in order no pollute +4719 // the log with payload data +4720 match &frame { +4721 Frame::Crypto(f) => { +4722 trace!(offset = f.offset, len = f.data.len(), "got frame CRYPTO"); +4723 } +4724 Frame::Stream(f) => { +4725 trace!(id = %f.id, offset = f.offset, len = f.data.len(), fin = f.fin, "got frame STREAM"); +4726 } +4727 Frame::Datagram(f) => { +4728 trace!(len = f.data.len(), "got frame DATAGRAM"); +4729 } +4730 f => { +4731 trace!("got frame {f}"); +4732 } +4733 } +4734 +4735 let _guard = span.enter(); +4736 if packet.header.is_0rtt() { +4737 match frame { +4738 Frame::Crypto(_) | Frame::Close(Close::Application(_)) => { +4739 return Err(TransportError::PROTOCOL_VIOLATION( +4740 "illegal frame type in 0-RTT", +4741 )); +4742 } +4743 _ => { +4744 if frame.is_1rtt() { +4745 return Err(TransportError::PROTOCOL_VIOLATION( +4746 "illegal frame type in 0-RTT", +4747 )); +4748 } +4749 } +4750 } +4751 } +4752 ack_eliciting |= frame.is_ack_eliciting(); +4753 +4754 // Check whether this could be a probing packet +4755 match frame { +4756 Frame::Padding +4757 | Frame::PathChallenge(_) +4758 | Frame::PathResponse(_) +4759 | Frame::NewConnectionId(_) +4760 | Frame::ObservedAddr(_) => {} +4761 _ => { +4762 is_probing_packet = false; +4763 } +4764 } +4765 +4766 match frame { +4767 Frame::Crypto(frame) => { +4768 self.read_crypto(SpaceId::Data, &frame, payload_len)?; +4769 } +4770 Frame::Stream(frame) => { +4771 if self.streams.received(frame, payload_len)?.should_transmit() { +4772 self.spaces[SpaceId::Data].pending.max_data = true; +4773 } +4774 } +4775 Frame::Ack(ack) => { +4776 self.on_ack_received(now, SpaceId::Data, ack)?; +4777 } +4778 Frame::PathAck(ack) => { +4779 span.record("path", tracing::field::display(&ack.path_id)); +4780 self.on_path_ack_received(now, SpaceId::Data, ack)?; +4781 } +4782 Frame::Padding | Frame::Ping => {} +4783 Frame::Close(reason) => { +4784 close = Some(reason); +4785 } +4786 Frame::PathChallenge(challenge) => { +4787 let path = &mut self +4788 .path_mut(path_id) +4789 .expect("payload is processed only after the path becomes known"); +4790 path.path_responses.push(number, challenge.0, network_path); +4791 // At this point, update_network_path_or_discard was already called, so +4792 // we don't need to be lenient about `local_ip` possibly mis-matching. +4793 if network_path == path.network_path { +4794 // PATH_CHALLENGE on active path, possible off-path packet forwarding +4795 // attack. Send a non-probing packet to recover the active path. +4796 // TODO(flub): No longer true! We now path_challege also to validate +4797 // the path if the path is new, without an RFC9000-style +4798 // migration involved. This means we add in an extra +4799 // IMMEDIATE_ACK on some challenges. It isn't really wrong to do +4800 // so, but it still is something untidy. We should instead +4801 // suppress this when we know the remote is still validating the +4802 // path. +4803 match self.peer_supports_ack_frequency() { +4804 true => self.immediate_ack(path_id), +4805 false => { +4806 self.ping_path(path_id).ok(); +4807 } +4808 } +4809 } +4810 } +4811 Frame::PathResponse(response) => { +4812 let path = self +4813 .paths +4814 .get_mut(&path_id) +4815 .expect("payload is processed only after the path becomes known"); +4816 +4817 use PathTimer::*; +4818 use paths::OnPathResponseReceived::*; +4819 match path +4820 .data +4821 .on_path_response_received(now, response.0, network_path) +4822 { +4823 OnPath { was_open } => { +4824 let qlog = self.qlog.with_time(now); +4825 +4826 self.timers +4827 .stop(Timer::PerPath(path_id, PathValidationFailed), qlog.clone()); +4828 self.timers +4829 .stop(Timer::PerPath(path_id, PathOpenFailed), qlog.clone()); 4830 -4831 if !was_open { -4832 if is_multipath_negotiated { -4833 self.events -4834 .push_back(Event::Path(PathEvent::Opened { id: path_id })); -4835 } -4836 if let Some(observed) = path.data.last_observed_addr_report.as_ref() -4837 { -4838 self.events.push_back(Event::Path(PathEvent::ObservedAddr { -4839 id: path_id, -4840 addr: observed.socket_addr(), -4841 })); -4842 } -4843 } -4844 if let Some((_, ref mut prev)) = path.prev { -4845 prev.reset_on_path_challenges(); -4846 } -4847 } -4848 OffPath => { -4849 debug!(%response, "Valid response to off-path PATH_CHALLENGE"); -4850 } -4851 Ignored { -4852 sent_on, -4853 current_path, -4854 } => { -4855 debug!(%sent_on, %current_path, %response, "ignoring valid PATH_RESPONSE") -4856 } -4857 Unknown => debug!(%response, "ignoring invalid PATH_RESPONSE"), -4858 } -4859 } -4860 Frame::MaxData(frame::MaxData(bytes)) => { -4861 self.streams.received_max_data(bytes); -4862 } -4863 Frame::MaxStreamData(frame::MaxStreamData { id, offset }) => { -4864 self.streams.received_max_stream_data(id, offset)?; -4865 } -4866 Frame::MaxStreams(frame::MaxStreams { dir, count }) => { -4867 self.streams.received_max_streams(dir, count)?; -4868 } -4869 Frame::ResetStream(frame) => { -4870 if self.streams.received_reset(frame)?.should_transmit() { -4871 self.spaces[SpaceId::Data].pending.max_data = true; -4872 } -4873 } -4874 Frame::DataBlocked(DataBlocked(offset)) => { -4875 debug!(offset, "peer claims to be blocked at connection level"); -4876 } -4877 Frame::StreamDataBlocked(StreamDataBlocked { id, offset }) => { -4878 if id.initiator() == self.side.side() && id.dir() == Dir::Uni { -4879 debug!("got STREAM_DATA_BLOCKED on send-only {}", id); -4880 return Err(TransportError::STREAM_STATE_ERROR( -4881 "STREAM_DATA_BLOCKED on send-only stream", -4882 )); -4883 } -4884 debug!( -4885 stream = %id, -4886 offset, "peer claims to be blocked at stream level" -4887 ); -4888 } -4889 Frame::StreamsBlocked(StreamsBlocked { dir, limit }) => { -4890 if limit > MAX_STREAM_COUNT { -4891 return Err(TransportError::FRAME_ENCODING_ERROR( -4892 "unrepresentable stream limit", -4893 )); -4894 } -4895 debug!( -4896 "peer claims to be blocked opening more than {} {} streams", -4897 limit, dir -4898 ); -4899 } -4900 Frame::StopSending(frame::StopSending { id, error_code }) => { -4901 if id.initiator() != self.side.side() { -4902 if id.dir() == Dir::Uni { -4903 debug!("got STOP_SENDING on recv-only {}", id); -4904 return Err(TransportError::STREAM_STATE_ERROR( -4905 "STOP_SENDING on recv-only stream", -4906 )); -4907 } -4908 } else if self.streams.is_local_unopened(id) { -4909 return Err(TransportError::STREAM_STATE_ERROR( -4910 "STOP_SENDING on unopened stream", -4911 )); -4912 } -4913 self.streams.received_stop_sending(id, error_code); -4914 } -4915 Frame::RetireConnectionId(frame::RetireConnectionId { path_id, sequence }) => { -4916 if let Some(ref path_id) = path_id { -4917 span.record("path", tracing::field::display(&path_id)); -4918 } -4919 let path_id = path_id.unwrap_or_default(); -4920 match self.local_cid_state.get_mut(&path_id) { -4921 None => error!(?path_id, "RETIRE_CONNECTION_ID for unknown path"), -4922 Some(cid_state) => { -4923 let allow_more_cids = cid_state -4924 .on_cid_retirement(sequence, self.peer_params.issue_cids_limit())?; -4925 -4926 // If the path has closed, we do not issue more CIDs for this path -4927 // For details see https://www.ietf.org/archive/id/draft-ietf-quic-multipath-17.html#section-3.2.2 -4928 // > an endpoint SHOULD provide new connection IDs for that path, if still open, using PATH_NEW_CONNECTION_ID frames. -4929 let has_path = !self.abandoned_paths.contains(&path_id); -4930 let allow_more_cids = allow_more_cids && has_path; -4931 -4932 debug_assert!(!self.state.is_drained()); // required for adding endpoint events, process_payload is never called for drained connections -4933 self.endpoint_events -4934 .push_back(EndpointEventInner::RetireConnectionId( -4935 now, -4936 path_id, -4937 sequence, -4938 allow_more_cids, -4939 )); -4940 } -4941 } -4942 } -4943 Frame::NewConnectionId(frame) => { -4944 let path_id = if let Some(path_id) = frame.path_id { -4945 if !self.is_multipath_negotiated() { -4946 return Err(TransportError::PROTOCOL_VIOLATION( -4947 "received PATH_NEW_CONNECTION_ID frame when multipath was not negotiated", -4948 )); -4949 } -4950 if path_id > self.local_max_path_id { -4951 return Err(TransportError::PROTOCOL_VIOLATION( -4952 "PATH_NEW_CONNECTION_ID contains path_id exceeding current max", -4953 )); -4954 } -4955 path_id -4956 } else { -4957 PathId::ZERO -4958 }; -4959 -4960 if let Some(ref path_id) = frame.path_id { -4961 span.record("path", tracing::field::display(&path_id)); -4962 } -4963 -4964 if self.abandoned_paths.contains(&path_id) { -4965 trace!("ignoring issued CID for abandoned path"); -4966 continue; -4967 } -4968 let remote_cids = self -4969 .remote_cids -4970 .entry(path_id) -4971 .or_insert_with(|| CidQueue::new(frame.id)); -4972 if remote_cids.active().is_empty() { -4973 return Err(TransportError::PROTOCOL_VIOLATION( -4974 "NEW_CONNECTION_ID when CIDs aren't in use", -4975 )); -4976 } -4977 if frame.retire_prior_to > frame.sequence { -4978 return Err(TransportError::PROTOCOL_VIOLATION( -4979 "NEW_CONNECTION_ID retiring unissued CIDs", -4980 )); -4981 } -4982 -4983 use crate::cid_queue::InsertError; -4984 match remote_cids.insert(frame) { -4985 Ok(None) if self.path(path_id).is_none() => { -4986 // if this gives us CIDs to open a new path and a nat traversal attempt -4987 // is underway we could try to probe a pending remote -4988 self.continue_nat_traversal_round(now); -4989 } -4990 Ok(None) => {} -4991 Ok(Some((retired, reset_token))) => { -4992 let pending_retired = -4993 &mut self.spaces[SpaceId::Data].pending.retire_cids; -4994 /// Ensure `pending_retired` cannot grow without bound. Limit is -4995 /// somewhat arbitrary but very permissive. -4996 const MAX_PENDING_RETIRED_CIDS: u64 = CidQueue::LEN as u64 * 10; -4997 // We don't bother counting in-flight frames because those are bounded -4998 // by congestion control. -4999 if (pending_retired.len() as u64) -5000 .saturating_add(retired.end.saturating_sub(retired.start)) -5001 > MAX_PENDING_RETIRED_CIDS -5002 { -5003 return Err(TransportError::CONNECTION_ID_LIMIT_ERROR( -5004 "queued too many retired CIDs", -5005 )); -5006 } -5007 pending_retired.extend(retired.map(|seq| (path_id, seq))); -5008 self.set_reset_token(path_id, network_path.remote, reset_token); -5009 } -5010 Err(InsertError::ExceedsLimit) => { -5011 return Err(TransportError::CONNECTION_ID_LIMIT_ERROR("")); -5012 } -5013 Err(InsertError::Retired) => { -5014 trace!("discarding already-retired"); -5015 // RETIRE_CONNECTION_ID might not have been previously sent if e.g. a -5016 // range of connection IDs larger than the active connection ID limit -5017 // was retired all at once via retire_prior_to. -5018 self.spaces[SpaceId::Data] -5019 .pending -5020 .retire_cids -5021 .push((path_id, frame.sequence)); -5022 continue; -5023 } -5024 }; -5025 -5026 if self.side.is_server() -5027 && path_id == PathId::ZERO -5028 && self -5029 .remote_cids -5030 .get(&PathId::ZERO) -5031 .map(|cids| cids.active_seq() == 0) -5032 .unwrap_or_default() -5033 { -5034 // We're a server still using the initial remote CID for the client, so -5035 // let's switch immediately to enable clientside stateless resets. -5036 self.update_remote_cid(PathId::ZERO); -5037 } -5038 } -5039 Frame::NewToken(NewToken { token }) => { -5040 let ConnectionSide::Client { -5041 token_store, -5042 server_name, -5043 .. -5044 } = &self.side -5045 else { -5046 return Err(TransportError::PROTOCOL_VIOLATION("client sent NEW_TOKEN")); -5047 }; -5048 if token.is_empty() { -5049 return Err(TransportError::FRAME_ENCODING_ERROR("empty token")); -5050 } -5051 trace!("got new token"); -5052 token_store.insert(server_name, token); -5053 } -5054 Frame::Datagram(datagram) => { -5055 if self -5056 .datagrams -5057 .received(datagram, &self.config.datagram_receive_buffer_size)? -5058 { -5059 self.events.push_back(Event::DatagramReceived); +4831 let next_challenge = path +4832 .data +4833 .earliest_on_path_expiring_challenge() +4834 .map(|time| time + self.ack_frequency.max_ack_delay_for_pto()); +4835 self.timers.set_or_stop( +4836 Timer::PerPath(path_id, PathChallengeLost), +4837 next_challenge, +4838 qlog, +4839 ); +4840 +4841 if !was_open { +4842 if is_multipath_negotiated { +4843 self.events +4844 .push_back(Event::Path(PathEvent::Opened { id: path_id })); +4845 } +4846 if let Some(observed) = path.data.last_observed_addr_report.as_ref() +4847 { +4848 self.events.push_back(Event::Path(PathEvent::ObservedAddr { +4849 id: path_id, +4850 addr: observed.socket_addr(), +4851 })); +4852 } +4853 } +4854 if let Some((_, ref mut prev)) = path.prev { +4855 prev.reset_on_path_challenges(); +4856 } +4857 } +4858 OffPath => { +4859 debug!(%response, "Valid response to off-path PATH_CHALLENGE"); +4860 } +4861 Ignored { +4862 sent_on, +4863 current_path, +4864 } => { +4865 debug!(%sent_on, %current_path, %response, "ignoring valid PATH_RESPONSE") +4866 } +4867 Unknown => debug!(%response, "ignoring invalid PATH_RESPONSE"), +4868 } +4869 } +4870 Frame::MaxData(frame::MaxData(bytes)) => { +4871 self.streams.received_max_data(bytes); +4872 } +4873 Frame::MaxStreamData(frame::MaxStreamData { id, offset }) => { +4874 self.streams.received_max_stream_data(id, offset)?; +4875 } +4876 Frame::MaxStreams(frame::MaxStreams { dir, count }) => { +4877 self.streams.received_max_streams(dir, count)?; +4878 } +4879 Frame::ResetStream(frame) => { +4880 if self.streams.received_reset(frame)?.should_transmit() { +4881 self.spaces[SpaceId::Data].pending.max_data = true; +4882 } +4883 } +4884 Frame::DataBlocked(DataBlocked(offset)) => { +4885 debug!(offset, "peer claims to be blocked at connection level"); +4886 } +4887 Frame::StreamDataBlocked(StreamDataBlocked { id, offset }) => { +4888 if id.initiator() == self.side.side() && id.dir() == Dir::Uni { +4889 debug!("got STREAM_DATA_BLOCKED on send-only {}", id); +4890 return Err(TransportError::STREAM_STATE_ERROR( +4891 "STREAM_DATA_BLOCKED on send-only stream", +4892 )); +4893 } +4894 debug!( +4895 stream = %id, +4896 offset, "peer claims to be blocked at stream level" +4897 ); +4898 } +4899 Frame::StreamsBlocked(StreamsBlocked { dir, limit }) => { +4900 if limit > MAX_STREAM_COUNT { +4901 return Err(TransportError::FRAME_ENCODING_ERROR( +4902 "unrepresentable stream limit", +4903 )); +4904 } +4905 debug!( +4906 "peer claims to be blocked opening more than {} {} streams", +4907 limit, dir +4908 ); +4909 } +4910 Frame::StopSending(frame::StopSending { id, error_code }) => { +4911 if id.initiator() != self.side.side() { +4912 if id.dir() == Dir::Uni { +4913 debug!("got STOP_SENDING on recv-only {}", id); +4914 return Err(TransportError::STREAM_STATE_ERROR( +4915 "STOP_SENDING on recv-only stream", +4916 )); +4917 } +4918 } else if self.streams.is_local_unopened(id) { +4919 return Err(TransportError::STREAM_STATE_ERROR( +4920 "STOP_SENDING on unopened stream", +4921 )); +4922 } +4923 self.streams.received_stop_sending(id, error_code); +4924 } +4925 Frame::RetireConnectionId(frame::RetireConnectionId { path_id, sequence }) => { +4926 if let Some(ref path_id) = path_id { +4927 span.record("path", tracing::field::display(&path_id)); +4928 } +4929 let path_id = path_id.unwrap_or_default(); +4930 match self.local_cid_state.get_mut(&path_id) { +4931 None => error!(?path_id, "RETIRE_CONNECTION_ID for unknown path"), +4932 Some(cid_state) => { +4933 let allow_more_cids = cid_state +4934 .on_cid_retirement(sequence, self.peer_params.issue_cids_limit())?; +4935 +4936 // If the path has closed, we do not issue more CIDs for this path +4937 // For details see https://www.ietf.org/archive/id/draft-ietf-quic-multipath-17.html#section-3.2.2 +4938 // > an endpoint SHOULD provide new connection IDs for that path, if still open, using PATH_NEW_CONNECTION_ID frames. +4939 let has_path = !self.abandoned_paths.contains(&path_id); +4940 let allow_more_cids = allow_more_cids && has_path; +4941 +4942 debug_assert!(!self.state.is_drained()); // required for adding endpoint events, process_payload is never called for drained connections +4943 self.endpoint_events +4944 .push_back(EndpointEventInner::RetireConnectionId( +4945 now, +4946 path_id, +4947 sequence, +4948 allow_more_cids, +4949 )); +4950 } +4951 } +4952 } +4953 Frame::NewConnectionId(frame) => { +4954 let path_id = if let Some(path_id) = frame.path_id { +4955 if !self.is_multipath_negotiated() { +4956 return Err(TransportError::PROTOCOL_VIOLATION( +4957 "received PATH_NEW_CONNECTION_ID frame when multipath was not negotiated", +4958 )); +4959 } +4960 if path_id > self.local_max_path_id { +4961 return Err(TransportError::PROTOCOL_VIOLATION( +4962 "PATH_NEW_CONNECTION_ID contains path_id exceeding current max", +4963 )); +4964 } +4965 path_id +4966 } else { +4967 PathId::ZERO +4968 }; +4969 +4970 if let Some(ref path_id) = frame.path_id { +4971 span.record("path", tracing::field::display(&path_id)); +4972 } +4973 +4974 if self.abandoned_paths.contains(&path_id) { +4975 trace!("ignoring issued CID for abandoned path"); +4976 continue; +4977 } +4978 let remote_cids = self +4979 .remote_cids +4980 .entry(path_id) +4981 .or_insert_with(|| CidQueue::new(frame.id)); +4982 if remote_cids.active().is_empty() { +4983 return Err(TransportError::PROTOCOL_VIOLATION( +4984 "NEW_CONNECTION_ID when CIDs aren't in use", +4985 )); +4986 } +4987 if frame.retire_prior_to > frame.sequence { +4988 return Err(TransportError::PROTOCOL_VIOLATION( +4989 "NEW_CONNECTION_ID retiring unissued CIDs", +4990 )); +4991 } +4992 +4993 use crate::cid_queue::InsertError; +4994 match remote_cids.insert(frame) { +4995 Ok(None) if self.path(path_id).is_none() => { +4996 // if this gives us CIDs to open a new path and a nat traversal attempt +4997 // is underway we could try to probe a pending remote +4998 self.continue_nat_traversal_round(now); +4999 } +5000 Ok(None) => {} +5001 Ok(Some((retired, reset_token))) => { +5002 let pending_retired = +5003 &mut self.spaces[SpaceId::Data].pending.retire_cids; +5004 /// Ensure `pending_retired` cannot grow without bound. Limit is +5005 /// somewhat arbitrary but very permissive. +5006 const MAX_PENDING_RETIRED_CIDS: u64 = CidQueue::LEN as u64 * 10; +5007 // We don't bother counting in-flight frames because those are bounded +5008 // by congestion control. +5009 if (pending_retired.len() as u64) +5010 .saturating_add(retired.end.saturating_sub(retired.start)) +5011 > MAX_PENDING_RETIRED_CIDS +5012 { +5013 return Err(TransportError::CONNECTION_ID_LIMIT_ERROR( +5014 "queued too many retired CIDs", +5015 )); +5016 } +5017 pending_retired.extend(retired.map(|seq| (path_id, seq))); +5018 self.set_reset_token(path_id, network_path.remote, reset_token); +5019 } +5020 Err(InsertError::ExceedsLimit) => { +5021 return Err(TransportError::CONNECTION_ID_LIMIT_ERROR("")); +5022 } +5023 Err(InsertError::Retired) => { +5024 trace!("discarding already-retired"); +5025 // RETIRE_CONNECTION_ID might not have been previously sent if e.g. a +5026 // range of connection IDs larger than the active connection ID limit +5027 // was retired all at once via retire_prior_to. +5028 self.spaces[SpaceId::Data] +5029 .pending +5030 .retire_cids +5031 .push((path_id, frame.sequence)); +5032 continue; +5033 } +5034 }; +5035 +5036 if self.side.is_server() +5037 && path_id == PathId::ZERO +5038 && self +5039 .remote_cids +5040 .get(&PathId::ZERO) +5041 .map(|cids| cids.active_seq() == 0) +5042 .unwrap_or_default() +5043 { +5044 // We're a server still using the initial remote CID for the client, so +5045 // let's switch immediately to enable clientside stateless resets. +5046 self.update_remote_cid(PathId::ZERO); +5047 } +5048 } +5049 Frame::NewToken(NewToken { token }) => { +5050 let ConnectionSide::Client { +5051 token_store, +5052 server_name, +5053 .. +5054 } = &self.side +5055 else { +5056 return Err(TransportError::PROTOCOL_VIOLATION("client sent NEW_TOKEN")); +5057 }; +5058 if token.is_empty() { +5059 return Err(TransportError::FRAME_ENCODING_ERROR("empty token")); 5060 } -5061 } -5062 Frame::AckFrequency(ack_frequency) => { -5063 // This frame can only be sent in the Data space -5064 -5065 if !self.ack_frequency.ack_frequency_received(&ack_frequency)? { -5066 // The AckFrequency frame is stale (we have already received a more -5067 // recent one) -5068 continue; -5069 } -5070 -5071 // Update the params for all of our paths -5072 for (path_id, space) in self.spaces[SpaceId::Data].number_spaces.iter_mut() { -5073 space.pending_acks.set_ack_frequency_params(&ack_frequency); +5061 trace!("got new token"); +5062 token_store.insert(server_name, token); +5063 } +5064 Frame::Datagram(datagram) => { +5065 if self +5066 .datagrams +5067 .received(datagram, &self.config.datagram_receive_buffer_size)? +5068 { +5069 self.events.push_back(Event::DatagramReceived); +5070 } +5071 } +5072 Frame::AckFrequency(ack_frequency) => { +5073 // This frame can only be sent in the Data space 5074 -5075 // Our `max_ack_delay` has been updated, so we may need to adjust -5076 // its associated timeout -5077 if let Some(timeout) = space -5078 .pending_acks -5079 .max_ack_delay_timeout(self.ack_frequency.max_ack_delay) -5080 { -5081 self.timers.set( -5082 Timer::PerPath(*path_id, PathTimer::MaxAckDelay), -5083 timeout, -5084 self.qlog.with_time(now), -5085 ); -5086 } -5087 } -5088 } -5089 Frame::ImmediateAck => { -5090 // This frame can only be sent in the Data space -5091 for pns in self.spaces[SpaceId::Data].iter_paths_mut() { -5092 pns.pending_acks.set_immediate_ack_required(); -5093 } -5094 } -5095 Frame::HandshakeDone => { -5096 if self.side.is_server() { -5097 return Err(TransportError::PROTOCOL_VIOLATION( -5098 "client sent HANDSHAKE_DONE", -5099 )); -5100 } -5101 if self.crypto_state.has_keys(EncryptionLevel::Handshake) { -5102 self.discard_space(now, SpaceKind::Handshake); +5075 if !self.ack_frequency.ack_frequency_received(&ack_frequency)? { +5076 // The AckFrequency frame is stale (we have already received a more +5077 // recent one) +5078 continue; +5079 } +5080 +5081 // Update the params for all of our paths +5082 for (path_id, space) in self.spaces[SpaceId::Data].number_spaces.iter_mut() { +5083 space.pending_acks.set_ack_frequency_params(&ack_frequency); +5084 +5085 // Our `max_ack_delay` has been updated, so we may need to adjust +5086 // its associated timeout +5087 if let Some(timeout) = space +5088 .pending_acks +5089 .max_ack_delay_timeout(self.ack_frequency.max_ack_delay) +5090 { +5091 self.timers.set( +5092 Timer::PerPath(*path_id, PathTimer::MaxAckDelay), +5093 timeout, +5094 self.qlog.with_time(now), +5095 ); +5096 } +5097 } +5098 } +5099 Frame::ImmediateAck => { +5100 // This frame can only be sent in the Data space +5101 for pns in self.spaces[SpaceId::Data].iter_paths_mut() { +5102 pns.pending_acks.set_immediate_ack_required(); 5103 } -5104 self.events.push_back(Event::HandshakeConfirmed); -5105 trace!("handshake confirmed"); -5106 } -5107 Frame::ObservedAddr(observed) => { -5108 // check if params allows the peer to send report and this node to receive it -5109 trace!(seq_no = %observed.seq_no, ip = %observed.ip, port = observed.port); -5110 if !self -5111 .peer_params -5112 .address_discovery_role -5113 .should_report(&self.config.address_discovery_role) -5114 { -5115 return Err(TransportError::PROTOCOL_VIOLATION( -5116 "received OBSERVED_ADDRESS frame when not negotiated", -5117 )); -5118 } -5119 // must only be sent in data space -5120 if packet.header.space() != SpaceKind::Data { -5121 return Err(TransportError::PROTOCOL_VIOLATION( -5122 "OBSERVED_ADDRESS frame outside data space", -5123 )); -5124 } -5125 -5126 let path = self.path_data_mut(path_id); -5127 if network_path == path.network_path { -5128 if let Some(updated) = path.update_observed_addr_report(observed) -5129 && path.open_status == paths::OpenStatus::Informed -5130 { -5131 self.events.push_back(Event::Path(PathEvent::ObservedAddr { -5132 id: path_id, -5133 addr: updated, -5134 })); -5135 // otherwise the event is reported when the path is deemed open -5136 } -5137 } else { -5138 // include in migration -5139 migration_observed_addr = Some(observed) -5140 } -5141 } -5142 Frame::PathAbandon(frame::PathAbandon { -5143 path_id, -5144 error_code, -5145 }) => { -5146 span.record("path", tracing::field::display(&path_id)); -5147 match self.close_path_inner( -5148 now, -5149 path_id, -5150 PathAbandonReason::RemoteAbandoned { -5151 error_code: error_code.into(), -5152 }, -5153 ) { -5154 Ok(()) => { -5155 trace!("peer abandoned path"); -5156 } -5157 Err(ClosePathError::ClosedPath) => { -5158 trace!("peer abandoned already closed path"); -5159 } -5160 Err(ClosePathError::MultipathNotNegotiated) => { -5161 return Err(TransportError::PROTOCOL_VIOLATION( -5162 "received PATH_ABANDON frame when multipath was not negotiated", -5163 )); -5164 } -5165 Err(ClosePathError::LastOpenPath) => { -5166 // Not reachable: close_path_inner allows remote abandons -5167 // for the last path. But handle gracefully just in case. -5168 error!( -5169 "peer abandoned last path but close_path_inner returned LastOpenPath" -5170 ); -5171 } -5172 }; -5173 -5174 // Start draining the path if it still exists and hasn't started draining yet. -5175 if let Some(path) = self.paths.get_mut(&path_id) -5176 && !mem::replace(&mut path.data.draining, true) -5177 { -5178 let ack_delay = self.ack_frequency.max_ack_delay_for_pto(); -5179 let pto = path.data.rtt.pto_base() + ack_delay; -5180 self.timers.set( -5181 Timer::PerPath(path_id, PathTimer::PathDrained), -5182 now + 3 * pto, -5183 self.qlog.with_time(now), -5184 ); -5185 -5186 self.set_max_path_id(now, self.local_max_path_id.saturating_add(1u8)); -5187 } -5188 } -5189 Frame::PathStatusAvailable(info) => { -5190 span.record("path", tracing::field::display(&info.path_id)); -5191 if self.is_multipath_negotiated() { -5192 self.on_path_status( -5193 info.path_id, -5194 PathStatus::Available, -5195 info.status_seq_no, -5196 ); -5197 } else { -5198 return Err(TransportError::PROTOCOL_VIOLATION( -5199 "received PATH_STATUS_AVAILABLE frame when multipath was not negotiated", -5200 )); -5201 } -5202 } -5203 Frame::PathStatusBackup(info) => { -5204 span.record("path", tracing::field::display(&info.path_id)); -5205 if self.is_multipath_negotiated() { -5206 self.on_path_status(info.path_id, PathStatus::Backup, info.status_seq_no); +5104 } +5105 Frame::HandshakeDone => { +5106 if self.side.is_server() { +5107 return Err(TransportError::PROTOCOL_VIOLATION( +5108 "client sent HANDSHAKE_DONE", +5109 )); +5110 } +5111 if self.crypto_state.has_keys(EncryptionLevel::Handshake) { +5112 self.discard_space(now, SpaceKind::Handshake); +5113 } +5114 self.events.push_back(Event::HandshakeConfirmed); +5115 trace!("handshake confirmed"); +5116 } +5117 Frame::ObservedAddr(observed) => { +5118 // check if params allows the peer to send report and this node to receive it +5119 trace!(seq_no = %observed.seq_no, ip = %observed.ip, port = observed.port); +5120 if !self +5121 .peer_params +5122 .address_discovery_role +5123 .should_report(&self.config.address_discovery_role) +5124 { +5125 return Err(TransportError::PROTOCOL_VIOLATION( +5126 "received OBSERVED_ADDRESS frame when not negotiated", +5127 )); +5128 } +5129 // must only be sent in data space +5130 if packet.header.space() != SpaceKind::Data { +5131 return Err(TransportError::PROTOCOL_VIOLATION( +5132 "OBSERVED_ADDRESS frame outside data space", +5133 )); +5134 } +5135 +5136 let path = self.path_data_mut(path_id); +5137 if network_path == path.network_path { +5138 if let Some(updated) = path.update_observed_addr_report(observed) +5139 && path.open_status == paths::OpenStatus::Informed +5140 { +5141 self.events.push_back(Event::Path(PathEvent::ObservedAddr { +5142 id: path_id, +5143 addr: updated, +5144 })); +5145 // otherwise the event is reported when the path is deemed open +5146 } +5147 } else { +5148 // include in migration +5149 migration_observed_addr = Some(observed) +5150 } +5151 } +5152 Frame::PathAbandon(frame::PathAbandon { +5153 path_id, +5154 error_code, +5155 }) => { +5156 span.record("path", tracing::field::display(&path_id)); +5157 match self.close_path_inner( +5158 now, +5159 path_id, +5160 PathAbandonReason::RemoteAbandoned { +5161 error_code: error_code.into(), +5162 }, +5163 ) { +5164 Ok(()) => { +5165 trace!("peer abandoned path"); +5166 } +5167 Err(ClosePathError::ClosedPath) => { +5168 trace!("peer abandoned already closed path"); +5169 } +5170 Err(ClosePathError::MultipathNotNegotiated) => { +5171 return Err(TransportError::PROTOCOL_VIOLATION( +5172 "received PATH_ABANDON frame when multipath was not negotiated", +5173 )); +5174 } +5175 Err(ClosePathError::LastOpenPath) => { +5176 // Not reachable: close_path_inner allows remote abandons +5177 // for the last path. But handle gracefully just in case. +5178 error!( +5179 "peer abandoned last path but close_path_inner returned LastOpenPath" +5180 ); +5181 } +5182 }; +5183 +5184 // Start draining the path if it still exists and hasn't started draining yet. +5185 if let Some(path) = self.paths.get_mut(&path_id) +5186 && !mem::replace(&mut path.data.draining, true) +5187 { +5188 let ack_delay = self.ack_frequency.max_ack_delay_for_pto(); +5189 let pto = path.data.rtt.pto_base() + ack_delay; +5190 self.timers.set( +5191 Timer::PerPath(path_id, PathTimer::PathDrained), +5192 now + 3 * pto, +5193 self.qlog.with_time(now), +5194 ); +5195 +5196 self.set_max_path_id(now, self.local_max_path_id.saturating_add(1u8)); +5197 } +5198 } +5199 Frame::PathStatusAvailable(info) => { +5200 span.record("path", tracing::field::display(&info.path_id)); +5201 if self.is_multipath_negotiated() { +5202 self.on_path_status( +5203 info.path_id, +5204 PathStatus::Available, +5205 info.status_seq_no, +5206 ); 5207 } else { 5208 return Err(TransportError::PROTOCOL_VIOLATION( -5209 "received PATH_STATUS_BACKUP frame when multipath was not negotiated", +5209 "received PATH_STATUS_AVAILABLE frame when multipath was not negotiated", 5210 )); 5211 } 5212 } -5213 Frame::MaxPathId(frame::MaxPathId(path_id)) => { -5214 span.record("path", tracing::field::display(&path_id)); -5215 if !self.is_multipath_negotiated() { -5216 return Err(TransportError::PROTOCOL_VIOLATION( -5217 "received MAX_PATH_ID frame when multipath was not negotiated", -5218 )); -5219 } -5220 // frames that do not increase the path id are ignored -5221 if path_id > self.remote_max_path_id { -5222 self.remote_max_path_id = path_id; -5223 self.issue_first_path_cids(now); -5224 while let Some(true) = self.continue_nat_traversal_round(now) {} -5225 } -5226 } -5227 Frame::PathsBlocked(frame::PathsBlocked(max_path_id)) => { -5228 // Receipt of a value of Maximum Path Identifier or Path Identifier that is higher than the local maximum value MUST -5229 // be treated as a connection error of type PROTOCOL_VIOLATION. -5230 // Ref <https://www.ietf.org/archive/id/draft-ietf-quic-multipath-14.html#name-paths_blocked-and-path_cids> -5231 if self.is_multipath_negotiated() { -5232 if max_path_id > self.local_max_path_id { -5233 return Err(TransportError::PROTOCOL_VIOLATION( -5234 "PATHS_BLOCKED maximum path identifier was larger than local maximum", -5235 )); -5236 } -5237 debug!("received PATHS_BLOCKED({:?})", max_path_id); -5238 // TODO(@divma): ensure max concurrent paths -5239 } else { -5240 return Err(TransportError::PROTOCOL_VIOLATION( -5241 "received PATHS_BLOCKED frame when not multipath was not negotiated", -5242 )); -5243 } -5244 } -5245 Frame::PathCidsBlocked(frame::PathCidsBlocked { path_id, next_seq }) => { -5246 // Nothing to do. This is recorded in the frame stats, but otherwise we -5247 // always issue all CIDs we're allowed to issue, so either this is an -5248 // impatient peer or a bug on our side. -5249 -5250 // Receipt of a value of Maximum Path Identifier or Path Identifier that is higher than the local maximum value MUST -5251 // be treated as a connection error of type PROTOCOL_VIOLATION. -5252 // Ref <https://www.ietf.org/archive/id/draft-ietf-quic-multipath-14.html#name-paths_blocked-and-path_cids> -5253 if self.is_multipath_negotiated() { -5254 if path_id > self.local_max_path_id { -5255 return Err(TransportError::PROTOCOL_VIOLATION( -5256 "PATH_CIDS_BLOCKED path identifier was larger than local maximum", -5257 )); -5258 } -5259 if next_seq.0 -5260 > self -5261 .local_cid_state -5262 .get(&path_id) -5263 .map(|cid_state| cid_state.active_seq().1 + 1) -5264 .unwrap_or_default() -5265 { -5266 return Err(TransportError::PROTOCOL_VIOLATION( -5267 "PATH_CIDS_BLOCKED next sequence number larger than in local state", -5268 )); -5269 } -5270 debug!(%path_id, %next_seq, "received PATH_CIDS_BLOCKED"); -5271 } else { -5272 return Err(TransportError::PROTOCOL_VIOLATION( -5273 "received PATH_CIDS_BLOCKED frame when not multipath was not negotiated", -5274 )); -5275 } -5276 } -5277 Frame::AddAddress(addr) => { -5278 let client_state = match self.n0_nat_traversal.client_side_mut() { -5279 Ok(state) => state, -5280 Err(err) => { -5281 return Err(TransportError::PROTOCOL_VIOLATION(format!( -5282 "Nat traversal(ADD_ADDRESS): {err}" -5283 ))); -5284 } -5285 }; -5286 -5287 if !client_state.check_remote_address(&addr) { -5288 // if the address is not valid we flag it, but update anyway -5289 warn!(?addr, "server sent illegal ADD_ADDRESS frame"); -5290 } -5291 -5292 match client_state.add_remote_address(addr) { -5293 Ok(maybe_added) => { -5294 if let Some(added) = maybe_added { -5295 self.events.push_back(Event::NatTraversal( -5296 n0_nat_traversal::Event::AddressAdded(added), -5297 )); -5298 } -5299 } -5300 Err(e) => { -5301 warn!(%e, "failed to add remote address") -5302 } -5303 } -5304 } -5305 Frame::RemoveAddress(addr) => { -5306 let client_state = match self.n0_nat_traversal.client_side_mut() { -5307 Ok(state) => state, -5308 Err(err) => { -5309 return Err(TransportError::PROTOCOL_VIOLATION(format!( -5310 "Nat traversal(REMOVE_ADDRESS): {err}" -5311 ))); +5213 Frame::PathStatusBackup(info) => { +5214 span.record("path", tracing::field::display(&info.path_id)); +5215 if self.is_multipath_negotiated() { +5216 self.on_path_status(info.path_id, PathStatus::Backup, info.status_seq_no); +5217 } else { +5218 return Err(TransportError::PROTOCOL_VIOLATION( +5219 "received PATH_STATUS_BACKUP frame when multipath was not negotiated", +5220 )); +5221 } +5222 } +5223 Frame::MaxPathId(frame::MaxPathId(path_id)) => { +5224 span.record("path", tracing::field::display(&path_id)); +5225 if !self.is_multipath_negotiated() { +5226 return Err(TransportError::PROTOCOL_VIOLATION( +5227 "received MAX_PATH_ID frame when multipath was not negotiated", +5228 )); +5229 } +5230 // frames that do not increase the path id are ignored +5231 if path_id > self.remote_max_path_id { +5232 self.remote_max_path_id = path_id; +5233 self.issue_first_path_cids(now); +5234 while let Some(true) = self.continue_nat_traversal_round(now) {} +5235 } +5236 } +5237 Frame::PathsBlocked(frame::PathsBlocked(max_path_id)) => { +5238 // Receipt of a value of Maximum Path Identifier or Path Identifier that is higher than the local maximum value MUST +5239 // be treated as a connection error of type PROTOCOL_VIOLATION. +5240 // Ref <https://www.ietf.org/archive/id/draft-ietf-quic-multipath-14.html#name-paths_blocked-and-path_cids> +5241 if self.is_multipath_negotiated() { +5242 if max_path_id > self.local_max_path_id { +5243 return Err(TransportError::PROTOCOL_VIOLATION( +5244 "PATHS_BLOCKED maximum path identifier was larger than local maximum", +5245 )); +5246 } +5247 debug!("received PATHS_BLOCKED({:?})", max_path_id); +5248 // TODO(@divma): ensure max concurrent paths +5249 } else { +5250 return Err(TransportError::PROTOCOL_VIOLATION( +5251 "received PATHS_BLOCKED frame when not multipath was not negotiated", +5252 )); +5253 } +5254 } +5255 Frame::PathCidsBlocked(frame::PathCidsBlocked { path_id, next_seq }) => { +5256 // Nothing to do. This is recorded in the frame stats, but otherwise we +5257 // always issue all CIDs we're allowed to issue, so either this is an +5258 // impatient peer or a bug on our side. +5259 +5260 // Receipt of a value of Maximum Path Identifier or Path Identifier that is higher than the local maximum value MUST +5261 // be treated as a connection error of type PROTOCOL_VIOLATION. +5262 // Ref <https://www.ietf.org/archive/id/draft-ietf-quic-multipath-14.html#name-paths_blocked-and-path_cids> +5263 if self.is_multipath_negotiated() { +5264 if path_id > self.local_max_path_id { +5265 return Err(TransportError::PROTOCOL_VIOLATION( +5266 "PATH_CIDS_BLOCKED path identifier was larger than local maximum", +5267 )); +5268 } +5269 if next_seq.0 +5270 > self +5271 .local_cid_state +5272 .get(&path_id) +5273 .map(|cid_state| cid_state.active_seq().1 + 1) +5274 .unwrap_or_default() +5275 { +5276 return Err(TransportError::PROTOCOL_VIOLATION( +5277 "PATH_CIDS_BLOCKED next sequence number larger than in local state", +5278 )); +5279 } +5280 debug!(%path_id, %next_seq, "received PATH_CIDS_BLOCKED"); +5281 } else { +5282 return Err(TransportError::PROTOCOL_VIOLATION( +5283 "received PATH_CIDS_BLOCKED frame when not multipath was not negotiated", +5284 )); +5285 } +5286 } +5287 Frame::AddAddress(addr) => { +5288 let client_state = match self.n0_nat_traversal.client_side_mut() { +5289 Ok(state) => state, +5290 Err(err) => { +5291 return Err(TransportError::PROTOCOL_VIOLATION(format!( +5292 "Nat traversal(ADD_ADDRESS): {err}" +5293 ))); +5294 } +5295 }; +5296 +5297 if !client_state.check_remote_address(&addr) { +5298 // if the address is not valid we flag it, but update anyway +5299 warn!(?addr, "server sent illegal ADD_ADDRESS frame"); +5300 } +5301 +5302 match client_state.add_remote_address(addr) { +5303 Ok(maybe_added) => { +5304 if let Some(added) = maybe_added { +5305 self.events.push_back(Event::NatTraversal( +5306 n0_nat_traversal::Event::AddressAdded(added), +5307 )); +5308 } +5309 } +5310 Err(e) => { +5311 warn!(%e, "failed to add remote address") 5312 } -5313 }; -5314 if let Some(removed_addr) = client_state.remove_remote_address(addr) { -5315 self.events.push_back(Event::NatTraversal( -5316 n0_nat_traversal::Event::AddressRemoved(removed_addr), -5317 )); -5318 } -5319 } -5320 Frame::ReachOut(reach_out) => { -5321 let ipv6 = self.is_ipv6(); -5322 let server_state = match self.n0_nat_traversal.server_side_mut() { -5323 Ok(state) => state, -5324 Err(err) => { -5325 return Err(TransportError::PROTOCOL_VIOLATION(format!( -5326 "Nat traversal(REACH_OUT): {err}" -5327 ))); -5328 } -5329 }; -5330 -5331 if let Err(err) = server_state.handle_reach_out(reach_out, ipv6) { -5332 return Err(TransportError::PROTOCOL_VIOLATION(format!( -5333 "Nat traversal(REACH_OUT): {err}" -5334 ))); -5335 } -5336 } -5337 } -5338 } -5339 -5340 let space = self.spaces[SpaceId::Data].for_path(path_id); -5341 if space -5342 .pending_acks -5343 .packet_received(now, number, ack_eliciting, &space.dedup) -5344 { -5345 if self.abandoned_paths.contains(&path_id) { -5346 // § 3.4.3 QUIC-MULTIPATH: promptly send ACKs for packets received from -5347 // abandoned paths. -5348 space.pending_acks.set_immediate_ack_required(); -5349 } else { -5350 self.timers.set( -5351 Timer::PerPath(path_id, PathTimer::MaxAckDelay), -5352 now + self.ack_frequency.max_ack_delay, -5353 self.qlog.with_time(now), -5354 ); -5355 } -5356 } -5357 -5358 // Issue stream ID credit due to ACKs of outgoing finish/resets and incoming finish/resets -5359 // on stopped streams. Incoming finishes/resets on open streams are not handled here as they -5360 // are only freed, and hence only issue credit, once the application has been notified -5361 // during a read on the stream. -5362 let pending = &mut self.spaces[SpaceId::Data].pending; -5363 self.streams.queue_max_stream_id(pending); -5364 -5365 if let Some(reason) = close { -5366 self.state.move_to_draining(Some(reason.into())); -5367 self.connection_close_pending = true; -5368 } -5369 -5370 if Some(number) == self.spaces[SpaceId::Data].for_path(path_id).rx_packet -5371 && !is_probing_packet -5372 && network_path != self.path_data(path_id).network_path -5373 { -5374 let ConnectionSide::Server { ref server_config } = self.side else { -5375 panic!("packets from unknown remote should be dropped by clients"); -5376 }; -5377 debug_assert!( -5378 server_config.migration, -5379 "migration-initiating packets should have been dropped immediately" -5380 ); -5381 self.migrate(path_id, now, network_path, migration_observed_addr); -5382 // Break linkability, if possible -5383 self.update_remote_cid(path_id); -5384 self.spin = false; -5385 } -5386 -5387 Ok(()) -5388 } -5389 -5390 fn migrate( -5391 &mut self, -5392 path_id: PathId, -5393 now: Instant, -5394 network_path: FourTuple, -5395 observed_addr: Option<ObservedAddr>, -5396 ) { -5397 trace!(%network_path, %path_id, "migration initiated"); -5398 self.path_generation_counter = self.path_generation_counter.wrapping_add(1); -5399 // TODO(@divma): conditions for path migration in multipath are very specific, check them -5400 // again to prevent path migrations that should actually create a new path -5401 -5402 // Reset rtt/congestion state for new path unless it looks like a NAT rebinding. -5403 // Note that the congestion window will not grow until validation terminates. Helps mitigate -5404 // amplification attacks performed by spoofing source addresses. -5405 let prev_pto = self.pto(SpaceKind::Data, path_id); -5406 let path = self.paths.get_mut(&path_id).expect("known path"); -5407 let mut new_path_data = if network_path.remote.is_ipv4() -5408 && network_path.remote.ip() == path.data.network_path.remote.ip() -5409 { -5410 PathData::from_previous(network_path, &path.data, self.path_generation_counter, now) -5411 } else { -5412 let peer_max_udp_payload_size = -5413 u16::try_from(self.peer_params.max_udp_payload_size.into_inner()) -5414 .unwrap_or(u16::MAX); -5415 PathData::new( -5416 network_path, -5417 self.allow_mtud, -5418 Some(peer_max_udp_payload_size), -5419 self.path_generation_counter, -5420 now, -5421 &self.config, -5422 ) -5423 }; -5424 new_path_data.last_observed_addr_report = path.data.last_observed_addr_report.clone(); -5425 if let Some(report) = observed_addr -5426 && let Some(updated) = new_path_data.update_observed_addr_report(report) -5427 { -5428 tracing::info!("adding observed addr event from migration"); -5429 self.events.push_back(Event::Path(PathEvent::ObservedAddr { -5430 id: path_id, -5431 addr: updated, -5432 })); -5433 } -5434 new_path_data.pending_on_path_challenge = true; -5435 -5436 let mut prev_path_data = mem::replace(&mut path.data, new_path_data); -5437 -5438 // Only store this as previous path if it was validated. For all we know there could -5439 // already be a previous path stored which might have been validated in the past, -5440 // which is more valuable than one that's not yet validated. -5441 // -5442 // With multipath it is possible that there are no remote CIDs for the path ID -5443 // yet. In this case we would never have sent on this path yet and would not be able -5444 // to send a PATH_CHALLENGE either, which is currently a fire-and-forget affair -5445 // anyway. So don't store such a path either. -5446 if !prev_path_data.validated -5447 && let Some(cid) = self.remote_cids.get(&path_id).map(CidQueue::active) -5448 { -5449 prev_path_data.pending_on_path_challenge = true; -5450 // We haven't updated the remote CID yet, this captures the remote CID we were using on -5451 // the previous path. -5452 path.prev = Some((cid, prev_path_data)); -5453 } -5454 -5455 // We need to re-assign the correct remote to this path in qlog -5456 self.qlog.emit_tuple_assigned(path_id, network_path, now); -5457 -5458 self.timers.set( -5459 Timer::PerPath(path_id, PathTimer::PathValidationFailed), -5460 now + 3 * cmp::max(self.pto(SpaceKind::Data, path_id), prev_pto), -5461 self.qlog.with_time(now), -5462 ); -5463 } +5313 } +5314 } +5315 Frame::RemoveAddress(addr) => { +5316 let client_state = match self.n0_nat_traversal.client_side_mut() { +5317 Ok(state) => state, +5318 Err(err) => { +5319 return Err(TransportError::PROTOCOL_VIOLATION(format!( +5320 "Nat traversal(REMOVE_ADDRESS): {err}" +5321 ))); +5322 } +5323 }; +5324 if let Some(removed_addr) = client_state.remove_remote_address(addr) { +5325 self.events.push_back(Event::NatTraversal( +5326 n0_nat_traversal::Event::AddressRemoved(removed_addr), +5327 )); +5328 } +5329 } +5330 Frame::ReachOut(reach_out) => { +5331 let ipv6 = self.is_ipv6(); +5332 let server_state = match self.n0_nat_traversal.server_side_mut() { +5333 Ok(state) => state, +5334 Err(err) => { +5335 return Err(TransportError::PROTOCOL_VIOLATION(format!( +5336 "Nat traversal(REACH_OUT): {err}" +5337 ))); +5338 } +5339 }; +5340 +5341 if let Err(err) = server_state.handle_reach_out(reach_out, ipv6) { +5342 return Err(TransportError::PROTOCOL_VIOLATION(format!( +5343 "Nat traversal(REACH_OUT): {err}" +5344 ))); +5345 } +5346 } +5347 } +5348 } +5349 +5350 let space = self.spaces[SpaceId::Data].for_path(path_id); +5351 if space +5352 .pending_acks +5353 .packet_received(now, number, ack_eliciting, &space.dedup) +5354 { +5355 if self.abandoned_paths.contains(&path_id) { +5356 // § 3.4.3 QUIC-MULTIPATH: promptly send ACKs for packets received from +5357 // abandoned paths. +5358 space.pending_acks.set_immediate_ack_required(); +5359 } else { +5360 self.timers.set( +5361 Timer::PerPath(path_id, PathTimer::MaxAckDelay), +5362 now + self.ack_frequency.max_ack_delay, +5363 self.qlog.with_time(now), +5364 ); +5365 } +5366 } +5367 +5368 // Issue stream ID credit due to ACKs of outgoing finish/resets and incoming finish/resets +5369 // on stopped streams. Incoming finishes/resets on open streams are not handled here as they +5370 // are only freed, and hence only issue credit, once the application has been notified +5371 // during a read on the stream. +5372 let pending = &mut self.spaces[SpaceId::Data].pending; +5373 self.streams.queue_max_stream_id(pending); +5374 +5375 if let Some(reason) = close { +5376 self.state.move_to_draining(Some(reason.into())); +5377 self.connection_close_pending = true; +5378 } +5379 +5380 if Some(number) == self.spaces[SpaceId::Data].for_path(path_id).rx_packet +5381 && !is_probing_packet +5382 && network_path != self.path_data(path_id).network_path +5383 { +5384 let ConnectionSide::Server { ref server_config } = self.side else { +5385 panic!("packets from unknown remote should be dropped by clients"); +5386 }; +5387 debug_assert!( +5388 server_config.migration, +5389 "migration-initiating packets should have been dropped immediately" +5390 ); +5391 self.migrate(path_id, now, network_path, migration_observed_addr); +5392 // Break linkability, if possible +5393 self.update_remote_cid(path_id); +5394 self.spin = false; +5395 } +5396 +5397 Ok(()) +5398 } +5399 +5400 fn migrate( +5401 &mut self, +5402 path_id: PathId, +5403 now: Instant, +5404 network_path: FourTuple, +5405 observed_addr: Option<ObservedAddr>, +5406 ) { +5407 trace!(%network_path, %path_id, "migration initiated"); +5408 self.path_generation_counter = self.path_generation_counter.wrapping_add(1); +5409 // TODO(@divma): conditions for path migration in multipath are very specific, check them +5410 // again to prevent path migrations that should actually create a new path +5411 +5412 // Reset rtt/congestion state for new path unless it looks like a NAT rebinding. +5413 // Note that the congestion window will not grow until validation terminates. Helps mitigate +5414 // amplification attacks performed by spoofing source addresses. +5415 let prev_pto = self.pto(SpaceKind::Data, path_id); +5416 let path = self.paths.get_mut(&path_id).expect("known path"); +5417 let mut new_path_data = if network_path.remote.is_ipv4() +5418 && network_path.remote.ip() == path.data.network_path.remote.ip() +5419 { +5420 PathData::from_previous(network_path, &path.data, self.path_generation_counter, now) +5421 } else { +5422 let peer_max_udp_payload_size = +5423 u16::try_from(self.peer_params.max_udp_payload_size.into_inner()) +5424 .unwrap_or(u16::MAX); +5425 PathData::new( +5426 network_path, +5427 self.allow_mtud, +5428 Some(peer_max_udp_payload_size), +5429 self.path_generation_counter, +5430 now, +5431 &self.config, +5432 ) +5433 }; +5434 new_path_data.last_observed_addr_report = path.data.last_observed_addr_report.clone(); +5435 if let Some(report) = observed_addr +5436 && let Some(updated) = new_path_data.update_observed_addr_report(report) +5437 { +5438 tracing::info!("adding observed addr event from migration"); +5439 self.events.push_back(Event::Path(PathEvent::ObservedAddr { +5440 id: path_id, +5441 addr: updated, +5442 })); +5443 } +5444 new_path_data.pending_on_path_challenge = true; +5445 +5446 let mut prev_path_data = mem::replace(&mut path.data, new_path_data); +5447 +5448 // Only store this as previous path if it was validated. For all we know there could +5449 // already be a previous path stored which might have been validated in the past, +5450 // which is more valuable than one that's not yet validated. +5451 // +5452 // With multipath it is possible that there are no remote CIDs for the path ID +5453 // yet. In this case we would never have sent on this path yet and would not be able +5454 // to send a PATH_CHALLENGE either, which is currently a fire-and-forget affair +5455 // anyway. So don't store such a path either. +5456 if !prev_path_data.validated +5457 && let Some(cid) = self.remote_cids.get(&path_id).map(CidQueue::active) +5458 { +5459 prev_path_data.pending_on_path_challenge = true; +5460 // We haven't updated the remote CID yet, this captures the remote CID we were using on +5461 // the previous path. +5462 path.prev = Some((cid, prev_path_data)); +5463 } 5464 -5465 /// Handle a change in the local address, i.e. an active migration -5466 /// -5467 /// In the general (non-multipath) case, paths will perform a RFC9000 migration and be pinged -5468 /// for a liveness check. This is the behaviour of a path assumed to be recoverable, even if -5469 /// this is not the case. -5470 /// -5471 /// Clients in a connection in which multipath has been negotiated should migrate paths to new -5472 /// [`PathId`]s. For paths that are known to be non-recoverable can be migrated to a new -5473 /// [`PathId`] by closing the current path, and opening a new one to the same remote. Treating -5474 /// paths as non recoverable when necessary accelerates connectivity re-establishment, or might -5475 /// allow it altogether. +5465 // We need to re-assign the correct remote to this path in qlog +5466 self.qlog.emit_tuple_assigned(path_id, network_path, now); +5467 +5468 self.timers.set( +5469 Timer::PerPath(path_id, PathTimer::PathValidationFailed), +5470 now + 3 * cmp::max(self.pto(SpaceKind::Data, path_id), prev_pto), +5471 self.qlog.with_time(now), +5472 ); +5473 } +5474 +5475 /// Handle a change in the local address, i.e. an active migration 5476 /// -5477 /// The optional `hint` allows callers to indicate when paths are non-recoverable and should be -5478 /// migrated to new a [`PathId`]. -5479 // NOTE: only clients are allowed to migrate, but generally dealing with RFC9000 migrations is -5480 // lacking <https://github.com/n0-computer/noq/issues/364> -5481 pub fn handle_network_change(&mut self, hint: Option<&dyn NetworkChangeHint>, now: Instant) { -5482 debug!("network changed"); -5483 if self.state.is_drained() { -5484 return; -5485 } -5486 if self.highest_space < SpaceKind::Data { -5487 for path in self.paths.values_mut() { -5488 // Clear the local address for it to be obtained from the socket again. -5489 path.data.network_path.local_ip = None; -5490 } -5491 -5492 self.update_remote_cid(PathId::ZERO); -5493 self.ping(); -5494 -5495 return; -5496 } -5497 -5498 // Paths that can't recover so a new path should be open instead. If multipath is not -5499 // negotiated, this will be empty. -5500 let mut non_recoverable_paths = Vec::default(); -5501 let mut recoverable_paths = Vec::default(); -5502 let mut open_paths = 0; -5503 -5504 let is_multipath_negotiated = self.is_multipath_negotiated(); -5505 let is_client = self.side().is_client(); -5506 let immediate_ack_allowed = self.peer_supports_ack_frequency(); +5477 /// In the general (non-multipath) case, paths will perform a RFC9000 migration and be pinged +5478 /// for a liveness check. This is the behaviour of a path assumed to be recoverable, even if +5479 /// this is not the case. +5480 /// +5481 /// Clients in a connection in which multipath has been negotiated should migrate paths to new +5482 /// [`PathId`]s. For paths that are known to be non-recoverable can be migrated to a new +5483 /// [`PathId`] by closing the current path, and opening a new one to the same remote. Treating +5484 /// paths as non recoverable when necessary accelerates connectivity re-establishment, or might +5485 /// allow it altogether. +5486 /// +5487 /// The optional `hint` allows callers to indicate when paths are non-recoverable and should be +5488 /// migrated to new a [`PathId`]. +5489 // NOTE: only clients are allowed to migrate, but generally dealing with RFC9000 migrations is +5490 // lacking <https://github.com/n0-computer/noq/issues/364> +5491 pub fn handle_network_change(&mut self, hint: Option<&dyn NetworkChangeHint>, now: Instant) { +5492 debug!("network changed"); +5493 if self.state.is_drained() { +5494 return; +5495 } +5496 if self.highest_space < SpaceKind::Data { +5497 for path in self.paths.values_mut() { +5498 // Clear the local address for it to be obtained from the socket again. +5499 path.data.network_path.local_ip = None; +5500 } +5501 +5502 self.update_remote_cid(PathId::ZERO); +5503 self.ping(); +5504 +5505 return; +5506 } 5507 -5508 for (path_id, path) in self.paths.iter_mut() { -5509 if self.abandoned_paths.contains(path_id) { -5510 continue; -5511 } -5512 open_paths += 1; +5508 // Paths that can't recover so a new path should be open instead. If multipath is not +5509 // negotiated, this will be empty. +5510 let mut non_recoverable_paths = Vec::default(); +5511 let mut recoverable_paths = Vec::default(); +5512 let mut open_paths = 0; 5513 -5514 // Read the network path BEFORE clearing local_ip, so the hint can -5515 // check which interface the path was using. -5516 let network_path = path.data.network_path; +5514 let is_multipath_negotiated = self.is_multipath_negotiated(); +5515 let is_client = self.side().is_client(); +5516 let immediate_ack_allowed = self.peer_supports_ack_frequency(); 5517 -5518 // Clear the local address for it to be obtained from the socket again. This applies to -5519 // all paths, regardless of being considered recoverable or not -5520 path.data.network_path.local_ip = None; -5521 let remote = network_path.remote; -5522 -5523 // Without multipath, the connection tries to recover the single path, whereas with -5524 // multipath, even in a single-path scenario, we attempt to migrate the path to a new -5525 // PathId. -5526 let attempt_to_recover = if is_multipath_negotiated { -5527 if is_client { -5528 hint.map(|h| h.is_path_recoverable(*path_id, network_path)) -5529 .unwrap_or(false) -5530 } else { -5531 // Servers should have stable addresses so this scenario is generally discouraged. -5532 // There is no way to prevent this, so the best hope is to attempt to recover the -5533 // path -5534 true -5535 } -5536 } else { -5537 // In the non multipath case, we try to recover the single active path -5538 true -5539 }; -5540 -5541 if attempt_to_recover { -5542 recoverable_paths.push((*path_id, remote)); -5543 } else { -5544 non_recoverable_paths.push((*path_id, remote, path.data.local_status())) -5545 } -5546 } -5547 -5548 /* NON RECOVERABLE PATHS */ -5549 // This are handled first, so that in case the treatment intended for these fails, we can -5550 // go the recoverable route instead. -5551 -5552 // Decide if we need to close first or open first in the multipath case. -5553 // - Opening first has a higher risk of getting limited by the negotiated MAX_PATH_ID. -5554 // - Closing first risks this being the only open path. -5555 // We prefer closing paths first unless we identify this is the last open path. -5556 let open_first = open_paths == non_recoverable_paths.len(); +5518 for (path_id, path) in self.paths.iter_mut() { +5519 if self.abandoned_paths.contains(path_id) { +5520 continue; +5521 } +5522 open_paths += 1; +5523 +5524 // Read the network path BEFORE clearing local_ip, so the hint can +5525 // check which interface the path was using. +5526 let network_path = path.data.network_path; +5527 +5528 // Clear the local address for it to be obtained from the socket again. This applies to +5529 // all paths, regardless of being considered recoverable or not +5530 path.data.network_path.local_ip = None; +5531 let remote = network_path.remote; +5532 +5533 // Without multipath, the connection tries to recover the single path, whereas with +5534 // multipath, even in a single-path scenario, we attempt to migrate the path to a new +5535 // PathId. +5536 let attempt_to_recover = if is_multipath_negotiated { +5537 if is_client { +5538 hint.map(|h| h.is_path_recoverable(*path_id, network_path)) +5539 .unwrap_or(false) +5540 } else { +5541 // Servers should have stable addresses so this scenario is generally discouraged. +5542 // There is no way to prevent this, so the best hope is to attempt to recover the +5543 // path +5544 true +5545 } +5546 } else { +5547 // In the non multipath case, we try to recover the single active path +5548 true +5549 }; +5550 +5551 if attempt_to_recover { +5552 recoverable_paths.push((*path_id, remote)); +5553 } else { +5554 non_recoverable_paths.push((*path_id, remote, path.data.local_status())) +5555 } +5556 } 5557 -5558 for (path_id, remote, status) in non_recoverable_paths.into_iter() { -5559 let network_path = FourTuple { -5560 remote, -5561 local_ip: None, /* allow the local ip to be discovered */ -5562 }; -5563 -5564 if open_first && let Err(e) = self.open_path(network_path, status, now) { -5565 debug!(%e,"Failed to open new path for network change"); -5566 // if this fails, let the path try to recover itself -5567 recoverable_paths.push((path_id, remote)); -5568 continue; -5569 } -5570 -5571 if let Err(e) = -5572 self.close_path_inner(now, path_id, PathAbandonReason::UnusableAfterNetworkChange) -5573 { -5574 debug!(%e,"Failed to close unrecoverable path after network change"); -5575 recoverable_paths.push((path_id, remote)); -5576 continue; -5577 } -5578 -5579 if !open_first && let Err(e) = self.open_path(network_path, status, now) { -5580 // Path has already been closed if we got here. Since the path was not recoverable, -5581 // this might be desirable in any case, because other paths exist (!open_first) and -5582 // this was is considered non recoverable -5583 debug!(%e,"Failed to open new path for network change"); -5584 } -5585 } -5586 -5587 /* RECOVERABLE PATHS */ +5558 /* NON RECOVERABLE PATHS */ +5559 // This are handled first, so that in case the treatment intended for these fails, we can +5560 // go the recoverable route instead. +5561 +5562 // Decide if we need to close first or open first in the multipath case. +5563 // - Opening first has a higher risk of getting limited by the negotiated MAX_PATH_ID. +5564 // - Closing first risks this being the only open path. +5565 // We prefer closing paths first unless we identify this is the last open path. +5566 let open_first = open_paths == non_recoverable_paths.len(); +5567 +5568 for (path_id, remote, status) in non_recoverable_paths.into_iter() { +5569 let network_path = FourTuple { +5570 remote, +5571 local_ip: None, /* allow the local ip to be discovered */ +5572 }; +5573 +5574 if open_first && let Err(e) = self.open_path(network_path, status, now) { +5575 debug!(%e,"Failed to open new path for network change"); +5576 // if this fails, let the path try to recover itself +5577 recoverable_paths.push((path_id, remote)); +5578 continue; +5579 } +5580 +5581 if let Err(e) = +5582 self.close_path_inner(now, path_id, PathAbandonReason::UnusableAfterNetworkChange) +5583 { +5584 debug!(%e,"Failed to close unrecoverable path after network change"); +5585 recoverable_paths.push((path_id, remote)); +5586 continue; +5587 } 5588 -5589 for (path_id, remote) in recoverable_paths.into_iter() { -5590 // Schedule a Ping for a liveness check. -5591 if let Some(path_space) = self.spaces[SpaceId::Data].number_spaces.get_mut(&path_id) { -5592 path_space.ping_pending = true; -5593 -5594 if immediate_ack_allowed { -5595 path_space.immediate_ack_pending = true; -5596 } -5597 } +5589 if !open_first && let Err(e) = self.open_path(network_path, status, now) { +5590 // Path has already been closed if we got here. Since the path was not recoverable, +5591 // this might be desirable in any case, because other paths exist (!open_first) and +5592 // this was is considered non recoverable +5593 debug!(%e,"Failed to open new path for network change"); +5594 } +5595 } +5596 +5597 /* RECOVERABLE PATHS */ 5598 -5599 // Reset PTO backoff so retransmits resume promptly. Congestion controller and -5600 // RTT are intentionally preserved for recoverable paths. We explicitly allow -5601 // this reset also during the handshake, so do not check -5602 // Self::peer_competed_handshake_address_validation. -5603 if let Some(path) = self.paths.get_mut(&path_id) { -5604 path.data.pto_count = 0; -5605 } -5606 self.set_loss_detection_timer(now, path_id); -5607 -5608 let Some((reset_token, retired)) = -5609 self.remote_cids.get_mut(&path_id).and_then(CidQueue::next) -5610 else { -5611 continue; -5612 }; -5613 -5614 // Retire the current remote CID and any CIDs we had to skip. -5615 self.spaces[SpaceId::Data] -5616 .pending -5617 .retire_cids -5618 .extend(retired.map(|seq| (path_id, seq))); -5619 -5620 debug_assert!(!self.state.is_drained()); // required for endpoint_events, checked above -5621 self.endpoint_events -5622 .push_back(EndpointEventInner::ResetToken(path_id, remote, reset_token)); -5623 } -5624 } -5625 -5626 /// Switch to a previously unused remote connection ID, if possible -5627 fn update_remote_cid(&mut self, path_id: PathId) { -5628 let Some((reset_token, retired)) = self -5629 .remote_cids -5630 .get_mut(&path_id) -5631 .and_then(|cids| cids.next()) -5632 else { -5633 return; -5634 }; +5599 for (path_id, remote) in recoverable_paths.into_iter() { +5600 // Schedule a Ping for a liveness check. +5601 if let Some(path_space) = self.spaces[SpaceId::Data].number_spaces.get_mut(&path_id) { +5602 path_space.ping_pending = true; +5603 +5604 if immediate_ack_allowed { +5605 path_space.immediate_ack_pending = true; +5606 } +5607 } +5608 +5609 // Reset PTO backoff so retransmits resume promptly. Congestion controller and +5610 // RTT are intentionally preserved for recoverable paths. We explicitly allow +5611 // this reset also during the handshake, so do not check +5612 // Self::peer_competed_handshake_address_validation. +5613 if let Some(path) = self.paths.get_mut(&path_id) { +5614 path.data.pto_count = 0; +5615 } +5616 self.set_loss_detection_timer(now, path_id); +5617 +5618 let Some((reset_token, retired)) = +5619 self.remote_cids.get_mut(&path_id).and_then(CidQueue::next) +5620 else { +5621 continue; +5622 }; +5623 +5624 // Retire the current remote CID and any CIDs we had to skip. +5625 self.spaces[SpaceId::Data] +5626 .pending +5627 .retire_cids +5628 .extend(retired.map(|seq| (path_id, seq))); +5629 +5630 debug_assert!(!self.state.is_drained()); // required for endpoint_events, checked above +5631 self.endpoint_events +5632 .push_back(EndpointEventInner::ResetToken(path_id, remote, reset_token)); +5633 } +5634 } 5635 -5636 // Retire the current remote CID and any CIDs we had to skip. -5637 self.spaces[SpaceId::Data] -5638 .pending -5639 .retire_cids -5640 .extend(retired.map(|seq| (path_id, seq))); -5641 let remote = self.path_data(path_id).network_path.remote; -5642 self.set_reset_token(path_id, remote, reset_token); -5643 } -5644 -5645 /// Sends this reset token to the endpoint -5646 /// -5647 /// The endpoint needs to know the reset tokens issued by the peer, so that if the peer -5648 /// sends a reset token it knows to route it to this connection. See RFC 9000 section -5649 /// 10.3. Stateless Reset. -5650 /// -5651 /// Reset tokens are different for each path, the endpoint identifies paths by peer -5652 /// socket address however, not by path ID. -5653 fn set_reset_token(&mut self, path_id: PathId, remote: SocketAddr, reset_token: ResetToken) { -5654 debug_assert!(!self.state.is_drained()); // required for endpoint events, set_reset_token is never called for drained connections -5655 self.endpoint_events -5656 .push_back(EndpointEventInner::ResetToken(path_id, remote, reset_token)); -5657 -5658 // During the handshake the server sends a reset token in the transport -5659 // parameters. When we are the client and we receive the reset token during the -5660 // handshake we want this to affect our peer transport parameters. -5661 // TODO(flub): Pretty sure this is pointless, the entire params is overwritten -5662 // shortly after this was called. And then the params don't have this anymore. -5663 if path_id == PathId::ZERO { -5664 self.peer_params.stateless_reset_token = Some(reset_token); -5665 } -5666 } +5636 /// Switch to a previously unused remote connection ID, if possible +5637 fn update_remote_cid(&mut self, path_id: PathId) { +5638 let Some((reset_token, retired)) = self +5639 .remote_cids +5640 .get_mut(&path_id) +5641 .and_then(|cids| cids.next()) +5642 else { +5643 return; +5644 }; +5645 +5646 // Retire the current remote CID and any CIDs we had to skip. +5647 self.spaces[SpaceId::Data] +5648 .pending +5649 .retire_cids +5650 .extend(retired.map(|seq| (path_id, seq))); +5651 let remote = self.path_data(path_id).network_path.remote; +5652 self.set_reset_token(path_id, remote, reset_token); +5653 } +5654 +5655 /// Sends this reset token to the endpoint +5656 /// +5657 /// The endpoint needs to know the reset tokens issued by the peer, so that if the peer +5658 /// sends a reset token it knows to route it to this connection. See RFC 9000 section +5659 /// 10.3. Stateless Reset. +5660 /// +5661 /// Reset tokens are different for each path, the endpoint identifies paths by peer +5662 /// socket address however, not by path ID. +5663 fn set_reset_token(&mut self, path_id: PathId, remote: SocketAddr, reset_token: ResetToken) { +5664 debug_assert!(!self.state.is_drained()); // required for endpoint events, set_reset_token is never called for drained connections +5665 self.endpoint_events +5666 .push_back(EndpointEventInner::ResetToken(path_id, remote, reset_token)); 5667 -5668 /// Issue an initial set of connection IDs to the peer upon connection -5669 fn issue_first_cids(&mut self, now: Instant) { -5670 if self -5671 .local_cid_state -5672 .get(&PathId::ZERO) -5673 .expect("PathId::ZERO exists when the connection is created") -5674 .cid_len() -5675 == 0 -5676 { -5677 return; -5678 } -5679 -5680 // Subtract 1 to account for the CID we supplied while handshaking -5681 let mut n = self.peer_params.issue_cids_limit() - 1; -5682 if let ConnectionSide::Server { server_config } = &self.side -5683 && server_config.has_preferred_address() -5684 { -5685 // We also sent a CID in the transport parameters -5686 n -= 1; -5687 } -5688 debug_assert!(!self.state.is_drained()); // requirement for endpoint_events -5689 self.endpoint_events -5690 .push_back(EndpointEventInner::NeedIdentifiers(PathId::ZERO, now, n)); -5691 } -5692 -5693 /// Issues an initial set of CIDs for paths that have not yet had any CIDs issued -5694 /// -5695 /// Later CIDs are issued when CIDs expire or are retired by the peer. -5696 fn issue_first_path_cids(&mut self, now: Instant) { -5697 if let Some(max_path_id) = self.max_path_id() { -5698 let mut path_id = self.max_path_id_with_cids.next(); -5699 while path_id <= max_path_id { -5700 self.endpoint_events -5701 .push_back(EndpointEventInner::NeedIdentifiers( -5702 path_id, -5703 now, -5704 self.peer_params.issue_cids_limit(), -5705 )); -5706 path_id = path_id.next(); -5707 } -5708 self.max_path_id_with_cids = max_path_id; -5709 } -5710 } -5711 -5712 /// Populates a packet with frames -5713 /// -5714 /// This tries to fit as many frames as possible into the packet. -5715 /// -5716 /// *path_exclusive_only* means to only build frames which can only be sent on this -5717 /// *path. This is used in multipath for backup paths while there is still an active -5718 /// *path. -5719 fn populate_packet<'a, 'b>( -5720 &mut self, -5721 now: Instant, -5722 space_id: SpaceId, -5723 path_id: PathId, -5724 scheduling_info: &PathSchedulingInfo, -5725 builder: &mut PacketBuilder<'a, 'b>, -5726 ) { -5727 let is_multipath_negotiated = self.is_multipath_negotiated(); -5728 let space_has_keys = self.crypto_state.has_keys(space_id.encryption_level()); -5729 let is_0rtt = space_id == SpaceId::Data && !space_has_keys; -5730 let stats = &mut self.path_stats.for_path(path_id).frame_tx; -5731 let space = &mut self.spaces[space_id]; -5732 let path = &mut self.paths.get_mut(&path_id).expect("known path").data; -5733 space -5734 .for_path(path_id) -5735 .pending_acks -5736 .maybe_ack_non_eliciting(); -5737 -5738 // HANDSHAKE_DONE -5739 if !is_0rtt -5740 && !scheduling_info.is_abandoned -5741 && scheduling_info.may_send_data -5742 && mem::replace(&mut space.pending.handshake_done, false) -5743 { -5744 builder.write_frame(frame::HandshakeDone, stats); -5745 } -5746 -5747 // PING -5748 if !scheduling_info.is_abandoned -5749 && mem::replace(&mut space.for_path(path_id).ping_pending, false) -5750 { -5751 builder.write_frame(frame::Ping, stats); -5752 } -5753 -5754 // IMMEDIATE_ACK -5755 if !scheduling_info.is_abandoned -5756 && mem::replace(&mut space.for_path(path_id).immediate_ack_pending, false) -5757 { -5758 debug_assert_eq!( -5759 space_id, -5760 SpaceId::Data, -5761 "immediate acks must be sent in the data space" -5762 ); -5763 builder.write_frame(frame::ImmediateAck, stats); -5764 } -5765 -5766 // ACK -5767 if !scheduling_info.is_abandoned && scheduling_info.may_send_data { -5768 for path_id in space -5769 .number_spaces -5770 .iter_mut() -5771 .filter(|(_, pns)| pns.pending_acks.can_send()) -5772 .map(|(&path_id, _)| path_id) -5773 .collect::<Vec<_>>() -5774 { -5775 Self::populate_acks( -5776 now, -5777 self.receiving_ecn, -5778 path_id, -5779 space_id, -5780 space, -5781 is_multipath_negotiated, -5782 builder, -5783 stats, -5784 space_has_keys, -5785 ); -5786 } -5787 } -5788 -5789 // ACK_FREQUENCY -5790 if !scheduling_info.is_abandoned -5791 && scheduling_info.may_send_data -5792 && mem::replace(&mut space.pending.ack_frequency, false) -5793 { -5794 let sequence_number = self.ack_frequency.next_sequence_number(); -5795 -5796 // Safe to unwrap because this is always provided when ACK frequency is enabled -5797 let config = self.config.ack_frequency_config.as_ref().unwrap(); +5668 // During the handshake the server sends a reset token in the transport +5669 // parameters. When we are the client and we receive the reset token during the +5670 // handshake we want this to affect our peer transport parameters. +5671 // TODO(flub): Pretty sure this is pointless, the entire params is overwritten +5672 // shortly after this was called. And then the params don't have this anymore. +5673 if path_id == PathId::ZERO { +5674 self.peer_params.stateless_reset_token = Some(reset_token); +5675 } +5676 } +5677 +5678 /// Issue an initial set of connection IDs to the peer upon connection +5679 fn issue_first_cids(&mut self, now: Instant) { +5680 if self +5681 .local_cid_state +5682 .get(&PathId::ZERO) +5683 .expect("PathId::ZERO exists when the connection is created") +5684 .cid_len() +5685 == 0 +5686 { +5687 return; +5688 } +5689 +5690 // Subtract 1 to account for the CID we supplied while handshaking +5691 let mut n = self.peer_params.issue_cids_limit() - 1; +5692 if let ConnectionSide::Server { server_config } = &self.side +5693 && server_config.has_preferred_address() +5694 { +5695 // We also sent a CID in the transport parameters +5696 n -= 1; +5697 } +5698 debug_assert!(!self.state.is_drained()); // requirement for endpoint_events +5699 self.endpoint_events +5700 .push_back(EndpointEventInner::NeedIdentifiers(PathId::ZERO, now, n)); +5701 } +5702 +5703 /// Issues an initial set of CIDs for paths that have not yet had any CIDs issued +5704 /// +5705 /// Later CIDs are issued when CIDs expire or are retired by the peer. +5706 fn issue_first_path_cids(&mut self, now: Instant) { +5707 if let Some(max_path_id) = self.max_path_id() { +5708 let mut path_id = self.max_path_id_with_cids.next(); +5709 while path_id <= max_path_id { +5710 self.endpoint_events +5711 .push_back(EndpointEventInner::NeedIdentifiers( +5712 path_id, +5713 now, +5714 self.peer_params.issue_cids_limit(), +5715 )); +5716 path_id = path_id.next(); +5717 } +5718 self.max_path_id_with_cids = max_path_id; +5719 } +5720 } +5721 +5722 /// Populates a packet with frames +5723 /// +5724 /// This tries to fit as many frames as possible into the packet. +5725 /// +5726 /// *path_exclusive_only* means to only build frames which can only be sent on this +5727 /// *path. This is used in multipath for backup paths while there is still an active +5728 /// *path. +5729 fn populate_packet<'a, 'b>( +5730 &mut self, +5731 now: Instant, +5732 space_id: SpaceId, +5733 path_id: PathId, +5734 scheduling_info: &PathSchedulingInfo, +5735 builder: &mut PacketBuilder<'a, 'b>, +5736 ) { +5737 let is_multipath_negotiated = self.is_multipath_negotiated(); +5738 let space_has_keys = self.crypto_state.has_keys(space_id.encryption_level()); +5739 let is_0rtt = space_id == SpaceId::Data && !space_has_keys; +5740 let stats = &mut self.path_stats.for_path(path_id).frame_tx; +5741 let space = &mut self.spaces[space_id]; +5742 let path = &mut self.paths.get_mut(&path_id).expect("known path").data; +5743 space +5744 .for_path(path_id) +5745 .pending_acks +5746 .maybe_ack_non_eliciting(); +5747 +5748 // HANDSHAKE_DONE +5749 if !is_0rtt +5750 && !scheduling_info.is_abandoned +5751 && scheduling_info.may_send_data +5752 && mem::replace(&mut space.pending.handshake_done, false) +5753 { +5754 builder.write_frame(frame::HandshakeDone, stats); +5755 } +5756 +5757 // PING +5758 if !scheduling_info.is_abandoned +5759 && mem::replace(&mut space.for_path(path_id).ping_pending, false) +5760 { +5761 builder.write_frame(frame::Ping, stats); +5762 } +5763 +5764 // IMMEDIATE_ACK +5765 if !scheduling_info.is_abandoned +5766 && mem::replace(&mut space.for_path(path_id).immediate_ack_pending, false) +5767 { +5768 debug_assert_eq!( +5769 space_id, +5770 SpaceId::Data, +5771 "immediate acks must be sent in the data space" +5772 ); +5773 builder.write_frame(frame::ImmediateAck, stats); +5774 } +5775 +5776 // ACK +5777 if !scheduling_info.is_abandoned && scheduling_info.may_send_data { +5778 for path_id in space +5779 .number_spaces +5780 .iter_mut() +5781 .filter(|(_, pns)| pns.pending_acks.can_send()) +5782 .map(|(&path_id, _)| path_id) +5783 .collect::<Vec<_>>() +5784 { +5785 Self::populate_acks( +5786 now, +5787 self.receiving_ecn, +5788 path_id, +5789 space_id, +5790 space, +5791 is_multipath_negotiated, +5792 builder, +5793 stats, +5794 space_has_keys, +5795 ); +5796 } +5797 } 5798 -5799 // Ensure the delay is within bounds to avoid a PROTOCOL_VIOLATION error -5800 let max_ack_delay = self.ack_frequency.candidate_max_ack_delay( -5801 path.rtt.get(), -5802 config, -5803 &self.peer_params, -5804 ); +5799 // ACK_FREQUENCY +5800 if !scheduling_info.is_abandoned +5801 && scheduling_info.may_send_data +5802 && mem::replace(&mut space.pending.ack_frequency, false) +5803 { +5804 let sequence_number = self.ack_frequency.next_sequence_number(); 5805 -5806 let frame = frame::AckFrequency { -5807 sequence: sequence_number, -5808 ack_eliciting_threshold: config.ack_eliciting_threshold, -5809 request_max_ack_delay: max_ack_delay.as_micros().try_into().unwrap_or(VarInt::MAX), -5810 reordering_threshold: config.reordering_threshold, -5811 }; -5812 builder.write_frame(frame, stats); -5813 -5814 self.ack_frequency -5815 .ack_frequency_sent(path_id, builder.packet_number, max_ack_delay); -5816 } -5817 -5818 // PATH_CHALLENGE -5819 if !scheduling_info.is_abandoned -5820 && space_id == SpaceId::Data -5821 && path.pending_on_path_challenge -5822 && !self.state.is_closed() -5823 && builder.frame_space_remaining() > frame::PathChallenge::SIZE_BOUND -5824 // we don't want to send new challenges if we are already closing -5825 { -5826 path.pending_on_path_challenge = false; +5806 // Safe to unwrap because this is always provided when ACK frequency is enabled +5807 let config = self.config.ack_frequency_config.as_ref().unwrap(); +5808 +5809 // Ensure the delay is within bounds to avoid a PROTOCOL_VIOLATION error +5810 let max_ack_delay = self.ack_frequency.candidate_max_ack_delay( +5811 path.rtt.get(), +5812 config, +5813 &self.peer_params, +5814 ); +5815 +5816 let frame = frame::AckFrequency { +5817 sequence: sequence_number, +5818 ack_eliciting_threshold: config.ack_eliciting_threshold, +5819 request_max_ack_delay: max_ack_delay.as_micros().try_into().unwrap_or(VarInt::MAX), +5820 reordering_threshold: config.reordering_threshold, +5821 }; +5822 builder.write_frame(frame, stats); +5823 +5824 self.ack_frequency +5825 .ack_frequency_sent(path_id, builder.packet_number, max_ack_delay); +5826 } 5827 -5828 let token = self.rng.random(); -5829 path.record_path_challenge_sent(now, token, path.network_path); -5830 // Generate a new challenge every time we send a new PATH_CHALLENGE -5831 let challenge = frame::PathChallenge(token); -5832 builder.write_frame(challenge, stats); -5833 builder.require_padding(); -5834 let pto = self.ack_frequency.max_ack_delay_for_pto() + path.rtt.pto_base(); -5835 if path.open_status == paths::OpenStatus::Pending { -5836 path.open_status = paths::OpenStatus::Sent; -5837 self.timers.set( -5838 Timer::PerPath(path_id, PathTimer::PathOpenFailed), -5839 now + 3 * pto, -5840 self.qlog.with_time(now), -5841 ); -5842 } -5843 -5844 self.timers.set( -5845 Timer::PerPath(path_id, PathTimer::PathChallengeLost), -5846 now + pto, -5847 self.qlog.with_time(now), -5848 ); -5849 -5850 if is_multipath_negotiated && !path.validated && path.pending_on_path_challenge { -5851 // queue informing the path status along with the challenge -5852 space.pending.path_status.insert(path_id); -5853 } -5854 -5855 // Always include an OBSERVED_ADDR frame with a PATH_CHALLENGE, regardless -5856 // of whether one has already been sent on this path. -5857 if space_id == SpaceId::Data -5858 && self -5859 .config -5860 .address_discovery_role -5861 .should_report(&self.peer_params.address_discovery_role) -5862 { -5863 let frame = frame::ObservedAddr::new( -5864 path.network_path.remote, -5865 self.next_observed_addr_seq_no, -5866 ); -5867 if builder.frame_space_remaining() > frame.size() { -5868 builder.write_frame(frame, stats); -5869 -5870 self.next_observed_addr_seq_no = -5871 self.next_observed_addr_seq_no.saturating_add(1u8); -5872 path.observed_addr_sent = true; -5873 -5874 space.pending.observed_addr = false; -5875 } -5876 } -5877 } -5878 -5879 // PATH_RESPONSE -5880 if !scheduling_info.is_abandoned -5881 && space_id == SpaceId::Data -5882 && builder.frame_space_remaining() > frame::PathResponse::SIZE_BOUND -5883 && let Some(token) = path.path_responses.pop_on_path(path.network_path) -5884 { -5885 let response = frame::PathResponse(token); -5886 builder.write_frame(response, stats); -5887 builder.require_padding(); +5828 // PATH_CHALLENGE +5829 if !scheduling_info.is_abandoned +5830 && space_id == SpaceId::Data +5831 && path.pending_on_path_challenge +5832 && !self.state.is_closed() +5833 && builder.frame_space_remaining() > frame::PathChallenge::SIZE_BOUND +5834 // we don't want to send new challenges if we are already closing +5835 { +5836 path.pending_on_path_challenge = false; +5837 +5838 let token = self.rng.random(); +5839 path.record_path_challenge_sent(now, token, path.network_path); +5840 // Generate a new challenge every time we send a new PATH_CHALLENGE +5841 let challenge = frame::PathChallenge(token); +5842 builder.write_frame(challenge, stats); +5843 builder.require_padding(); +5844 let pto = self.ack_frequency.max_ack_delay_for_pto() + path.rtt.pto_base(); +5845 if path.open_status == paths::OpenStatus::Pending { +5846 path.open_status = paths::OpenStatus::Sent; +5847 self.timers.set( +5848 Timer::PerPath(path_id, PathTimer::PathOpenFailed), +5849 now + 3 * pto, +5850 self.qlog.with_time(now), +5851 ); +5852 } +5853 +5854 self.timers.set( +5855 Timer::PerPath(path_id, PathTimer::PathChallengeLost), +5856 now + pto, +5857 self.qlog.with_time(now), +5858 ); +5859 +5860 if is_multipath_negotiated && !path.validated && path.pending_on_path_challenge { +5861 // queue informing the path status along with the challenge +5862 space.pending.path_status.insert(path_id); +5863 } +5864 +5865 // Always include an OBSERVED_ADDR frame with a PATH_CHALLENGE, regardless +5866 // of whether one has already been sent on this path. +5867 if space_id == SpaceId::Data +5868 && self +5869 .config +5870 .address_discovery_role +5871 .should_report(&self.peer_params.address_discovery_role) +5872 { +5873 let frame = frame::ObservedAddr::new( +5874 path.network_path.remote, +5875 self.next_observed_addr_seq_no, +5876 ); +5877 if builder.frame_space_remaining() > frame.size() { +5878 builder.write_frame(frame, stats); +5879 +5880 self.next_observed_addr_seq_no = +5881 self.next_observed_addr_seq_no.saturating_add(1u8); +5882 path.observed_addr_sent = true; +5883 +5884 space.pending.observed_addr = false; +5885 } +5886 } +5887 } 5888 -5889 // NOTE: this is technically not required but might be useful to ride the -5890 // request/response nature of path challenges to refresh an observation -5891 // Since PATH_RESPONSE is a probing frame, this is allowed by the spec. -5892 if space_id == SpaceId::Data -5893 && self -5894 .config -5895 .address_discovery_role -5896 .should_report(&self.peer_params.address_discovery_role) -5897 { -5898 let frame = frame::ObservedAddr::new( -5899 path.network_path.remote, -5900 self.next_observed_addr_seq_no, -5901 ); -5902 if builder.frame_space_remaining() > frame.size() { -5903 builder.write_frame(frame, stats); -5904 -5905 self.next_observed_addr_seq_no = -5906 self.next_observed_addr_seq_no.saturating_add(1u8); -5907 path.observed_addr_sent = true; -5908 -5909 space.pending.observed_addr = false; -5910 } -5911 } -5912 } -5913 -5914 // REACH_OUT -5915 if !scheduling_info.is_abandoned -5916 && scheduling_info.may_send_data -5917 && let Some((round, addresses)) = space.pending.reach_out.as_mut() -5918 { -5919 while let Some(local_addr) = addresses.iter().next().copied() { -5920 let local_addr = addresses.take(&local_addr).expect("found from iter"); -5921 let reach_out = frame::ReachOut::new(*round, local_addr); -5922 if builder.frame_space_remaining() > reach_out.size() { -5923 builder.write_frame(reach_out, stats); -5924 } else { -5925 addresses.insert(local_addr); -5926 break; -5927 } -5928 } -5929 if addresses.is_empty() { -5930 space.pending.reach_out = None; -5931 } -5932 } -5933 -5934 // PATH_ABANDON -5935 if space_id == SpaceId::Data -5936 && scheduling_info.is_abandoned -5937 && scheduling_info.may_self_abandon -5938 && frame::PathAbandon::SIZE_BOUND <= builder.frame_space_remaining() -5939 && let Some(error_code) = space.pending.path_abandon.remove(&path_id) -5940 { -5941 let frame = frame::PathAbandon { -5942 path_id, -5943 error_code, -5944 }; -5945 builder.write_frame(frame, stats); -5946 -5947 // Consider remotely issued CIDs as retired now that we have sent this frame at -5948 // least once. -5949 self.remote_cids.remove(&path_id); -5950 } -5951 while space_id == SpaceId::Data -5952 && scheduling_info.may_send_data -5953 && frame::PathAbandon::SIZE_BOUND <= builder.frame_space_remaining() -5954 && let Some((abandoned_path_id, error_code)) = space.pending.path_abandon.pop_first() -5955 { -5956 let frame = frame::PathAbandon { -5957 path_id: abandoned_path_id, -5958 error_code, -5959 }; -5960 builder.write_frame(frame, stats); -5961 -5962 // Consider remotely issued CIDs as retired now that we have sent this frame at -5963 // least once. -5964 self.remote_cids.remove(&abandoned_path_id); -5965 } -5966 -5967 // OBSERVED_ADDR -5968 if !scheduling_info.is_abandoned -5969 && scheduling_info.may_send_data -5970 && space_id == SpaceId::Data -5971 && self -5972 .config -5973 .address_discovery_role -5974 .should_report(&self.peer_params.address_discovery_role) -5975 && (!path.observed_addr_sent || space.pending.observed_addr) -5976 { -5977 let frame = -5978 frame::ObservedAddr::new(path.network_path.remote, self.next_observed_addr_seq_no); -5979 if builder.frame_space_remaining() > frame.size() { -5980 builder.write_frame(frame, stats); -5981 -5982 self.next_observed_addr_seq_no = self.next_observed_addr_seq_no.saturating_add(1u8); -5983 path.observed_addr_sent = true; -5984 -5985 space.pending.observed_addr = false; -5986 } -5987 } -5988 -5989 // CRYPTO -5990 while !is_0rtt -5991 && !scheduling_info.is_abandoned -5992 && scheduling_info.may_send_data -5993 && builder.frame_space_remaining() > frame::Crypto::SIZE_BOUND -5994 { -5995 let Some(mut frame) = space.pending.crypto.pop_front() else { -5996 break; -5997 }; +5889 // PATH_RESPONSE +5890 if !scheduling_info.is_abandoned +5891 && space_id == SpaceId::Data +5892 && builder.frame_space_remaining() > frame::PathResponse::SIZE_BOUND +5893 && let Some(token) = path.path_responses.pop_on_path(path.network_path) +5894 { +5895 let response = frame::PathResponse(token); +5896 builder.write_frame(response, stats); +5897 builder.require_padding(); +5898 +5899 // NOTE: this is technically not required but might be useful to ride the +5900 // request/response nature of path challenges to refresh an observation +5901 // Since PATH_RESPONSE is a probing frame, this is allowed by the spec. +5902 if space_id == SpaceId::Data +5903 && self +5904 .config +5905 .address_discovery_role +5906 .should_report(&self.peer_params.address_discovery_role) +5907 { +5908 let frame = frame::ObservedAddr::new( +5909 path.network_path.remote, +5910 self.next_observed_addr_seq_no, +5911 ); +5912 if builder.frame_space_remaining() > frame.size() { +5913 builder.write_frame(frame, stats); +5914 +5915 self.next_observed_addr_seq_no = +5916 self.next_observed_addr_seq_no.saturating_add(1u8); +5917 path.observed_addr_sent = true; +5918 +5919 space.pending.observed_addr = false; +5920 } +5921 } +5922 } +5923 +5924 // REACH_OUT +5925 if !scheduling_info.is_abandoned +5926 && scheduling_info.may_send_data +5927 && let Some((round, addresses)) = space.pending.reach_out.as_mut() +5928 { +5929 while let Some(local_addr) = addresses.iter().next().copied() { +5930 let local_addr = addresses.take(&local_addr).expect("found from iter"); +5931 let reach_out = frame::ReachOut::new(*round, local_addr); +5932 if builder.frame_space_remaining() > reach_out.size() { +5933 builder.write_frame(reach_out, stats); +5934 } else { +5935 addresses.insert(local_addr); +5936 break; +5937 } +5938 } +5939 if addresses.is_empty() { +5940 space.pending.reach_out = None; +5941 } +5942 } +5943 +5944 // PATH_ABANDON +5945 if space_id == SpaceId::Data +5946 && scheduling_info.is_abandoned +5947 && scheduling_info.may_self_abandon +5948 && frame::PathAbandon::SIZE_BOUND <= builder.frame_space_remaining() +5949 && let Some(error_code) = space.pending.path_abandon.remove(&path_id) +5950 { +5951 let frame = frame::PathAbandon { +5952 path_id, +5953 error_code, +5954 }; +5955 builder.write_frame(frame, stats); +5956 +5957 // Consider remotely issued CIDs as retired now that we have sent this frame at +5958 // least once. +5959 self.remote_cids.remove(&path_id); +5960 } +5961 while space_id == SpaceId::Data +5962 && scheduling_info.may_send_data +5963 && frame::PathAbandon::SIZE_BOUND <= builder.frame_space_remaining() +5964 && let Some((abandoned_path_id, error_code)) = space.pending.path_abandon.pop_first() +5965 { +5966 let frame = frame::PathAbandon { +5967 path_id: abandoned_path_id, +5968 error_code, +5969 }; +5970 builder.write_frame(frame, stats); +5971 +5972 // Consider remotely issued CIDs as retired now that we have sent this frame at +5973 // least once. +5974 self.remote_cids.remove(&abandoned_path_id); +5975 } +5976 +5977 // OBSERVED_ADDR +5978 if !scheduling_info.is_abandoned +5979 && scheduling_info.may_send_data +5980 && space_id == SpaceId::Data +5981 && self +5982 .config +5983 .address_discovery_role +5984 .should_report(&self.peer_params.address_discovery_role) +5985 && (!path.observed_addr_sent || space.pending.observed_addr) +5986 { +5987 let frame = +5988 frame::ObservedAddr::new(path.network_path.remote, self.next_observed_addr_seq_no); +5989 if builder.frame_space_remaining() > frame.size() { +5990 builder.write_frame(frame, stats); +5991 +5992 self.next_observed_addr_seq_no = self.next_observed_addr_seq_no.saturating_add(1u8); +5993 path.observed_addr_sent = true; +5994 +5995 space.pending.observed_addr = false; +5996 } +5997 } 5998 -5999 // Calculate the maximum amount of crypto data we can store in the buffer. -6000 // Since the offset is known, we can reserve the exact size required to encode it. -6001 // For length we reserve 2bytes which allows to encode up to 2^14, -6002 // which is more than what fits into normally sized QUIC frames. -6003 let max_crypto_data_size = builder.frame_space_remaining() -6004 - 1 // Frame Type -6005 - VarInt::size(unsafe { VarInt::from_u64_unchecked(frame.offset) }) -6006 - 2; // Maximum encoded length for frame size, given we send less than 2^14 bytes -6007 -6008 let len = frame -6009 .data -6010 .len() -6011 .min(2usize.pow(14) - 1) -6012 .min(max_crypto_data_size); -6013 -6014 let data = frame.data.split_to(len); -6015 let offset = frame.offset; -6016 let truncated = frame::Crypto { offset, data }; -6017 builder.write_frame(truncated, stats); -6018 -6019 if !frame.data.is_empty() { -6020 frame.offset += len as u64; -6021 space.pending.crypto.push_front(frame); -6022 } -6023 } -6024 -6025 // PATH_STATUS_AVAILABLE & PATH_STATUS_BACKUP -6026 while space_id == SpaceId::Data -6027 && !scheduling_info.is_abandoned -6028 && scheduling_info.may_send_data -6029 && frame::PathStatusAvailable::SIZE_BOUND <= builder.frame_space_remaining() -6030 { -6031 let Some(path_id) = space.pending.path_status.pop_first() else { -6032 break; -6033 }; -6034 let Some(path) = self.paths.get(&path_id).map(|path_state| &path_state.data) else { -6035 trace!(%path_id, "discarding queued path status for unknown path"); -6036 continue; -6037 }; -6038 -6039 let seq = path.status.seq(); -6040 match path.local_status() { -6041 PathStatus::Available => { -6042 let frame = frame::PathStatusAvailable { -6043 path_id, -6044 status_seq_no: seq, -6045 }; -6046 builder.write_frame(frame, stats); -6047 } -6048 PathStatus::Backup => { -6049 let frame = frame::PathStatusBackup { -6050 path_id, -6051 status_seq_no: seq, -6052 }; -6053 builder.write_frame(frame, stats); -6054 } -6055 } -6056 } -6057 -6058 // MAX_PATH_ID -6059 if space_id == SpaceId::Data -6060 && !scheduling_info.is_abandoned -6061 && scheduling_info.may_send_data -6062 && space.pending.max_path_id -6063 && frame::MaxPathId::SIZE_BOUND <= builder.frame_space_remaining() -6064 { -6065 let frame = frame::MaxPathId(self.local_max_path_id); -6066 builder.write_frame(frame, stats); -6067 space.pending.max_path_id = false; -6068 } -6069 -6070 // PATHS_BLOCKED -6071 if space_id == SpaceId::Data -6072 && !scheduling_info.is_abandoned -6073 && scheduling_info.may_send_data -6074 && space.pending.paths_blocked -6075 && frame::PathsBlocked::SIZE_BOUND <= builder.frame_space_remaining() -6076 { -6077 let frame = frame::PathsBlocked(self.remote_max_path_id); -6078 builder.write_frame(frame, stats); -6079 space.pending.paths_blocked = false; -6080 } -6081 -6082 // PATH_CIDS_BLOCKED -6083 while space_id == SpaceId::Data -6084 && !scheduling_info.is_abandoned -6085 && scheduling_info.may_send_data -6086 && frame::PathCidsBlocked::SIZE_BOUND <= builder.frame_space_remaining() -6087 { -6088 let Some(path_id) = space.pending.path_cids_blocked.pop_first() else { -6089 break; -6090 }; -6091 let next_seq = match self.remote_cids.get(&path_id) { -6092 Some(cid_queue) => VarInt(cid_queue.active_seq() + 1), -6093 None => VarInt(0), -6094 }; -6095 let frame = frame::PathCidsBlocked { path_id, next_seq }; -6096 builder.write_frame(frame, stats); -6097 } -6098 -6099 // RESET_STREAM, STOP_SENDING, MAX_DATA, MAX_STREAM_DATA, MAX_STREAMS -6100 if space_id == SpaceId::Data -6101 && !scheduling_info.is_abandoned -6102 && scheduling_info.may_send_data -6103 { -6104 self.streams -6105 .write_control_frames(builder, &mut space.pending, stats); -6106 } -6107 -6108 // NEW_CONNECTION_ID -6109 let cid_len = self -6110 .local_cid_state -6111 .values() -6112 .map(|cid_state| cid_state.cid_len()) -6113 .max() -6114 .expect("some local CID state must exist"); -6115 let new_cid_size_bound = -6116 frame::NewConnectionId::size_bound(is_multipath_negotiated, cid_len); -6117 while !scheduling_info.is_abandoned -6118 && scheduling_info.may_send_data -6119 && builder.frame_space_remaining() > new_cid_size_bound -6120 { -6121 let Some(issued) = space.pending.new_cids.pop() else { -6122 break; -6123 }; -6124 let retire_prior_to = self -6125 .local_cid_state -6126 .get(&issued.path_id) -6127 .map(|cid_state| cid_state.retire_prior_to()) -6128 .unwrap_or_else(|| panic!("missing local CID state for path={}", issued.path_id)); -6129 -6130 let cid_path_id = match is_multipath_negotiated { -6131 true => Some(issued.path_id), -6132 false => { -6133 debug_assert_eq!(issued.path_id, PathId::ZERO); -6134 None -6135 } -6136 }; -6137 let frame = frame::NewConnectionId { -6138 path_id: cid_path_id, -6139 sequence: issued.sequence, -6140 retire_prior_to, -6141 id: issued.id, -6142 reset_token: issued.reset_token, -6143 }; -6144 builder.write_frame(frame, stats); -6145 } -6146 -6147 // RETIRE_CONNECTION_ID -6148 let retire_cid_bound = frame::RetireConnectionId::size_bound(is_multipath_negotiated); -6149 while !scheduling_info.is_abandoned -6150 && scheduling_info.may_send_data -6151 && builder.frame_space_remaining() > retire_cid_bound -6152 { -6153 let (path_id, sequence) = match space.pending.retire_cids.pop() { -6154 Some((PathId::ZERO, seq)) if !is_multipath_negotiated => (None, seq), -6155 Some((path_id, seq)) => (Some(path_id), seq), -6156 None => break, -6157 }; -6158 let frame = frame::RetireConnectionId { path_id, sequence }; -6159 builder.write_frame(frame, stats); -6160 } -6161 -6162 // DATAGRAM -6163 let mut sent_datagrams = false; -6164 while !scheduling_info.is_abandoned -6165 && scheduling_info.may_send_data -6166 && builder.frame_space_remaining() > Datagram::SIZE_BOUND -6167 && space_id == SpaceId::Data -6168 { -6169 match self.datagrams.write(builder, stats) { -6170 true => { -6171 sent_datagrams = true; -6172 } -6173 false => break, -6174 } -6175 } -6176 if self.datagrams.send_blocked && sent_datagrams { -6177 self.events.push_back(Event::DatagramsUnblocked); -6178 self.datagrams.send_blocked = false; -6179 } -6180 -6181 let path = &mut self.paths.get_mut(&path_id).expect("known path").data; -6182 -6183 // NEW_TOKEN -6184 if !scheduling_info.is_abandoned && scheduling_info.may_send_data { -6185 while let Some(network_path) = space.pending.new_tokens.pop() { -6186 debug_assert_eq!(space_id, SpaceId::Data); -6187 let ConnectionSide::Server { server_config } = &self.side else { -6188 panic!("NEW_TOKEN frames should not be enqueued by clients"); -6189 }; +5999 // CRYPTO +6000 while !is_0rtt +6001 && !scheduling_info.is_abandoned +6002 && scheduling_info.may_send_data +6003 && builder.frame_space_remaining() > frame::Crypto::SIZE_BOUND +6004 { +6005 let Some(mut frame) = space.pending.crypto.pop_front() else { +6006 break; +6007 }; +6008 +6009 // Calculate the maximum amount of crypto data we can store in the buffer. +6010 // Since the offset is known, we can reserve the exact size required to encode it. +6011 // For length we reserve 2bytes which allows to encode up to 2^14, +6012 // which is more than what fits into normally sized QUIC frames. +6013 let max_crypto_data_size = builder.frame_space_remaining() +6014 - 1 // Frame Type +6015 - VarInt::size(unsafe { VarInt::from_u64_unchecked(frame.offset) }) +6016 - 2; // Maximum encoded length for frame size, given we send less than 2^14 bytes +6017 +6018 let len = frame +6019 .data +6020 .len() +6021 .min(2usize.pow(14) - 1) +6022 .min(max_crypto_data_size); +6023 +6024 let data = frame.data.split_to(len); +6025 let offset = frame.offset; +6026 let truncated = frame::Crypto { offset, data }; +6027 builder.write_frame(truncated, stats); +6028 +6029 if !frame.data.is_empty() { +6030 frame.offset += len as u64; +6031 space.pending.crypto.push_front(frame); +6032 } +6033 } +6034 +6035 // PATH_STATUS_AVAILABLE & PATH_STATUS_BACKUP +6036 while space_id == SpaceId::Data +6037 && !scheduling_info.is_abandoned +6038 && scheduling_info.may_send_data +6039 && frame::PathStatusAvailable::SIZE_BOUND <= builder.frame_space_remaining() +6040 { +6041 let Some(path_id) = space.pending.path_status.pop_first() else { +6042 break; +6043 }; +6044 let Some(path) = self.paths.get(&path_id).map(|path_state| &path_state.data) else { +6045 trace!(%path_id, "discarding queued path status for unknown path"); +6046 continue; +6047 }; +6048 +6049 let seq = path.status.seq(); +6050 match path.local_status() { +6051 PathStatus::Available => { +6052 let frame = frame::PathStatusAvailable { +6053 path_id, +6054 status_seq_no: seq, +6055 }; +6056 builder.write_frame(frame, stats); +6057 } +6058 PathStatus::Backup => { +6059 let frame = frame::PathStatusBackup { +6060 path_id, +6061 status_seq_no: seq, +6062 }; +6063 builder.write_frame(frame, stats); +6064 } +6065 } +6066 } +6067 +6068 // MAX_PATH_ID +6069 if space_id == SpaceId::Data +6070 && !scheduling_info.is_abandoned +6071 && scheduling_info.may_send_data +6072 && space.pending.max_path_id +6073 && frame::MaxPathId::SIZE_BOUND <= builder.frame_space_remaining() +6074 { +6075 let frame = frame::MaxPathId(self.local_max_path_id); +6076 builder.write_frame(frame, stats); +6077 space.pending.max_path_id = false; +6078 } +6079 +6080 // PATHS_BLOCKED +6081 if space_id == SpaceId::Data +6082 && !scheduling_info.is_abandoned +6083 && scheduling_info.may_send_data +6084 && space.pending.paths_blocked +6085 && frame::PathsBlocked::SIZE_BOUND <= builder.frame_space_remaining() +6086 { +6087 let frame = frame::PathsBlocked(self.remote_max_path_id); +6088 builder.write_frame(frame, stats); +6089 space.pending.paths_blocked = false; +6090 } +6091 +6092 // PATH_CIDS_BLOCKED +6093 while space_id == SpaceId::Data +6094 && !scheduling_info.is_abandoned +6095 && scheduling_info.may_send_data +6096 && frame::PathCidsBlocked::SIZE_BOUND <= builder.frame_space_remaining() +6097 { +6098 let Some(path_id) = space.pending.path_cids_blocked.pop_first() else { +6099 break; +6100 }; +6101 let next_seq = match self.remote_cids.get(&path_id) { +6102 Some(cid_queue) => VarInt(cid_queue.active_seq() + 1), +6103 None => VarInt(0), +6104 }; +6105 let frame = frame::PathCidsBlocked { path_id, next_seq }; +6106 builder.write_frame(frame, stats); +6107 } +6108 +6109 // RESET_STREAM, STOP_SENDING, MAX_DATA, MAX_STREAM_DATA, MAX_STREAMS +6110 if space_id == SpaceId::Data +6111 && !scheduling_info.is_abandoned +6112 && scheduling_info.may_send_data +6113 { +6114 self.streams +6115 .write_control_frames(builder, &mut space.pending, stats); +6116 } +6117 +6118 // NEW_CONNECTION_ID +6119 let cid_len = self +6120 .local_cid_state +6121 .values() +6122 .map(|cid_state| cid_state.cid_len()) +6123 .max() +6124 .expect("some local CID state must exist"); +6125 let new_cid_size_bound = +6126 frame::NewConnectionId::size_bound(is_multipath_negotiated, cid_len); +6127 while !scheduling_info.is_abandoned +6128 && scheduling_info.may_send_data +6129 && builder.frame_space_remaining() > new_cid_size_bound +6130 { +6131 let Some(issued) = space.pending.new_cids.pop() else { +6132 break; +6133 }; +6134 let retire_prior_to = self +6135 .local_cid_state +6136 .get(&issued.path_id) +6137 .map(|cid_state| cid_state.retire_prior_to()) +6138 .unwrap_or_else(|| panic!("missing local CID state for path={}", issued.path_id)); +6139 +6140 let cid_path_id = match is_multipath_negotiated { +6141 true => Some(issued.path_id), +6142 false => { +6143 debug_assert_eq!(issued.path_id, PathId::ZERO); +6144 None +6145 } +6146 }; +6147 let frame = frame::NewConnectionId { +6148 path_id: cid_path_id, +6149 sequence: issued.sequence, +6150 retire_prior_to, +6151 id: issued.id, +6152 reset_token: issued.reset_token, +6153 }; +6154 builder.write_frame(frame, stats); +6155 } +6156 +6157 // RETIRE_CONNECTION_ID +6158 let retire_cid_bound = frame::RetireConnectionId::size_bound(is_multipath_negotiated); +6159 while !scheduling_info.is_abandoned +6160 && scheduling_info.may_send_data +6161 && builder.frame_space_remaining() > retire_cid_bound +6162 { +6163 let (path_id, sequence) = match space.pending.retire_cids.pop() { +6164 Some((PathId::ZERO, seq)) if !is_multipath_negotiated => (None, seq), +6165 Some((path_id, seq)) => (Some(path_id), seq), +6166 None => break, +6167 }; +6168 let frame = frame::RetireConnectionId { path_id, sequence }; +6169 builder.write_frame(frame, stats); +6170 } +6171 +6172 // DATAGRAM +6173 let mut sent_datagrams = false; +6174 while !scheduling_info.is_abandoned +6175 && scheduling_info.may_send_data +6176 && builder.frame_space_remaining() > Datagram::SIZE_BOUND +6177 && space_id == SpaceId::Data +6178 { +6179 match self.datagrams.write(builder, stats) { +6180 true => { +6181 sent_datagrams = true; +6182 } +6183 false => break, +6184 } +6185 } +6186 if self.datagrams.send_blocked && sent_datagrams { +6187 self.events.push_back(Event::DatagramsUnblocked); +6188 self.datagrams.send_blocked = false; +6189 } 6190 -6191 if !network_path.is_probably_same_path(&path.network_path) { -6192 // NEW_TOKEN frames contain tokens bound to a client's IP address, and are only -6193 // useful if used from the same IP address. Thus, we abandon enqueued NEW_TOKEN -6194 // frames upon an path change. Instead, when the new path becomes validated, -6195 // NEW_TOKEN frames may be enqueued for the new path instead. -6196 continue; -6197 } -6198 -6199 let token = Token::new( -6200 TokenPayload::Validation { -6201 ip: network_path.remote.ip(), -6202 issued: server_config.time_source.now(), -6203 }, -6204 &mut self.rng, -6205 ); -6206 let new_token = NewToken { -6207 token: token.encode(&*server_config.token_key).into(), -6208 }; -6209 -6210 if builder.frame_space_remaining() < new_token.size() { -6211 space.pending.new_tokens.push(network_path); -6212 break; -6213 } -6214 -6215 builder.write_frame(new_token, stats); -6216 builder.retransmits_mut().new_tokens.push(network_path); -6217 } -6218 } +6191 let path = &mut self.paths.get_mut(&path_id).expect("known path").data; +6192 +6193 // NEW_TOKEN +6194 if !scheduling_info.is_abandoned && scheduling_info.may_send_data { +6195 while let Some(network_path) = space.pending.new_tokens.pop() { +6196 debug_assert_eq!(space_id, SpaceId::Data); +6197 let ConnectionSide::Server { server_config } = &self.side else { +6198 panic!("NEW_TOKEN frames should not be enqueued by clients"); +6199 }; +6200 +6201 if !network_path.is_probably_same_path(&path.network_path) { +6202 // NEW_TOKEN frames contain tokens bound to a client's IP address, and are only +6203 // useful if used from the same IP address. Thus, we abandon enqueued NEW_TOKEN +6204 // frames upon an path change. Instead, when the new path becomes validated, +6205 // NEW_TOKEN frames may be enqueued for the new path instead. +6206 continue; +6207 } +6208 +6209 let token = Token::new( +6210 TokenPayload::Validation { +6211 ip: network_path.remote.ip(), +6212 issued: server_config.time_source.now(), +6213 }, +6214 &mut self.rng, +6215 ); +6216 let new_token = NewToken { +6217 token: token.encode(&*server_config.token_key).into(), +6218 }; 6219 -6220 // ADD_ADDRESS -6221 while space_id == SpaceId::Data -6222 && !scheduling_info.is_abandoned -6223 && scheduling_info.may_send_data -6224 && frame::AddAddress::SIZE_BOUND <= builder.frame_space_remaining() -6225 { -6226 if let Some(added_address) = space.pending.add_address.pop_last() { -6227 builder.write_frame(added_address, stats); -6228 } else { -6229 break; -6230 } -6231 } -6232 -6233 // REMOVE_ADDRESS -6234 while space_id == SpaceId::Data -6235 && !scheduling_info.is_abandoned -6236 && scheduling_info.may_send_data -6237 && frame::RemoveAddress::SIZE_BOUND <= builder.frame_space_remaining() -6238 { -6239 if let Some(removed_address) = space.pending.remove_address.pop_last() { -6240 builder.write_frame(removed_address, stats); -6241 } else { -6242 break; -6243 } -6244 } -6245 -6246 // STREAM -6247 if !scheduling_info.is_abandoned -6248 && scheduling_info.may_send_data -6249 && space_id == SpaceId::Data -6250 { -6251 self.streams -6252 .write_stream_frames(builder, self.config.send_fairness, stats); -6253 } -6254 } +6220 if builder.frame_space_remaining() < new_token.size() { +6221 space.pending.new_tokens.push(network_path); +6222 break; +6223 } +6224 +6225 builder.write_frame(new_token, stats); +6226 builder.retransmits_mut().new_tokens.push(network_path); +6227 } +6228 } +6229 +6230 // ADD_ADDRESS +6231 while space_id == SpaceId::Data +6232 && !scheduling_info.is_abandoned +6233 && scheduling_info.may_send_data +6234 && frame::AddAddress::SIZE_BOUND <= builder.frame_space_remaining() +6235 { +6236 if let Some(added_address) = space.pending.add_address.pop_last() { +6237 builder.write_frame(added_address, stats); +6238 } else { +6239 break; +6240 } +6241 } +6242 +6243 // REMOVE_ADDRESS +6244 while space_id == SpaceId::Data +6245 && !scheduling_info.is_abandoned +6246 && scheduling_info.may_send_data +6247 && frame::RemoveAddress::SIZE_BOUND <= builder.frame_space_remaining() +6248 { +6249 if let Some(removed_address) = space.pending.remove_address.pop_last() { +6250 builder.write_frame(removed_address, stats); +6251 } else { +6252 break; +6253 } +6254 } 6255 -6256 /// Write pending ACKs into a buffer -6257 fn populate_acks<'a, 'b>( -6258 now: Instant, -6259 receiving_ecn: bool, -6260 path_id: PathId, -6261 space_id: SpaceId, -6262 space: &mut PacketSpace, -6263 is_multipath_negotiated: bool, -6264 builder: &mut PacketBuilder<'a, 'b>, -6265 stats: &mut FrameStats, -6266 space_has_keys: bool, -6267 ) { -6268 // 0-RTT packets must never carry acks (which would have to be of handshake packets) -6269 debug_assert!(space_has_keys, "tried to send ACK in 0-RTT"); -6270 -6271 debug_assert!( -6272 is_multipath_negotiated || path_id == PathId::ZERO, -6273 "Only PathId::ZERO allowed without multipath (have {path_id:?})" -6274 ); -6275 if is_multipath_negotiated { -6276 debug_assert!( -6277 space_id == SpaceId::Data || path_id == PathId::ZERO, -6278 "path acks must be sent in 1RTT space (have {space_id:?})" -6279 ); -6280 } -6281 -6282 let pns = space.for_path(path_id); -6283 let ranges = pns.pending_acks.ranges(); -6284 debug_assert!(!ranges.is_empty(), "can not send empty ACK range"); -6285 let ecn = if receiving_ecn { -6286 Some(&pns.ecn_counters) -6287 } else { -6288 None -6289 }; -6290 -6291 let delay_micros = pns.pending_acks.ack_delay(now).as_micros() as u64; -6292 // TODO: This should come from `TransportConfig` if that gets configurable. -6293 let ack_delay_exp = TransportParameters::default().ack_delay_exponent; -6294 let delay = delay_micros >> ack_delay_exp.into_inner(); -6295 -6296 if is_multipath_negotiated && space_id == SpaceId::Data { -6297 if !ranges.is_empty() { -6298 let frame = frame::PathAck::encoder(path_id, delay, ranges, ecn); -6299 builder.write_frame(frame, stats); -6300 } -6301 } else { -6302 builder.write_frame(frame::Ack::encoder(delay, ranges, ecn), stats); -6303 } -6304 } +6256 // STREAM +6257 if !scheduling_info.is_abandoned +6258 && scheduling_info.may_send_data +6259 && space_id == SpaceId::Data +6260 { +6261 self.streams +6262 .write_stream_frames(builder, self.config.send_fairness, stats); +6263 } +6264 } +6265 +6266 /// Write pending ACKs into a buffer +6267 fn populate_acks<'a, 'b>( +6268 now: Instant, +6269 receiving_ecn: bool, +6270 path_id: PathId, +6271 space_id: SpaceId, +6272 space: &mut PacketSpace, +6273 is_multipath_negotiated: bool, +6274 builder: &mut PacketBuilder<'a, 'b>, +6275 stats: &mut FrameStats, +6276 space_has_keys: bool, +6277 ) { +6278 // 0-RTT packets must never carry acks (which would have to be of handshake packets) +6279 debug_assert!(space_has_keys, "tried to send ACK in 0-RTT"); +6280 +6281 debug_assert!( +6282 is_multipath_negotiated || path_id == PathId::ZERO, +6283 "Only PathId::ZERO allowed without multipath (have {path_id:?})" +6284 ); +6285 if is_multipath_negotiated { +6286 debug_assert!( +6287 space_id == SpaceId::Data || path_id == PathId::ZERO, +6288 "path acks must be sent in 1RTT space (have {space_id:?})" +6289 ); +6290 } +6291 +6292 let pns = space.for_path(path_id); +6293 let ranges = pns.pending_acks.ranges(); +6294 debug_assert!(!ranges.is_empty(), "can not send empty ACK range"); +6295 let ecn = if receiving_ecn { +6296 Some(&pns.ecn_counters) +6297 } else { +6298 None +6299 }; +6300 +6301 let delay_micros = pns.pending_acks.ack_delay(now).as_micros() as u64; +6302 // TODO: This should come from `TransportConfig` if that gets configurable. +6303 let ack_delay_exp = TransportParameters::default().ack_delay_exponent; +6304 let delay = delay_micros >> ack_delay_exp.into_inner(); 6305 -6306 fn close_common(&mut self) { -6307 trace!("connection closed"); -6308 self.timers.reset(); -6309 } -6310 -6311 fn set_close_timer(&mut self, now: Instant) { -6312 // QUIC-MULTIPATH § 2.6 Connection Closure: draining for 3*PTO using the max PTO of -6313 // all paths. -6314 let pto_max = self.max_pto_for_space(self.highest_space); -6315 self.timers.set( -6316 Timer::Conn(ConnTimer::Close), -6317 now + 3 * pto_max, -6318 self.qlog.with_time(now), -6319 ); -6320 } -6321 -6322 /// Handle transport parameters received from the peer -6323 /// -6324 /// *remote_cid* and *local_cid* are the source and destination CIDs respectively of the -6325 /// *packet into which the transport parameters arrived. -6326 fn handle_peer_params( -6327 &mut self, -6328 params: TransportParameters, -6329 local_cid: ConnectionId, -6330 remote_cid: ConnectionId, -6331 now: Instant, -6332 ) -> Result<(), TransportError> { -6333 if Some(self.original_remote_cid) != params.initial_src_cid -6334 || (self.side.is_client() -6335 && (Some(self.initial_dst_cid) != params.original_dst_cid -6336 || self.retry_src_cid != params.retry_src_cid)) -6337 { -6338 return Err(TransportError::TRANSPORT_PARAMETER_ERROR( -6339 "CID authentication failure", -6340 )); -6341 } -6342 if params.initial_max_path_id.is_some() && (local_cid.is_empty() || remote_cid.is_empty()) { -6343 return Err(TransportError::PROTOCOL_VIOLATION( -6344 "multipath must not use zero-length CIDs", -6345 )); -6346 } -6347 -6348 self.set_peer_params(params); -6349 self.qlog.emit_peer_transport_params_received(self, now); -6350 -6351 Ok(()) -6352 } -6353 -6354 fn set_peer_params(&mut self, params: TransportParameters) { -6355 self.streams.set_params(&params); -6356 self.idle_timeout = -6357 negotiate_max_idle_timeout(self.config.max_idle_timeout, Some(params.max_idle_timeout)); -6358 trace!("negotiated max idle timeout {:?}", self.idle_timeout); -6359 -6360 if let Some(ref info) = params.preferred_address { -6361 // During the handshake PathId::ZERO exists. -6362 self.remote_cids.get_mut(&PathId::ZERO).expect("not yet abandoned").insert(frame::NewConnectionId { -6363 path_id: None, -6364 sequence: 1, -6365 id: info.connection_id, -6366 reset_token: info.stateless_reset_token, -6367 retire_prior_to: 0, -6368 }) -6369 .expect( -6370 "preferred address CID is the first received, and hence is guaranteed to be legal", -6371 ); -6372 let remote = self.path_data(PathId::ZERO).network_path.remote; -6373 self.set_reset_token(PathId::ZERO, remote, info.stateless_reset_token); -6374 } -6375 self.ack_frequency.peer_max_ack_delay = get_max_ack_delay(&params); -6376 -6377 let mut multipath_enabled = None; -6378 if let (Some(local_max_path_id), Some(remote_max_path_id)) = ( -6379 self.config.get_initial_max_path_id(), -6380 params.initial_max_path_id, -6381 ) { -6382 // multipath is enabled, register the local and remote maximums -6383 self.local_max_path_id = local_max_path_id; -6384 self.remote_max_path_id = remote_max_path_id; -6385 let initial_max_path_id = local_max_path_id.min(remote_max_path_id); -6386 debug!(%initial_max_path_id, "multipath negotiated"); -6387 multipath_enabled = Some(initial_max_path_id); -6388 } -6389 -6390 if let Some((max_locally_allowed_remote_addresses, max_remotely_allowed_remote_addresses)) = -6391 self.config -6392 .max_remote_nat_traversal_addresses -6393 .zip(params.max_remote_nat_traversal_addresses) -6394 { -6395 if let Some(max_initial_paths) = -6396 multipath_enabled.map(|path_id| path_id.saturating_add(1u8)) -6397 { -6398 let max_local_addresses = max_remotely_allowed_remote_addresses.get(); -6399 let max_remote_addresses = max_locally_allowed_remote_addresses.get(); -6400 self.n0_nat_traversal = n0_nat_traversal::State::new( -6401 max_remote_addresses, -6402 max_local_addresses, -6403 self.side(), -6404 ); -6405 debug!( -6406 %max_remote_addresses, %max_local_addresses, -6407 "n0's nat traversal negotiated" -6408 ); -6409 -6410 match self.side() { -6411 Side::Client => { -6412 if max_initial_paths.as_u32() < max_remote_addresses as u32 + 1 { -6413 // in this case the client might try to open `max_remote_addresses` new -6414 // paths, but the current multipath configuration will not allow it -6415 debug!(%max_initial_paths, %max_remote_addresses, "local client configuration might cause nat traversal issues") -6416 } else if max_local_addresses as u64 -6417 > params.active_connection_id_limit.into_inner() -6418 { -6419 // the server allows us to send at most `params.active_connection_id_limit` -6420 // but they might need at least `max_local_addresses` to effectively send -6421 // `PATH_CHALLENGE` frames to each advertised local address -6422 debug!(%max_local_addresses, remote_cid_limit=%params.active_connection_id_limit.into_inner(), "remote server configuration might cause nat traversal issues") -6423 } -6424 } -6425 Side::Server => { -6426 if (max_initial_paths.as_u32() as u64) < crate::LOCAL_CID_COUNT { -6427 debug!(%max_initial_paths, local_cid_limit=%crate::LOCAL_CID_COUNT, "local server configuration might cause nat traversal issues") -6428 } -6429 } -6430 } -6431 } else { -6432 debug!("n0 nat traversal enabled for both endpoints, but multipath is missing") -6433 } -6434 } -6435 -6436 self.peer_params = params; -6437 let peer_max_udp_payload_size = -6438 u16::try_from(self.peer_params.max_udp_payload_size.into_inner()).unwrap_or(u16::MAX); -6439 self.path_data_mut(PathId::ZERO) -6440 .mtud -6441 .on_peer_max_udp_payload_size_received(peer_max_udp_payload_size); -6442 } -6443 -6444 /// Decrypts a packet, returning the packet number on success -6445 fn decrypt_packet( -6446 &mut self, -6447 now: Instant, -6448 path_id: PathId, -6449 packet: &mut Packet, -6450 ) -> Result<Option<u64>, Option<TransportError>> { -6451 let result = self -6452 .crypto_state -6453 .decrypt_packet_body(packet, path_id, &self.spaces)?; -6454 -6455 let Some(result) = result else { -6456 return Ok(None); -6457 }; -6458 -6459 if result.outgoing_key_update_acked -6460 && let Some(prev) = self.crypto_state.prev_crypto.as_mut() -6461 { -6462 prev.end_packet = Some((result.number, now)); -6463 self.set_key_discard_timer(now, packet.header.space()); -6464 } -6465 -6466 if result.incoming_key_update { -6467 trace!("key update authenticated"); -6468 self.crypto_state -6469 .update_keys(Some((result.number, now)), true); -6470 self.set_key_discard_timer(now, packet.header.space()); -6471 } -6472 -6473 Ok(Some(result.number)) -6474 } +6306 if is_multipath_negotiated && space_id == SpaceId::Data { +6307 if !ranges.is_empty() { +6308 let frame = frame::PathAck::encoder(path_id, delay, ranges, ecn); +6309 builder.write_frame(frame, stats); +6310 } +6311 } else { +6312 builder.write_frame(frame::Ack::encoder(delay, ranges, ecn), stats); +6313 } +6314 } +6315 +6316 fn close_common(&mut self) { +6317 trace!("connection closed"); +6318 self.timers.reset(); +6319 } +6320 +6321 fn set_close_timer(&mut self, now: Instant) { +6322 // QUIC-MULTIPATH § 2.6 Connection Closure: draining for 3*PTO using the max PTO of +6323 // all paths. +6324 let pto_max = self.max_pto_for_space(self.highest_space); +6325 self.timers.set( +6326 Timer::Conn(ConnTimer::Close), +6327 now + 3 * pto_max, +6328 self.qlog.with_time(now), +6329 ); +6330 } +6331 +6332 /// Handle transport parameters received from the peer +6333 /// +6334 /// *remote_cid* and *local_cid* are the source and destination CIDs respectively of the +6335 /// *packet into which the transport parameters arrived. +6336 fn handle_peer_params( +6337 &mut self, +6338 params: TransportParameters, +6339 local_cid: ConnectionId, +6340 remote_cid: ConnectionId, +6341 now: Instant, +6342 ) -> Result<(), TransportError> { +6343 if Some(self.original_remote_cid) != params.initial_src_cid +6344 || (self.side.is_client() +6345 && (Some(self.initial_dst_cid) != params.original_dst_cid +6346 || self.retry_src_cid != params.retry_src_cid)) +6347 { +6348 return Err(TransportError::TRANSPORT_PARAMETER_ERROR( +6349 "CID authentication failure", +6350 )); +6351 } +6352 if params.initial_max_path_id.is_some() && (local_cid.is_empty() || remote_cid.is_empty()) { +6353 return Err(TransportError::PROTOCOL_VIOLATION( +6354 "multipath must not use zero-length CIDs", +6355 )); +6356 } +6357 +6358 self.set_peer_params(params); +6359 self.qlog.emit_peer_transport_params_received(self, now); +6360 +6361 Ok(()) +6362 } +6363 +6364 fn set_peer_params(&mut self, params: TransportParameters) { +6365 self.streams.set_params(&params); +6366 self.idle_timeout = +6367 negotiate_max_idle_timeout(self.config.max_idle_timeout, Some(params.max_idle_timeout)); +6368 trace!("negotiated max idle timeout {:?}", self.idle_timeout); +6369 +6370 if let Some(ref info) = params.preferred_address { +6371 // During the handshake PathId::ZERO exists. +6372 self.remote_cids.get_mut(&PathId::ZERO).expect("not yet abandoned").insert(frame::NewConnectionId { +6373 path_id: None, +6374 sequence: 1, +6375 id: info.connection_id, +6376 reset_token: info.stateless_reset_token, +6377 retire_prior_to: 0, +6378 }) +6379 .expect( +6380 "preferred address CID is the first received, and hence is guaranteed to be legal", +6381 ); +6382 let remote = self.path_data(PathId::ZERO).network_path.remote; +6383 self.set_reset_token(PathId::ZERO, remote, info.stateless_reset_token); +6384 } +6385 self.ack_frequency.peer_max_ack_delay = get_max_ack_delay(&params); +6386 +6387 let mut multipath_enabled = None; +6388 if let (Some(local_max_path_id), Some(remote_max_path_id)) = ( +6389 self.config.get_initial_max_path_id(), +6390 params.initial_max_path_id, +6391 ) { +6392 // multipath is enabled, register the local and remote maximums +6393 self.local_max_path_id = local_max_path_id; +6394 self.remote_max_path_id = remote_max_path_id; +6395 let initial_max_path_id = local_max_path_id.min(remote_max_path_id); +6396 debug!(%initial_max_path_id, "multipath negotiated"); +6397 multipath_enabled = Some(initial_max_path_id); +6398 } +6399 +6400 if let Some((max_locally_allowed_remote_addresses, max_remotely_allowed_remote_addresses)) = +6401 self.config +6402 .max_remote_nat_traversal_addresses +6403 .zip(params.max_remote_nat_traversal_addresses) +6404 { +6405 if let Some(max_initial_paths) = +6406 multipath_enabled.map(|path_id| path_id.saturating_add(1u8)) +6407 { +6408 let max_local_addresses = max_remotely_allowed_remote_addresses.get(); +6409 let max_remote_addresses = max_locally_allowed_remote_addresses.get(); +6410 self.n0_nat_traversal = n0_nat_traversal::State::new( +6411 max_remote_addresses, +6412 max_local_addresses, +6413 self.side(), +6414 ); +6415 debug!( +6416 %max_remote_addresses, %max_local_addresses, +6417 "n0's nat traversal negotiated" +6418 ); +6419 +6420 match self.side() { +6421 Side::Client => { +6422 if max_initial_paths.as_u32() < max_remote_addresses as u32 + 1 { +6423 // in this case the client might try to open `max_remote_addresses` new +6424 // paths, but the current multipath configuration will not allow it +6425 debug!(%max_initial_paths, %max_remote_addresses, "local client configuration might cause nat traversal issues") +6426 } else if max_local_addresses as u64 +6427 > params.active_connection_id_limit.into_inner() +6428 { +6429 // the server allows us to send at most `params.active_connection_id_limit` +6430 // but they might need at least `max_local_addresses` to effectively send +6431 // `PATH_CHALLENGE` frames to each advertised local address +6432 debug!(%max_local_addresses, remote_cid_limit=%params.active_connection_id_limit.into_inner(), "remote server configuration might cause nat traversal issues") +6433 } +6434 } +6435 Side::Server => { +6436 if (max_initial_paths.as_u32() as u64) < crate::LOCAL_CID_COUNT { +6437 debug!(%max_initial_paths, local_cid_limit=%crate::LOCAL_CID_COUNT, "local server configuration might cause nat traversal issues") +6438 } +6439 } +6440 } +6441 } else { +6442 debug!("n0 nat traversal enabled for both endpoints, but multipath is missing") +6443 } +6444 } +6445 +6446 self.peer_params = params; +6447 let peer_max_udp_payload_size = +6448 u16::try_from(self.peer_params.max_udp_payload_size.into_inner()).unwrap_or(u16::MAX); +6449 self.path_data_mut(PathId::ZERO) +6450 .mtud +6451 .on_peer_max_udp_payload_size_received(peer_max_udp_payload_size); +6452 } +6453 +6454 /// Decrypts a packet, returning the packet number on success +6455 fn decrypt_packet( +6456 &mut self, +6457 now: Instant, +6458 path_id: PathId, +6459 packet: &mut Packet, +6460 ) -> Result<Option<u64>, Option<TransportError>> { +6461 let result = self +6462 .crypto_state +6463 .decrypt_packet_body(packet, path_id, &self.spaces)?; +6464 +6465 let Some(result) = result else { +6466 return Ok(None); +6467 }; +6468 +6469 if result.outgoing_key_update_acked +6470 && let Some(prev) = self.crypto_state.prev_crypto.as_mut() +6471 { +6472 prev.end_packet = Some((result.number, now)); +6473 self.set_key_discard_timer(now, packet.header.space()); +6474 } 6475 -6476 fn peer_supports_ack_frequency(&self) -> bool { -6477 self.peer_params.min_ack_delay.is_some() -6478 } -6479 -6480 /// Send an IMMEDIATE_ACK frame to the remote endpoint -6481 /// -6482 /// According to the spec, this will result in an error if the remote endpoint does not support -6483 /// the Acknowledgement Frequency extension -6484 pub(crate) fn immediate_ack(&mut self, path_id: PathId) { -6485 debug_assert_eq!( -6486 self.highest_space, -6487 SpaceKind::Data, -6488 "immediate ack must be written in the data space" -6489 ); -6490 self.spaces[SpaceId::Data] -6491 .for_path(path_id) -6492 .immediate_ack_pending = true; -6493 } -6494 -6495 /// Decodes a packet, returning its decrypted payload, so it can be inspected in tests -6496 #[cfg(test)] -6497 pub(crate) fn decode_packet(&self, event: &ConnectionEvent) -> Option<Vec<u8>> { -6498 let ConnectionEventInner::Datagram(DatagramConnectionEvent { -6499 path_id, -6500 first_decode, -6501 remaining, -6502 .. -6503 }) = &event.0 -6504 else { -6505 return None; -6506 }; -6507 -6508 if remaining.is_some() { -6509 panic!("Packets should never be coalesced in tests"); -6510 } -6511 -6512 let decrypted_header = self -6513 .crypto_state -6514 .unprotect_header(first_decode.clone(), self.peer_params.stateless_reset_token)?; -6515 -6516 let mut packet = decrypted_header.packet?; -6517 self.crypto_state -6518 .decrypt_packet_body(&mut packet, *path_id, &self.spaces) -6519 .ok()?; -6520 -6521 Some(packet.payload.to_vec()) -6522 } -6523 -6524 /// The number of bytes of packets containing retransmittable frames that have not been -6525 /// acknowledged or declared lost. -6526 #[cfg(test)] -6527 pub(crate) fn bytes_in_flight(&self) -> u64 { -6528 // TODO(@divma): consider including for multipath? -6529 self.path_data(PathId::ZERO).in_flight.bytes -6530 } -6531 -6532 /// Number of bytes worth of non-ack-only packets that may be sent -6533 #[cfg(test)] -6534 pub(crate) fn congestion_window(&self) -> u64 { -6535 let path = self.path_data(PathId::ZERO); -6536 path.congestion -6537 .window() -6538 .saturating_sub(path.in_flight.bytes) -6539 } -6540 -6541 /// Whether no timers but keepalive, idle, rtt, pushnewcid, and key discard are running -6542 #[cfg(test)] -6543 pub(crate) fn is_idle(&self) -> bool { -6544 let current_timers = self.timers.values(); -6545 current_timers -6546 .into_iter() -6547 .filter(|(timer, _)| { -6548 !matches!( -6549 timer, -6550 Timer::Conn(ConnTimer::KeepAlive) -6551 | Timer::PerPath(_, PathTimer::PathKeepAlive) -6552 | Timer::Conn(ConnTimer::PushNewCid) -6553 | Timer::Conn(ConnTimer::KeyDiscard) -6554 ) -6555 }) -6556 .min_by_key(|(_, time)| *time) -6557 .is_none_or(|(timer, _)| { -6558 matches!( +6476 if result.incoming_key_update { +6477 trace!("key update authenticated"); +6478 self.crypto_state +6479 .update_keys(Some((result.number, now)), true); +6480 self.set_key_discard_timer(now, packet.header.space()); +6481 } +6482 +6483 Ok(Some(result.number)) +6484 } +6485 +6486 fn peer_supports_ack_frequency(&self) -> bool { +6487 self.peer_params.min_ack_delay.is_some() +6488 } +6489 +6490 /// Send an IMMEDIATE_ACK frame to the remote endpoint +6491 /// +6492 /// According to the spec, this will result in an error if the remote endpoint does not support +6493 /// the Acknowledgement Frequency extension +6494 pub(crate) fn immediate_ack(&mut self, path_id: PathId) { +6495 debug_assert_eq!( +6496 self.highest_space, +6497 SpaceKind::Data, +6498 "immediate ack must be written in the data space" +6499 ); +6500 self.spaces[SpaceId::Data] +6501 .for_path(path_id) +6502 .immediate_ack_pending = true; +6503 } +6504 +6505 /// Decodes a packet, returning its decrypted payload, so it can be inspected in tests +6506 #[cfg(test)] +6507 pub(crate) fn decode_packet(&self, event: &ConnectionEvent) -> Option<Vec<u8>> { +6508 let ConnectionEventInner::Datagram(DatagramConnectionEvent { +6509 path_id, +6510 first_decode, +6511 remaining, +6512 .. +6513 }) = &event.0 +6514 else { +6515 return None; +6516 }; +6517 +6518 if remaining.is_some() { +6519 panic!("Packets should never be coalesced in tests"); +6520 } +6521 +6522 let decrypted_header = self +6523 .crypto_state +6524 .unprotect_header(first_decode.clone(), self.peer_params.stateless_reset_token)?; +6525 +6526 let mut packet = decrypted_header.packet?; +6527 self.crypto_state +6528 .decrypt_packet_body(&mut packet, *path_id, &self.spaces) +6529 .ok()?; +6530 +6531 Some(packet.payload.to_vec()) +6532 } +6533 +6534 /// The number of bytes of packets containing retransmittable frames that have not been +6535 /// acknowledged or declared lost. +6536 #[cfg(test)] +6537 pub(crate) fn bytes_in_flight(&self) -> u64 { +6538 // TODO(@divma): consider including for multipath? +6539 self.path_data(PathId::ZERO).in_flight.bytes +6540 } +6541 +6542 /// Number of bytes worth of non-ack-only packets that may be sent +6543 #[cfg(test)] +6544 pub(crate) fn congestion_window(&self) -> u64 { +6545 let path = self.path_data(PathId::ZERO); +6546 path.congestion +6547 .window() +6548 .saturating_sub(path.in_flight.bytes) +6549 } +6550 +6551 /// Whether no timers but keepalive, idle, rtt, pushnewcid, and key discard are running +6552 #[cfg(test)] +6553 pub(crate) fn is_idle(&self) -> bool { +6554 let current_timers = self.timers.values(); +6555 current_timers +6556 .into_iter() +6557 .filter(|(timer, _)| { +6558 !matches!( 6559 timer, -6560 Timer::Conn(ConnTimer::Idle) | Timer::PerPath(_, PathTimer::PathIdle) -6561 ) -6562 }) -6563 } -6564 -6565 /// Whether explicit congestion notification is in use on outgoing packets. -6566 #[cfg(test)] -6567 pub(crate) fn using_ecn(&self) -> bool { -6568 self.path_data(PathId::ZERO).sending_ecn -6569 } -6570 -6571 /// The number of received bytes in the current path -6572 #[cfg(test)] -6573 pub(crate) fn total_recvd(&self) -> u64 { -6574 self.path_data(PathId::ZERO).total_recvd -6575 } -6576 -6577 #[cfg(test)] -6578 pub(crate) fn active_local_cid_seq(&self) -> (u64, u64) { -6579 self.local_cid_state -6580 .get(&PathId::ZERO) -6581 .unwrap() -6582 .active_seq() -6583 } -6584 -6585 #[cfg(test)] -6586 #[track_caller] -6587 pub(crate) fn active_local_path_cid_seq(&self, path_id: u32) -> (u64, u64) { -6588 self.local_cid_state -6589 .get(&PathId(path_id)) -6590 .unwrap() -6591 .active_seq() -6592 } -6593 -6594 /// Instruct the peer to replace previously issued CIDs by sending a NEW_CONNECTION_ID frame -6595 /// with updated `retire_prior_to` field set to `v` -6596 #[cfg(test)] -6597 pub(crate) fn rotate_local_cid(&mut self, v: u64, now: Instant) { -6598 let n = self -6599 .local_cid_state -6600 .get_mut(&PathId::ZERO) -6601 .unwrap() -6602 .assign_retire_seq(v); -6603 debug_assert!(!self.state.is_drained()); // requirement for endpoint_events -6604 self.endpoint_events -6605 .push_back(EndpointEventInner::NeedIdentifiers(PathId::ZERO, now, n)); -6606 } -6607 -6608 /// Check the current active remote CID sequence for `PathId::ZERO` -6609 #[cfg(test)] -6610 pub(crate) fn active_remote_cid_seq(&self) -> u64 { -6611 self.remote_cids.get(&PathId::ZERO).unwrap().active_seq() -6612 } -6613 -6614 /// Returns the detected maximum udp payload size for the current path -6615 #[cfg(test)] -6616 pub(crate) fn path_mtu(&self, path_id: PathId) -> u16 { -6617 self.path_data(path_id).current_mtu() -6618 } -6619 -6620 /// Triggers path validation on all paths -6621 #[cfg(test)] -6622 pub(crate) fn trigger_path_validation(&mut self) { -6623 for path in self.paths.values_mut() { -6624 path.data.pending_on_path_challenge = true; -6625 } -6626 } -6627 -6628 /// Simulates a protocol violation error for test purposes. -6629 #[cfg(test)] -6630 pub fn simulate_protocol_violation(&mut self, now: Instant) { -6631 if !self.state.is_closed() { -6632 self.state -6633 .move_to_closed(TransportError::PROTOCOL_VIOLATION("simulated violation")); -6634 self.close_common(); -6635 if !self.state.is_drained() { -6636 self.set_close_timer(now); -6637 } -6638 self.connection_close_pending = true; -6639 } -6640 } -6641 -6642 /// Whether we have on-path 1-RTT data to send. -6643 /// -6644 /// This checks for frames that can only be sent in the data space (1-RTT): -6645 /// - Pending PATH_CHALLENGE frames on the active and previous path if just migrated. -6646 /// - Pending PATH_RESPONSE frames. -6647 /// - Pending data to send in STREAM frames. -6648 /// - Pending DATAGRAM frames to send. -6649 /// -6650 /// See also [`PacketSpace::can_send`] which keeps track of all other frame types that -6651 /// may need to be sent. -6652 fn can_send_1rtt(&self, path_id: PathId, max_size: usize) -> SendableFrames { -6653 let space_specific = self.paths.get(&path_id).is_some_and(|path| { -6654 path.data.pending_on_path_challenge || !path.data.path_responses.is_empty() -6655 }); -6656 -6657 // Stream control frames are checked in PacketSpace::can_send, only check data here. -6658 let other = self.streams.can_send_stream_data() -6659 || self -6660 .datagrams -6661 .outgoing -6662 .front() -6663 .is_some_and(|x| x.size(true) <= max_size); -6664 -6665 // All `false` fields are set in PacketSpace::can_send. -6666 SendableFrames { -6667 acks: false, -6668 close: false, -6669 space_specific, -6670 other, -6671 } -6672 } -6673 -6674 /// Terminate the connection instantly, without sending a close packet -6675 fn kill(&mut self, reason: ConnectionError) { -6676 self.close_common(); -6677 self.state.move_to_drained(Some(reason)); -6678 // move_to_drained checks that we were never in drained before, so we -6679 // never sent a `Drained` event before (it's illegal to send more events after drained). -6680 self.endpoint_events.push_back(EndpointEventInner::Drained); -6681 } -6682 -6683 /// Storage size required for the largest packet that can be transmitted on all currently -6684 /// available paths -6685 /// -6686 /// Buffers passed to [`Connection::poll_transmit`] should be at least this large. -6687 /// -6688 /// When multipath is enabled, this value is the minimum MTU across all available paths. -6689 pub fn current_mtu(&self) -> u16 { -6690 self.paths -6691 .iter() -6692 .filter(|&(path_id, _path_state)| !self.abandoned_paths.contains(path_id)) -6693 .map(|(_path_id, path_state)| path_state.data.current_mtu()) -6694 .min() -6695 .unwrap_or(INITIAL_MTU) -6696 } -6697 -6698 /// Size of non-frame data for a 1-RTT packet -6699 /// -6700 /// Quantifies space consumed by the QUIC header and AEAD tag. All other bytes in a packet are -6701 /// frames. Changes if the length of the remote connection ID changes, which is expected to be -6702 /// rare. If `pn` is specified, may additionally change unpredictably due to variations in -6703 /// latency and packet loss. -6704 fn predict_1rtt_overhead(&mut self, pn: u64, path: PathId) -> usize { -6705 let pn_len = PacketNumber::new( -6706 pn, -6707 self.spaces[SpaceId::Data] -6708 .for_path(path) -6709 .largest_acked_packet -6710 .unwrap_or(0), -6711 ) -6712 .len(); -6713 -6714 // 1 byte for flags -6715 1 + self -6716 .remote_cids -6717 .get(&path) -6718 .map(|cids| cids.active().len()) -6719 .unwrap_or(20) // Max CID len in QUIC v1 -6720 + pn_len -6721 + self.tag_len_1rtt() -6722 } +6560 Timer::Conn(ConnTimer::KeepAlive) +6561 | Timer::PerPath(_, PathTimer::PathKeepAlive) +6562 | Timer::Conn(ConnTimer::PushNewCid) +6563 | Timer::Conn(ConnTimer::KeyDiscard) +6564 ) +6565 }) +6566 .min_by_key(|(_, time)| *time) +6567 .is_none_or(|(timer, _)| { +6568 matches!( +6569 timer, +6570 Timer::Conn(ConnTimer::Idle) | Timer::PerPath(_, PathTimer::PathIdle) +6571 ) +6572 }) +6573 } +6574 +6575 /// Whether explicit congestion notification is in use on outgoing packets. +6576 #[cfg(test)] +6577 pub(crate) fn using_ecn(&self) -> bool { +6578 self.path_data(PathId::ZERO).sending_ecn +6579 } +6580 +6581 /// The number of received bytes in the current path +6582 #[cfg(test)] +6583 pub(crate) fn total_recvd(&self) -> u64 { +6584 self.path_data(PathId::ZERO).total_recvd +6585 } +6586 +6587 #[cfg(test)] +6588 pub(crate) fn active_local_cid_seq(&self) -> (u64, u64) { +6589 self.local_cid_state +6590 .get(&PathId::ZERO) +6591 .unwrap() +6592 .active_seq() +6593 } +6594 +6595 #[cfg(test)] +6596 #[track_caller] +6597 pub(crate) fn active_local_path_cid_seq(&self, path_id: u32) -> (u64, u64) { +6598 self.local_cid_state +6599 .get(&PathId(path_id)) +6600 .unwrap() +6601 .active_seq() +6602 } +6603 +6604 /// Instruct the peer to replace previously issued CIDs by sending a NEW_CONNECTION_ID frame +6605 /// with updated `retire_prior_to` field set to `v` +6606 #[cfg(test)] +6607 pub(crate) fn rotate_local_cid(&mut self, v: u64, now: Instant) { +6608 let n = self +6609 .local_cid_state +6610 .get_mut(&PathId::ZERO) +6611 .unwrap() +6612 .assign_retire_seq(v); +6613 debug_assert!(!self.state.is_drained()); // requirement for endpoint_events +6614 self.endpoint_events +6615 .push_back(EndpointEventInner::NeedIdentifiers(PathId::ZERO, now, n)); +6616 } +6617 +6618 /// Check the current active remote CID sequence for `PathId::ZERO` +6619 #[cfg(test)] +6620 pub(crate) fn active_remote_cid_seq(&self) -> u64 { +6621 self.remote_cids.get(&PathId::ZERO).unwrap().active_seq() +6622 } +6623 +6624 /// Returns the detected maximum udp payload size for the current path +6625 #[cfg(test)] +6626 pub(crate) fn path_mtu(&self, path_id: PathId) -> u16 { +6627 self.path_data(path_id).current_mtu() +6628 } +6629 +6630 /// Triggers path validation on all paths +6631 #[cfg(test)] +6632 pub(crate) fn trigger_path_validation(&mut self) { +6633 for path in self.paths.values_mut() { +6634 path.data.pending_on_path_challenge = true; +6635 } +6636 } +6637 +6638 /// Simulates a protocol violation error for test purposes. +6639 #[cfg(test)] +6640 pub fn simulate_protocol_violation(&mut self, now: Instant) { +6641 if !self.state.is_closed() { +6642 self.state +6643 .move_to_closed(TransportError::PROTOCOL_VIOLATION("simulated violation")); +6644 self.close_common(); +6645 if !self.state.is_drained() { +6646 self.set_close_timer(now); +6647 } +6648 self.connection_close_pending = true; +6649 } +6650 } +6651 +6652 /// Whether we have on-path 1-RTT data to send. +6653 /// +6654 /// This checks for frames that can only be sent in the data space (1-RTT): +6655 /// - Pending PATH_CHALLENGE frames on the active and previous path if just migrated. +6656 /// - Pending PATH_RESPONSE frames. +6657 /// - Pending data to send in STREAM frames. +6658 /// - Pending DATAGRAM frames to send. +6659 /// +6660 /// See also [`PacketSpace::can_send`] which keeps track of all other frame types that +6661 /// may need to be sent. +6662 fn can_send_1rtt(&self, path_id: PathId, max_size: usize) -> SendableFrames { +6663 let space_specific = self.paths.get(&path_id).is_some_and(|path| { +6664 path.data.pending_on_path_challenge || !path.data.path_responses.is_empty() +6665 }); +6666 +6667 // Stream control frames are checked in PacketSpace::can_send, only check data here. +6668 let other = self.streams.can_send_stream_data() +6669 || self +6670 .datagrams +6671 .outgoing +6672 .front() +6673 .is_some_and(|x| x.size(true) <= max_size); +6674 +6675 // All `false` fields are set in PacketSpace::can_send. +6676 SendableFrames { +6677 acks: false, +6678 close: false, +6679 space_specific, +6680 other, +6681 } +6682 } +6683 +6684 /// Terminate the connection instantly, without sending a close packet +6685 fn kill(&mut self, reason: ConnectionError) { +6686 self.close_common(); +6687 self.state.move_to_drained(Some(reason)); +6688 // move_to_drained checks that we were never in drained before, so we +6689 // never sent a `Drained` event before (it's illegal to send more events after drained). +6690 self.endpoint_events.push_back(EndpointEventInner::Drained); +6691 } +6692 +6693 /// Storage size required for the largest packet that can be transmitted on all currently +6694 /// available paths +6695 /// +6696 /// Buffers passed to [`Connection::poll_transmit`] should be at least this large. +6697 /// +6698 /// When multipath is enabled, this value is the minimum MTU across all available paths. +6699 pub fn current_mtu(&self) -> u16 { +6700 self.paths +6701 .iter() +6702 .filter(|&(path_id, _path_state)| !self.abandoned_paths.contains(path_id)) +6703 .map(|(_path_id, path_state)| path_state.data.current_mtu()) +6704 .min() +6705 .unwrap_or(INITIAL_MTU) +6706 } +6707 +6708 /// Size of non-frame data for a 1-RTT packet +6709 /// +6710 /// Quantifies space consumed by the QUIC header and AEAD tag. All other bytes in a packet are +6711 /// frames. Changes if the length of the remote connection ID changes, which is expected to be +6712 /// rare. If `pn` is specified, may additionally change unpredictably due to variations in +6713 /// latency and packet loss. +6714 fn predict_1rtt_overhead(&mut self, pn: u64, path: PathId) -> usize { +6715 let pn_len = PacketNumber::new( +6716 pn, +6717 self.spaces[SpaceId::Data] +6718 .for_path(path) +6719 .largest_acked_packet +6720 .unwrap_or(0), +6721 ) +6722 .len(); 6723 -6724 fn predict_1rtt_overhead_no_pn(&self) -> usize { -6725 let pn_len = 4; -6726 -6727 let cid_len = self -6728 .remote_cids -6729 .values() -6730 .map(|cids| cids.active().len()) -6731 .max() -6732 .unwrap_or(20); // Max CID len in QUIC v1 +6724 // 1 byte for flags +6725 1 + self +6726 .remote_cids +6727 .get(&path) +6728 .map(|cids| cids.active().len()) +6729 .unwrap_or(20) // Max CID len in QUIC v1 +6730 + pn_len +6731 + self.tag_len_1rtt() +6732 } 6733 -6734 // 1 byte for flags -6735 1 + cid_len + pn_len + self.tag_len_1rtt() -6736 } -6737 -6738 fn tag_len_1rtt(&self) -> usize { -6739 // encryption_keys for Data space returns 1-RTT keys if available, otherwise 0-RTT keys -6740 let packet_crypto = self -6741 .crypto_state -6742 .encryption_keys(SpaceKind::Data, self.side.side()) -6743 .map(|(_header, packet, _level)| packet); -6744 // If neither Data nor 0-RTT keys are available, make a reasonable tag length guess. As of -6745 // this writing, all QUIC cipher suites use 16-byte tags. We could return `None` instead, -6746 // but that would needlessly prevent sending datagrams during 0-RTT. -6747 packet_crypto.map_or(16, |x| x.tag_len()) -6748 } -6749 -6750 /// Mark the path as validated, and enqueue NEW_TOKEN frames to be sent as appropriate -6751 fn on_path_validated(&mut self, path_id: PathId) { -6752 self.path_data_mut(path_id).validated = true; -6753 let ConnectionSide::Server { server_config } = &self.side else { -6754 return; -6755 }; -6756 let network_path = self.path_data(path_id).network_path; -6757 let new_tokens = &mut self.spaces[SpaceId::Data as usize].pending.new_tokens; -6758 new_tokens.clear(); -6759 for _ in 0..server_config.validation_token.sent { -6760 new_tokens.push(network_path); -6761 } -6762 } -6763 -6764 /// Handle new path status information: PATH_STATUS_AVAILABLE, PATH_STATUS_BACKUP -6765 fn on_path_status(&mut self, path_id: PathId, status: PathStatus, status_seq_no: VarInt) { -6766 if let Some(path) = self.paths.get_mut(&path_id) { -6767 path.data.status.remote_update(status, status_seq_no); -6768 } else { -6769 debug!("PATH_STATUS_AVAILABLE received unknown path {:?}", path_id); -6770 } -6771 self.events.push_back( -6772 PathEvent::RemoteStatus { -6773 id: path_id, -6774 status, -6775 } -6776 .into(), -6777 ); -6778 } -6779 -6780 /// Returns the maximum [`PathId`] to be used for sending in this connection. -6781 /// -6782 /// This is calculated as minimum between the local and remote's maximums when multipath is -6783 /// enabled, or `None` when disabled. -6784 /// -6785 /// For data that's received, we should use [`Self::local_max_path_id`] instead. -6786 /// The reasoning is that the remote might already have updated to its own newer -6787 /// [`Self::max_path_id`] after sending out a `MAX_PATH_ID` frame, but it got re-ordered. -6788 fn max_path_id(&self) -> Option<PathId> { -6789 if self.is_multipath_negotiated() { -6790 Some(self.remote_max_path_id.min(self.local_max_path_id)) -6791 } else { -6792 None -6793 } -6794 } -6795 -6796 /// Returns whether this connection has a socket that supports IPv6. -6797 /// -6798 /// TODO(matheus23): This is related to noq endpoint state's `ipv6` bool. We should move that info -6799 /// here instead of trying to hack around not knowing it exactly. -6800 fn is_ipv6(&self) -> bool { -6801 self.paths -6802 .values() -6803 .any(|p| p.data.network_path.remote.is_ipv6()) +6734 fn predict_1rtt_overhead_no_pn(&self) -> usize { +6735 let pn_len = 4; +6736 +6737 let cid_len = self +6738 .remote_cids +6739 .values() +6740 .map(|cids| cids.active().len()) +6741 .max() +6742 .unwrap_or(20); // Max CID len in QUIC v1 +6743 +6744 // 1 byte for flags +6745 1 + cid_len + pn_len + self.tag_len_1rtt() +6746 } +6747 +6748 fn tag_len_1rtt(&self) -> usize { +6749 // encryption_keys for Data space returns 1-RTT keys if available, otherwise 0-RTT keys +6750 let packet_crypto = self +6751 .crypto_state +6752 .encryption_keys(SpaceKind::Data, self.side.side()) +6753 .map(|(_header, packet, _level)| packet); +6754 // If neither Data nor 0-RTT keys are available, make a reasonable tag length guess. As of +6755 // this writing, all QUIC cipher suites use 16-byte tags. We could return `None` instead, +6756 // but that would needlessly prevent sending datagrams during 0-RTT. +6757 packet_crypto.map_or(16, |x| x.tag_len()) +6758 } +6759 +6760 /// Mark the path as validated, and enqueue NEW_TOKEN frames to be sent as appropriate +6761 fn on_path_validated(&mut self, path_id: PathId) { +6762 self.path_data_mut(path_id).validated = true; +6763 let ConnectionSide::Server { server_config } = &self.side else { +6764 return; +6765 }; +6766 let network_path = self.path_data(path_id).network_path; +6767 let new_tokens = &mut self.spaces[SpaceId::Data as usize].pending.new_tokens; +6768 new_tokens.clear(); +6769 for _ in 0..server_config.validation_token.sent { +6770 new_tokens.push(network_path); +6771 } +6772 } +6773 +6774 /// Handle new path status information: PATH_STATUS_AVAILABLE, PATH_STATUS_BACKUP +6775 fn on_path_status(&mut self, path_id: PathId, status: PathStatus, status_seq_no: VarInt) { +6776 if let Some(path) = self.paths.get_mut(&path_id) { +6777 path.data.status.remote_update(status, status_seq_no); +6778 } else { +6779 debug!("PATH_STATUS_AVAILABLE received unknown path {:?}", path_id); +6780 } +6781 self.events.push_back( +6782 PathEvent::RemoteStatus { +6783 id: path_id, +6784 status, +6785 } +6786 .into(), +6787 ); +6788 } +6789 +6790 /// Returns the maximum [`PathId`] to be used for sending in this connection. +6791 /// +6792 /// This is calculated as minimum between the local and remote's maximums when multipath is +6793 /// enabled, or `None` when disabled. +6794 /// +6795 /// For data that's received, we should use [`Self::local_max_path_id`] instead. +6796 /// The reasoning is that the remote might already have updated to its own newer +6797 /// [`Self::max_path_id`] after sending out a `MAX_PATH_ID` frame, but it got re-ordered. +6798 fn max_path_id(&self) -> Option<PathId> { +6799 if self.is_multipath_negotiated() { +6800 Some(self.remote_max_path_id.min(self.local_max_path_id)) +6801 } else { +6802 None +6803 } 6804 } 6805 -6806 /// Add addresses the local endpoint considers are reachable for nat traversal. -6807 pub fn add_nat_traversal_address( -6808 &mut self, -6809 address: SocketAddr, -6810 ) -> Result<(), n0_nat_traversal::Error> { -6811 if let Some(added) = self.n0_nat_traversal.add_local_address(address)? { -6812 self.spaces[SpaceId::Data].pending.add_address.insert(added); -6813 }; -6814 Ok(()) -6815 } -6816 -6817 /// Removes an address the endpoing no longer considers reachable for nat traversal -6818 /// -6819 /// Addresses not present in the set will be silently ignored. -6820 pub fn remove_nat_traversal_address( -6821 &mut self, -6822 address: SocketAddr, -6823 ) -> Result<(), n0_nat_traversal::Error> { -6824 if let Some(removed) = self.n0_nat_traversal.remove_local_address(address)? { -6825 self.spaces[SpaceId::Data] -6826 .pending -6827 .remove_address -6828 .insert(removed); -6829 } -6830 Ok(()) -6831 } -6832 -6833 /// Get the current local nat traversal addresses -6834 pub fn get_local_nat_traversal_addresses( -6835 &self, -6836 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -6837 self.n0_nat_traversal.get_local_nat_traversal_addresses() -6838 } -6839 -6840 /// Get the currently advertised nat traversal addresses by the server -6841 pub fn get_remote_nat_traversal_addresses( -6842 &self, -6843 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -6844 Ok(self -6845 .n0_nat_traversal -6846 .client_side()? -6847 .get_remote_nat_traversal_addresses()) +6806 /// Returns whether this connection has a socket that supports IPv6. +6807 /// +6808 /// TODO(matheus23): This is related to noq endpoint state's `ipv6` bool. We should move that info +6809 /// here instead of trying to hack around not knowing it exactly. +6810 fn is_ipv6(&self) -> bool { +6811 self.paths +6812 .values() +6813 .any(|p| p.data.network_path.remote.is_ipv6()) +6814 } +6815 +6816 /// Add addresses the local endpoint considers are reachable for nat traversal. +6817 pub fn add_nat_traversal_address( +6818 &mut self, +6819 address: SocketAddr, +6820 ) -> Result<(), n0_nat_traversal::Error> { +6821 if let Some(added) = self.n0_nat_traversal.add_local_address(address)? { +6822 self.spaces[SpaceId::Data].pending.add_address.insert(added); +6823 }; +6824 Ok(()) +6825 } +6826 +6827 /// Removes an address the endpoing no longer considers reachable for nat traversal +6828 /// +6829 /// Addresses not present in the set will be silently ignored. +6830 pub fn remove_nat_traversal_address( +6831 &mut self, +6832 address: SocketAddr, +6833 ) -> Result<(), n0_nat_traversal::Error> { +6834 if let Some(removed) = self.n0_nat_traversal.remove_local_address(address)? { +6835 self.spaces[SpaceId::Data] +6836 .pending +6837 .remove_address +6838 .insert(removed); +6839 } +6840 Ok(()) +6841 } +6842 +6843 /// Get the current local nat traversal addresses +6844 pub fn get_local_nat_traversal_addresses( +6845 &self, +6846 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +6847 self.n0_nat_traversal.get_local_nat_traversal_addresses() 6848 } 6849 -6850 /// Attempts to open a path for nat traversal. -6851 /// -6852 /// On success returns the [`PathId`] and remote address of the path. -6853 fn open_nat_traversal_path( -6854 &mut self, -6855 now: Instant, -6856 ip_port: (IpAddr, u16), -6857 ) -> Result<Option<(PathId, SocketAddr)>, PathError> { -6858 let remote = ip_port.into(); -6859 // TODO(matheus23): Probe the correct 4-tuple, instead of only a remote address? -6860 // By specifying None for `local_ip`, we do two things: 1. open_path_ensure won't -6861 // generate two paths to the same remote and 2. we let the OS choose which -6862 // interface to use for sending on that path. -6863 let network_path = FourTuple { -6864 remote, -6865 local_ip: None, -6866 }; -6867 match self.open_path_ensure(network_path, PathStatus::Backup, now) { -6868 Ok((path_id, path_was_known)) => { -6869 if path_was_known { -6870 trace!(%path_id, %remote, "nat traversal: path existed for remote, revalidating"); -6871 if let Some(path) = self.paths.get_mut(&path_id) { -6872 path.data.pending_on_path_challenge = true; -6873 } -6874 } -6875 Ok(Some((path_id, remote))) -6876 } -6877 Err(e) => { -6878 debug!(%remote, %e, "nat traversal: failed to probe remote"); -6879 Err(e) -6880 } -6881 } -6882 } -6883 -6884 /// Initiates a new nat traversal round -6885 /// -6886 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` -6887 /// frames, and initiating probing of the known remote addresses. When a new round is -6888 /// initiated, the previous one is cancelled, and paths that have not been opened are closed. -6889 /// -6890 /// Returns the server addresses that are now being probed. -6891 /// If addresses fail due to spurious errors, these might succeed later and not be returned in -6892 /// this set. -6893 pub fn initiate_nat_traversal_round( -6894 &mut self, -6895 now: Instant, -6896 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { -6897 if self.state.is_closed() { -6898 return Err(n0_nat_traversal::Error::Closed); -6899 } -6900 -6901 let ipv6 = self.is_ipv6(); -6902 let client_state = self.n0_nat_traversal.client_side_mut()?; -6903 let n0_nat_traversal::NatTraversalRound { -6904 new_round, -6905 reach_out_at, -6906 addresses_to_probe, -6907 prev_round_path_ids, -6908 } = client_state.initiate_nat_traversal_round(ipv6)?; -6909 -6910 trace!(%new_round, reach_out=reach_out_at.len(), to_probe=addresses_to_probe.len(), -6911 "initiating nat traversal round"); -6912 -6913 self.spaces[SpaceId::Data].pending.reach_out = Some((new_round, reach_out_at)); -6914 -6915 for path_id in prev_round_path_ids { -6916 let Some(path) = self.path(path_id) else { -6917 continue; -6918 }; -6919 let ip = path.network_path.remote.ip(); -6920 let port = path.network_path.remote.port(); -6921 -6922 // We only close paths that aren't validated (thus are working) that we opened -6923 // in a previous round. -6924 // And we only close paths that we don't want to probe anyways. -6925 if !addresses_to_probe -6926 .iter() -6927 .any(|(_, probe)| *probe == (ip, port)) -6928 && !path.validated -6929 && !self.abandoned_paths.contains(&path_id) -6930 { -6931 trace!(%path_id, "closing path from previous round"); -6932 let _ = -6933 self.close_path_inner(now, path_id, PathAbandonReason::NatTraversalRoundEnded); -6934 } -6935 } -6936 -6937 let mut err = None; -6938 -6939 let mut path_ids = Vec::with_capacity(addresses_to_probe.len()); -6940 let mut probed_addresses = Vec::with_capacity(addresses_to_probe.len()); -6941 -6942 for (id, address) in addresses_to_probe { -6943 match self.open_nat_traversal_path(now, address) { -6944 Ok(None) => {} -6945 Ok(Some((path_id, remote))) => { -6946 path_ids.push(path_id); -6947 probed_addresses.push(remote); -6948 } -6949 Err(e) => { -6950 self.n0_nat_traversal -6951 .client_side_mut() -6952 .expect("validated") -6953 .report_in_continuation(id, e); -6954 err.get_or_insert(e); -6955 } -6956 } -6957 } -6958 -6959 if let Some(err) = err { -6960 // We failed to probe any addresses, bail out -6961 if probed_addresses.is_empty() { -6962 return Err(n0_nat_traversal::Error::Multipath(err)); -6963 } -6964 } -6965 -6966 self.n0_nat_traversal -6967 .client_side_mut() -6968 .expect("connection side validated") -6969 .set_round_path_ids(path_ids); -6970 -6971 Ok(probed_addresses) -6972 } -6973 -6974 /// Attempts to continue a nat traversal round by trying to open paths for pending client probes. -6975 /// -6976 /// If there was nothing to do, it returns `None`. Otherwise it returns whether the path was -6977 /// successfully open. -6978 fn continue_nat_traversal_round(&mut self, now: Instant) -> Option<bool> { -6979 let ipv6 = self.is_ipv6(); -6980 let client_state = self.n0_nat_traversal.client_side_mut().ok()?; -6981 let (id, address) = client_state.continue_nat_traversal_round(ipv6)?; -6982 let open_result = self.open_nat_traversal_path(now, address); -6983 let client_state = self.n0_nat_traversal.client_side_mut().expect("validated"); -6984 match open_result { -6985 Ok(None) => Some(true), -6986 Ok(Some((path_id, _remote))) => { -6987 client_state.add_round_path_id(path_id); -6988 Some(true) -6989 } -6990 Err(e) => { -6991 client_state.report_in_continuation(id, e); -6992 Some(false) -6993 } -6994 } -6995 } -6996} -6997 -6998impl fmt::Debug for Connection { -6999 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { -7000 f.debug_struct("Connection") -7001 .field("handshake_cid", &self.handshake_cid) -7002 .finish() -7003 } -7004} -7005 -7006/// Hints when the caller identifies a network change. -7007pub trait NetworkChangeHint: std::fmt::Debug + 'static { -7008 /// Inform the connection if a path may recover after a network change. -7009 /// -7010 /// After network changes, paths may not be recoverable. In this case, waiting for the path to -7011 /// become idle may take longer than what is desirable. If [`Self::is_path_recoverable`] -7012 /// returns `false`, a multipath-enabled, client-side connection will establish a new path to -7013 /// the same remote, closing the current one, instead of migrating the path. -7014 /// -7015 /// Paths that are deemed recoverable will simply be sent a PING for a liveness check. -7016 fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool; -7017} -7018 -7019/// Return value for [`Connection::poll_transmit_on_path`]. -7020#[derive(Debug)] -7021enum PollPathStatus { -7022 /// Nothing to send on the path, nothing was written into the [`TransmitBuf`]. -7023 NothingToSend { -7024 /// If true there was data to send but congestion control did not allow so. -7025 congestion_blocked: bool, -7026 }, -7027 /// The transmit is ready to be sent. -7028 Send(Transmit), +6850 /// Get the currently advertised nat traversal addresses by the server +6851 pub fn get_remote_nat_traversal_addresses( +6852 &self, +6853 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +6854 Ok(self +6855 .n0_nat_traversal +6856 .client_side()? +6857 .get_remote_nat_traversal_addresses()) +6858 } +6859 +6860 /// Attempts to open a path for nat traversal. +6861 /// +6862 /// On success returns the [`PathId`] and remote address of the path. +6863 fn open_nat_traversal_path( +6864 &mut self, +6865 now: Instant, +6866 ip_port: (IpAddr, u16), +6867 ) -> Result<Option<(PathId, SocketAddr)>, PathError> { +6868 let remote = ip_port.into(); +6869 // TODO(matheus23): Probe the correct 4-tuple, instead of only a remote address? +6870 // By specifying None for `local_ip`, we do two things: 1. open_path_ensure won't +6871 // generate two paths to the same remote and 2. we let the OS choose which +6872 // interface to use for sending on that path. +6873 let network_path = FourTuple { +6874 remote, +6875 local_ip: None, +6876 }; +6877 match self.open_path_ensure(network_path, PathStatus::Backup, now) { +6878 Ok((path_id, path_was_known)) => { +6879 if path_was_known { +6880 trace!(%path_id, %remote, "nat traversal: path existed for remote, revalidating"); +6881 if let Some(path) = self.paths.get_mut(&path_id) { +6882 path.data.pending_on_path_challenge = true; +6883 } +6884 } +6885 Ok(Some((path_id, remote))) +6886 } +6887 Err(e) => { +6888 debug!(%remote, %e, "nat traversal: failed to probe remote"); +6889 Err(e) +6890 } +6891 } +6892 } +6893 +6894 /// Initiates a new nat traversal round +6895 /// +6896 /// A nat traversal round involves advertising the client's local addresses in `REACH_OUT` +6897 /// frames, and initiating probing of the known remote addresses. When a new round is +6898 /// initiated, the previous one is cancelled, and paths that have not been opened are closed. +6899 /// +6900 /// Returns the server addresses that are now being probed. +6901 /// If addresses fail due to spurious errors, these might succeed later and not be returned in +6902 /// this set. +6903 pub fn initiate_nat_traversal_round( +6904 &mut self, +6905 now: Instant, +6906 ) -> Result<Vec<SocketAddr>, n0_nat_traversal::Error> { +6907 if self.state.is_closed() { +6908 return Err(n0_nat_traversal::Error::Closed); +6909 } +6910 +6911 let ipv6 = self.is_ipv6(); +6912 let client_state = self.n0_nat_traversal.client_side_mut()?; +6913 let n0_nat_traversal::NatTraversalRound { +6914 new_round, +6915 reach_out_at, +6916 addresses_to_probe, +6917 prev_round_path_ids, +6918 } = client_state.initiate_nat_traversal_round(ipv6)?; +6919 +6920 trace!(%new_round, reach_out=reach_out_at.len(), to_probe=addresses_to_probe.len(), +6921 "initiating nat traversal round"); +6922 +6923 self.spaces[SpaceId::Data].pending.reach_out = Some((new_round, reach_out_at)); +6924 +6925 for path_id in prev_round_path_ids { +6926 let Some(path) = self.path(path_id) else { +6927 continue; +6928 }; +6929 let ip = path.network_path.remote.ip(); +6930 let port = path.network_path.remote.port(); +6931 +6932 // We only close paths that aren't validated (thus are working) that we opened +6933 // in a previous round. +6934 // And we only close paths that we don't want to probe anyways. +6935 if !addresses_to_probe +6936 .iter() +6937 .any(|(_, probe)| *probe == (ip, port)) +6938 && !path.validated +6939 && !self.abandoned_paths.contains(&path_id) +6940 { +6941 trace!(%path_id, "closing path from previous round"); +6942 let _ = +6943 self.close_path_inner(now, path_id, PathAbandonReason::NatTraversalRoundEnded); +6944 } +6945 } +6946 +6947 let mut err = None; +6948 +6949 let mut path_ids = Vec::with_capacity(addresses_to_probe.len()); +6950 let mut probed_addresses = Vec::with_capacity(addresses_to_probe.len()); +6951 +6952 for (id, address) in addresses_to_probe { +6953 match self.open_nat_traversal_path(now, address) { +6954 Ok(None) => {} +6955 Ok(Some((path_id, remote))) => { +6956 path_ids.push(path_id); +6957 probed_addresses.push(remote); +6958 } +6959 Err(e) => { +6960 self.n0_nat_traversal +6961 .client_side_mut() +6962 .expect("validated") +6963 .report_in_continuation(id, e); +6964 err.get_or_insert(e); +6965 } +6966 } +6967 } +6968 +6969 if let Some(err) = err { +6970 // We failed to probe any addresses, bail out +6971 if probed_addresses.is_empty() { +6972 return Err(n0_nat_traversal::Error::Multipath(err)); +6973 } +6974 } +6975 +6976 self.n0_nat_traversal +6977 .client_side_mut() +6978 .expect("connection side validated") +6979 .set_round_path_ids(path_ids); +6980 +6981 Ok(probed_addresses) +6982 } +6983 +6984 /// Attempts to continue a nat traversal round by trying to open paths for pending client probes. +6985 /// +6986 /// If there was nothing to do, it returns `None`. Otherwise it returns whether the path was +6987 /// successfully open. +6988 fn continue_nat_traversal_round(&mut self, now: Instant) -> Option<bool> { +6989 let ipv6 = self.is_ipv6(); +6990 let client_state = self.n0_nat_traversal.client_side_mut().ok()?; +6991 let (id, address) = client_state.continue_nat_traversal_round(ipv6)?; +6992 let open_result = self.open_nat_traversal_path(now, address); +6993 let client_state = self.n0_nat_traversal.client_side_mut().expect("validated"); +6994 match open_result { +6995 Ok(None) => Some(true), +6996 Ok(Some((path_id, _remote))) => { +6997 client_state.add_round_path_id(path_id); +6998 Some(true) +6999 } +7000 Err(e) => { +7001 client_state.report_in_continuation(id, e); +7002 Some(false) +7003 } +7004 } +7005 } +7006 +7007 /// Whether the handshake is considered **confirmed**. +7008 /// +7009 /// The handshake is **completed** when the 1-RTT crypto keys are available. However it +7010 /// is only **confirmed** once the peer's TLS Finish message is received and validated. +7011 fn is_handshake_confirmed(&self) -> bool { +7012 if self.side() == Side::Server { +7013 // On the server completed and confirmed are different times. So we look for the +7014 // handshake keys being gone. +7015 !self.is_handshaking() && !self.crypto_state.has_keys(EncryptionLevel::Handshake) +7016 } else { +7017 // The client is confirmed as soon at it managed to compute 1-RTT keys. +7018 self.crypto_state.has_keys(EncryptionLevel::OneRtt) +7019 } +7020 } +7021} +7022 +7023impl fmt::Debug for Connection { +7024 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +7025 f.debug_struct("Connection") +7026 .field("handshake_cid", &self.handshake_cid) +7027 .finish() +7028 } 7029} 7030 -7031/// Return value for [`Connection::poll_transmit_path_space`]. -7032#[derive(Debug)] -7033enum PollPathSpaceStatus { -7034 /// Nothing to send in the space, nothing was written into the [`TransmitBuf`]. -7035 NothingToSend { -7036 /// If true there was data to send but congestion control did not allow so. -7037 congestion_blocked: bool, -7038 }, -7039 /// One or more packets have been written into the [`TransmitBuf`]. -7040 WrotePacket { -7041 /// The highest packet number. -7042 last_packet_number: u64, -7043 /// Whether to pad an already started datagram in the next packet. -7044 /// -7045 /// When packets in Initial, 0-RTT or Handshake packet do not fill the entire -7046 /// datagram they may decide to coalesce with the next packet from a higher -7047 /// encryption level on the same path. But the earlier packet may require specific -7048 /// size requirements for the datagram they are sent in. -7049 /// -7050 /// If a space did not complete the datagram, they use this to request the correct -7051 /// padding in the final packet of the datagram so that the final datagram will have -7052 /// the correct size. -7053 /// -7054 /// If a space did fill an entire datagram, it leaves this to the default of -7055 /// [`PadDatagram::No`]. -7056 pad_datagram: PadDatagram, -7057 }, -7058 /// Send the contents of the transmit immediately. -7059 /// -7060 /// Packets were written and the GSO batch must end now, regardless from whether higher -7061 /// spaces still have frames to write. This is used when the last datagram written would -7062 /// require too much padding to continue a GSO batch, which would waste space on the -7063 /// wire. -7064 Send { -7065 /// The highest packet number written into the transmit. -7066 last_packet_number: u64, -7067 }, -7068} -7069 -7070/// Information used to decide what frames to schedule into which packets. -7071/// -7072/// Primarily used by [`Connection::poll_transmit_on_path`] and the functions that help -7073/// building packets for it: [`Connection::poll_transmit_path_space`] and -7074/// [`Connection::populate_packet`]. -7075#[derive(Debug, Copy, Clone)] -7076struct PathSchedulingInfo { -7077 /// Whether the path is abandoned. -7078 /// -7079 /// Note that a path that is abandoned but still has CIDs can still send a packet. After -7080 /// sending that packet the CIDs issued by the remote have to be considered retired as -7081 /// well. -7082 is_abandoned: bool, -7083 /// Whether the path may send [`SpaceKind::Data`] frames. +7031/// Hints when the caller identifies a network change. +7032pub trait NetworkChangeHint: std::fmt::Debug + 'static { +7033 /// Inform the connection if a path may recover after a network change. +7034 /// +7035 /// After network changes, paths may not be recoverable. In this case, waiting for the path to +7036 /// become idle may take longer than what is desirable. If [`Self::is_path_recoverable`] +7037 /// returns `false`, a multipath-enabled, client-side connection will establish a new path to +7038 /// the same remote, closing the current one, instead of migrating the path. +7039 /// +7040 /// Paths that are deemed recoverable will simply be sent a PING for a liveness check. +7041 fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool; +7042} +7043 +7044/// Return value for [`Connection::poll_transmit_on_path`]. +7045#[derive(Debug)] +7046enum PollPathStatus { +7047 /// Nothing to send on the path, nothing was written into the [`TransmitBuf`]. +7048 NothingToSend { +7049 /// If true there was data to send but congestion control did not allow so. +7050 congestion_blocked: bool, +7051 }, +7052 /// The transmit is ready to be sent. +7053 Send(Transmit), +7054} +7055 +7056/// Return value for [`Connection::poll_transmit_path_space`]. +7057#[derive(Debug)] +7058enum PollPathSpaceStatus { +7059 /// Nothing to send in the space, nothing was written into the [`TransmitBuf`]. +7060 NothingToSend { +7061 /// If true there was data to send but congestion control did not allow so. +7062 congestion_blocked: bool, +7063 }, +7064 /// One or more packets have been written into the [`TransmitBuf`]. +7065 WrotePacket { +7066 /// The highest packet number. +7067 last_packet_number: u64, +7068 /// Whether to pad an already started datagram in the next packet. +7069 /// +7070 /// When packets in Initial, 0-RTT or Handshake packet do not fill the entire +7071 /// datagram they may decide to coalesce with the next packet from a higher +7072 /// encryption level on the same path. But the earlier packet may require specific +7073 /// size requirements for the datagram they are sent in. +7074 /// +7075 /// If a space did not complete the datagram, they use this to request the correct +7076 /// padding in the final packet of the datagram so that the final datagram will have +7077 /// the correct size. +7078 /// +7079 /// If a space did fill an entire datagram, it leaves this to the default of +7080 /// [`PadDatagram::No`]. +7081 pad_datagram: PadDatagram, +7082 }, +7083 /// Send the contents of the transmit immediately. 7084 /// -7085 /// Some paths should only send frames from [`SendableFrames::space_specific`]. All other -7086 /// frames are essentially frames that can be sent on any [`SpaceKind::Data`] space. For -7087 /// those we want to respect packet scheduling rules however. -7088 /// -7089 /// Roughly speaking data frames are only sent on spaces that have CIDs, are not -7090 /// abandoned and have no *better* spaces. However see to comments where this is -7091 /// populated for the exact packet scheduling implementation. -7092 /// -7093 /// This essentially marks this paths as the best validated space ID. Except during -7094 /// the handshake in which case it does not need to be validated. Several paths could be -7095 /// equally good and all have this set to `true`, in that case packet scheduling can -7096 /// choose which path to use. Currently it chooses the lowest path that is not -7097 /// congestion blocked. -7098 /// -7099 /// Note that once in the closed or draining states this will never be true. -7100 may_send_data: bool, -7101 /// Whether the path may send a CONNECTION_CLOSE frame. -7102 /// -7103 /// This essentially marks this path as the best validated space ID with a fallback -7104 /// to unvalidated spaces if there are no validated spaces. Like for -7105 /// [`Self::may_send_data`] other paths could be equally good. -7106 may_send_close: bool, -7107 may_self_abandon: bool, -7108} -7109 -7110#[derive(Debug, Copy, Clone, PartialEq, Eq)] -7111enum PathBlocked { -7112 No, -7113 AntiAmplification, -7114 Congestion, -7115 Pacing, -7116} -7117 -7118/// Fields of `Connection` specific to it being client-side or server-side -7119enum ConnectionSide { -7120 Client { -7121 /// Sent in every outgoing Initial packet. Always empty after Initial keys are discarded -7122 token: Bytes, -7123 token_store: Arc<dyn TokenStore>, -7124 server_name: String, -7125 }, -7126 Server { -7127 server_config: Arc<ServerConfig>, -7128 }, -7129} -7130 -7131impl ConnectionSide { -7132 fn remote_may_migrate(&self, state: &State) -> bool { -7133 match self { -7134 Self::Server { server_config } => server_config.migration, -7135 Self::Client { .. } => { -7136 if let Some(hs) = state.as_handshake() { -7137 hs.allow_server_migration -7138 } else { -7139 false -7140 } -7141 } -7142 } -7143 } -7144 -7145 fn is_client(&self) -> bool { -7146 self.side().is_client() -7147 } -7148 -7149 fn is_server(&self) -> bool { -7150 self.side().is_server() -7151 } -7152 -7153 fn side(&self) -> Side { -7154 match *self { -7155 Self::Client { .. } => Side::Client, -7156 Self::Server { .. } => Side::Server, -7157 } -7158 } -7159} -7160 -7161impl From<SideArgs> for ConnectionSide { -7162 fn from(side: SideArgs) -> Self { -7163 match side { -7164 SideArgs::Client { -7165 token_store, -7166 server_name, -7167 } => Self::Client { -7168 token: token_store.take(&server_name).unwrap_or_default(), -7169 token_store, -7170 server_name, -7171 }, -7172 SideArgs::Server { -7173 server_config, -7174 pref_addr_cid: _, -7175 path_validated: _, -7176 } => Self::Server { server_config }, -7177 } -7178 } -7179} -7180 -7181/// Parameters to `Connection::new` specific to it being client-side or server-side -7182pub(crate) enum SideArgs { -7183 Client { -7184 token_store: Arc<dyn TokenStore>, -7185 server_name: String, -7186 }, -7187 Server { -7188 server_config: Arc<ServerConfig>, -7189 pref_addr_cid: Option<ConnectionId>, -7190 path_validated: bool, -7191 }, -7192} -7193 -7194impl SideArgs { -7195 pub(crate) fn pref_addr_cid(&self) -> Option<ConnectionId> { -7196 match *self { -7197 Self::Client { .. } => None, -7198 Self::Server { pref_addr_cid, .. } => pref_addr_cid, -7199 } -7200 } -7201 -7202 pub(crate) fn path_validated(&self) -> bool { -7203 match *self { -7204 Self::Client { .. } => true, -7205 Self::Server { path_validated, .. } => path_validated, -7206 } -7207 } -7208 -7209 pub(crate) fn side(&self) -> Side { -7210 match *self { -7211 Self::Client { .. } => Side::Client, -7212 Self::Server { .. } => Side::Server, -7213 } -7214 } -7215} -7216 -7217/// Reasons why a connection might be lost -7218#[derive(Debug, Error, Clone, PartialEq, Eq)] -7219pub enum ConnectionError { -7220 /// The peer doesn't implement any supported version -7221 #[error("peer doesn't implement any supported version")] -7222 VersionMismatch, -7223 /// The peer violated the QUIC specification as understood by this implementation -7224 #[error(transparent)] -7225 TransportError(#[from] TransportError), -7226 /// The peer's QUIC stack aborted the connection automatically -7227 #[error("aborted by peer: {0}")] -7228 ConnectionClosed(frame::ConnectionClose), -7229 /// The peer closed the connection -7230 #[error("closed by peer: {0}")] -7231 ApplicationClosed(frame::ApplicationClose), -7232 /// The peer is unable to continue processing this connection, usually due to having restarted -7233 #[error("reset by peer")] -7234 Reset, -7235 /// Communication with the peer has lapsed for longer than the negotiated idle timeout -7236 /// -7237 /// If neither side is sending keep-alives, a connection will time out after a long enough idle -7238 /// period even if the peer is still reachable. See also [`TransportConfig::max_idle_timeout()`] -7239 /// and [`TransportConfig::keep_alive_interval()`]. -7240 #[error("timed out")] -7241 TimedOut, -7242 /// The local application closed the connection -7243 #[error("closed")] -7244 LocallyClosed, -7245 /// The connection could not be created because not enough of the CID space is available -7246 /// -7247 /// Try using longer connection IDs. -7248 #[error("CIDs exhausted")] -7249 CidsExhausted, -7250} -7251 -7252impl From<Close> for ConnectionError { -7253 fn from(x: Close) -> Self { -7254 match x { -7255 Close::Connection(reason) => Self::ConnectionClosed(reason), -7256 Close::Application(reason) => Self::ApplicationClosed(reason), -7257 } -7258 } -7259} -7260 -7261// For compatibility with API consumers -7262impl From<ConnectionError> for io::Error { -7263 fn from(x: ConnectionError) -> Self { -7264 use ConnectionError::*; -7265 let kind = match x { -7266 TimedOut => io::ErrorKind::TimedOut, -7267 Reset => io::ErrorKind::ConnectionReset, -7268 ApplicationClosed(_) | ConnectionClosed(_) => io::ErrorKind::ConnectionAborted, -7269 TransportError(_) | VersionMismatch | LocallyClosed | CidsExhausted => { -7270 io::ErrorKind::Other -7271 } -7272 }; -7273 Self::new(kind, x) -7274 } +7085 /// Packets were written and the GSO batch must end now, regardless from whether higher +7086 /// spaces still have frames to write. This is used when the last datagram written would +7087 /// require too much padding to continue a GSO batch, which would waste space on the +7088 /// wire. +7089 Send { +7090 /// The highest packet number written into the transmit. +7091 last_packet_number: u64, +7092 }, +7093} +7094 +7095/// Information used to decide what frames to schedule into which packets. +7096/// +7097/// Primarily used by [`Connection::poll_transmit_on_path`] and the functions that help +7098/// building packets for it: [`Connection::poll_transmit_path_space`] and +7099/// [`Connection::populate_packet`]. +7100#[derive(Debug, Copy, Clone)] +7101struct PathSchedulingInfo { +7102 /// Whether the path is abandoned. +7103 /// +7104 /// Note that a path that is abandoned but still has CIDs can still send a packet. After +7105 /// sending that packet the CIDs issued by the remote have to be considered retired as +7106 /// well. +7107 is_abandoned: bool, +7108 /// Whether the path may send [`SpaceKind::Data`] frames. +7109 /// +7110 /// Some paths should only send frames from [`SendableFrames::space_specific`]. All other +7111 /// frames are essentially frames that can be sent on any [`SpaceKind::Data`] space. For +7112 /// those we want to respect packet scheduling rules however. +7113 /// +7114 /// Roughly speaking data frames are only sent on spaces that have CIDs, are not +7115 /// abandoned and have no *better* spaces. However see to comments where this is +7116 /// populated for the exact packet scheduling implementation. +7117 /// +7118 /// This essentially marks this paths as the best validated space ID. Except during +7119 /// the handshake in which case it does not need to be validated. Several paths could be +7120 /// equally good and all have this set to `true`, in that case packet scheduling can +7121 /// choose which path to use. Currently it chooses the lowest path that is not +7122 /// congestion blocked. +7123 /// +7124 /// Note that once in the closed or draining states this will never be true. +7125 may_send_data: bool, +7126 /// Whether the path may send a CONNECTION_CLOSE frame. +7127 /// +7128 /// This essentially marks this path as the best validated space ID with a fallback +7129 /// to unvalidated spaces if there are no validated spaces. Like for +7130 /// [`Self::may_send_data`] other paths could be equally good. +7131 may_send_close: bool, +7132 may_self_abandon: bool, +7133} +7134 +7135#[derive(Debug, Copy, Clone, PartialEq, Eq)] +7136enum PathBlocked { +7137 No, +7138 AntiAmplification, +7139 Congestion, +7140 Pacing, +7141} +7142 +7143/// Fields of `Connection` specific to it being client-side or server-side +7144enum ConnectionSide { +7145 Client { +7146 /// Sent in every outgoing Initial packet. Always empty after Initial keys are discarded +7147 token: Bytes, +7148 token_store: Arc<dyn TokenStore>, +7149 server_name: String, +7150 }, +7151 Server { +7152 server_config: Arc<ServerConfig>, +7153 }, +7154} +7155 +7156impl ConnectionSide { +7157 fn remote_may_migrate(&self, state: &State) -> bool { +7158 match self { +7159 Self::Server { server_config } => server_config.migration, +7160 Self::Client { .. } => { +7161 if let Some(hs) = state.as_handshake() { +7162 hs.allow_server_migration +7163 } else { +7164 false +7165 } +7166 } +7167 } +7168 } +7169 +7170 fn is_client(&self) -> bool { +7171 self.side().is_client() +7172 } +7173 +7174 fn is_server(&self) -> bool { +7175 self.side().is_server() +7176 } +7177 +7178 fn side(&self) -> Side { +7179 match *self { +7180 Self::Client { .. } => Side::Client, +7181 Self::Server { .. } => Side::Server, +7182 } +7183 } +7184} +7185 +7186impl From<SideArgs> for ConnectionSide { +7187 fn from(side: SideArgs) -> Self { +7188 match side { +7189 SideArgs::Client { +7190 token_store, +7191 server_name, +7192 } => Self::Client { +7193 token: token_store.take(&server_name).unwrap_or_default(), +7194 token_store, +7195 server_name, +7196 }, +7197 SideArgs::Server { +7198 server_config, +7199 pref_addr_cid: _, +7200 path_validated: _, +7201 } => Self::Server { server_config }, +7202 } +7203 } +7204} +7205 +7206/// Parameters to `Connection::new` specific to it being client-side or server-side +7207pub(crate) enum SideArgs { +7208 Client { +7209 token_store: Arc<dyn TokenStore>, +7210 server_name: String, +7211 }, +7212 Server { +7213 server_config: Arc<ServerConfig>, +7214 pref_addr_cid: Option<ConnectionId>, +7215 path_validated: bool, +7216 }, +7217} +7218 +7219impl SideArgs { +7220 pub(crate) fn pref_addr_cid(&self) -> Option<ConnectionId> { +7221 match *self { +7222 Self::Client { .. } => None, +7223 Self::Server { pref_addr_cid, .. } => pref_addr_cid, +7224 } +7225 } +7226 +7227 pub(crate) fn path_validated(&self) -> bool { +7228 match *self { +7229 Self::Client { .. } => true, +7230 Self::Server { path_validated, .. } => path_validated, +7231 } +7232 } +7233 +7234 pub(crate) fn side(&self) -> Side { +7235 match *self { +7236 Self::Client { .. } => Side::Client, +7237 Self::Server { .. } => Side::Server, +7238 } +7239 } +7240} +7241 +7242/// Reasons why a connection might be lost +7243#[derive(Debug, Error, Clone, PartialEq, Eq)] +7244pub enum ConnectionError { +7245 /// The peer doesn't implement any supported version +7246 #[error("peer doesn't implement any supported version")] +7247 VersionMismatch, +7248 /// The peer violated the QUIC specification as understood by this implementation +7249 #[error(transparent)] +7250 TransportError(#[from] TransportError), +7251 /// The peer's QUIC stack aborted the connection automatically +7252 #[error("aborted by peer: {0}")] +7253 ConnectionClosed(frame::ConnectionClose), +7254 /// The peer closed the connection +7255 #[error("closed by peer: {0}")] +7256 ApplicationClosed(frame::ApplicationClose), +7257 /// The peer is unable to continue processing this connection, usually due to having restarted +7258 #[error("reset by peer")] +7259 Reset, +7260 /// Communication with the peer has lapsed for longer than the negotiated idle timeout +7261 /// +7262 /// If neither side is sending keep-alives, a connection will time out after a long enough idle +7263 /// period even if the peer is still reachable. See also [`TransportConfig::max_idle_timeout()`] +7264 /// and [`TransportConfig::keep_alive_interval()`]. +7265 #[error("timed out")] +7266 TimedOut, +7267 /// The local application closed the connection +7268 #[error("closed")] +7269 LocallyClosed, +7270 /// The connection could not be created because not enough of the CID space is available +7271 /// +7272 /// Try using longer connection IDs. +7273 #[error("CIDs exhausted")] +7274 CidsExhausted, 7275} 7276 -7277/// Errors that might trigger a path being closed -7278// TODO(@divma): maybe needs to be reworked based on what we want to do with the public API -7279#[derive(Debug, Error, PartialEq, Eq, Clone, Copy)] -7280pub enum PathError { -7281 /// The extension was not negotiated with the peer -7282 #[error("multipath extension not negotiated")] -7283 MultipathNotNegotiated, -7284 /// Paths can only be opened client-side -7285 #[error("the server side may not open a path")] -7286 ServerSideNotAllowed, -7287 /// Current limits do not allow us to open more paths -7288 #[error("maximum number of concurrent paths reached")] -7289 MaxPathIdReached, -7290 /// No remote CIDs available to open a new path -7291 #[error("remoted CIDs exhausted")] -7292 RemoteCidsExhausted, -7293 /// Path could not be validated and will be abandoned -7294 #[error("path validation failed")] -7295 ValidationFailed, -7296 /// The remote address for the path is not supported by the endpoint -7297 #[error("invalid remote address")] -7298 InvalidRemoteAddress(SocketAddr), -7299} -7300 -7301/// Errors triggered when abandoning a path -7302#[derive(Debug, Error, Clone, Eq, PartialEq)] -7303pub enum ClosePathError { -7304 /// Multipath is not negotiated -7305 #[error("Multipath extension not negotiated")] -7306 MultipathNotNegotiated, -7307 /// The path is already closed or was never opened -7308 #[error("closed path")] -7309 ClosedPath, -7310 /// Cannot close the last remaining open path via the local API. -7311 /// -7312 /// Use [`Connection::close`] to end the connection instead. -7313 #[error("last open path")] -7314 LastOpenPath, -7315} -7316 -7317/// Error when the multipath extension was not negotiated, but attempted to be used. -7318#[derive(Debug, Error, Clone, Copy)] -7319#[error("Multipath extension not negotiated")] -7320pub struct MultipathNotNegotiated { -7321 _private: (), -7322} -7323 -7324/// Events of interest to the application -7325#[derive(Debug)] -7326pub enum Event { -7327 /// The connection's handshake data is ready -7328 HandshakeDataReady, -7329 /// The connection was successfully established -7330 Connected, -7331 /// The TLS handshake was confirmed -7332 HandshakeConfirmed, -7333 /// The connection was lost -7334 /// -7335 /// Emitted if the peer closes the connection or an error is encountered. -7336 ConnectionLost { -7337 /// Reason that the connection was closed -7338 reason: ConnectionError, -7339 }, -7340 /// Stream events -7341 Stream(StreamEvent), -7342 /// One or more application datagrams have been received -7343 DatagramReceived, -7344 /// One or more application datagrams have been sent after blocking -7345 DatagramsUnblocked, -7346 /// (Multi)Path events -7347 Path(PathEvent), -7348 /// n0's nat traversal events -7349 NatTraversal(n0_nat_traversal::Event), -7350} -7351 -7352impl From<PathEvent> for Event { -7353 fn from(source: PathEvent) -> Self { -7354 Self::Path(source) -7355 } -7356} -7357 -7358fn get_max_ack_delay(params: &TransportParameters) -> Duration { -7359 Duration::from_micros(params.max_ack_delay.0 * 1000) -7360} -7361 -7362/// Prevents overflow and improves behavior in extreme circumstances. -7363const MAX_BACKOFF_EXPONENT: u32 = 16; -7364 -7365/// The max interval between successive tail-loss probes. -7366/// -7367/// This is the "normal" value we use. -7368const MAX_PTO_INTERVAL: Duration = Duration::from_secs(2); -7369 -7370/// The idle time, below which we use the shorter [`MAX_PTO_FAST_INTERVAL`]. -7371const MIN_IDLE_FOR_FAST_PTO: Duration = Duration::from_secs(25); -7372 -7373/// The max interval between successive tail-loss probes with short idle times. -7374/// -7375/// If the path or connection idle time is less than [`MIN_IDLE_FOR_FAST_PTO`] then we use -7376/// this value to ensure we have plenty of retransmits before we reach the idle time. -7377const MAX_PTO_FAST_INTERVAL: Duration = Duration::from_secs(1); -7378 -7379/// The RTT threshold above which we cap the PTO interval to 1.5 * smoothed_rtt -7380/// -7381/// This is RTT time above which 1.5 * RTT > [`MAX_PTO_INTERVAL`], for these links we want -7382/// to extend the interval between tail-loss probes to not fill the entire pipe with them. -7383const SLOW_RTT_THRESHOLD: Duration = -7384 Duration::from_millis((MAX_PTO_INTERVAL.as_millis() as u64 * 2) / 3); -7385 -7386/// Minimal remaining size to allow packet coalescing, excluding cryptographic tag -7387/// -7388/// This must be at least as large as the header for a well-formed empty packet to be coalesced, -7389/// plus some space for frames. We only care about handshake headers because short header packets -7390/// necessarily have smaller headers, and initial packets are only ever the first packet in a -7391/// datagram (because we coalesce in ascending packet space order and the only reason to split a -7392/// packet is when packet space changes). -7393const MIN_PACKET_SPACE: usize = MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE + 32; +7277impl From<Close> for ConnectionError { +7278 fn from(x: Close) -> Self { +7279 match x { +7280 Close::Connection(reason) => Self::ConnectionClosed(reason), +7281 Close::Application(reason) => Self::ApplicationClosed(reason), +7282 } +7283 } +7284} +7285 +7286// For compatibility with API consumers +7287impl From<ConnectionError> for io::Error { +7288 fn from(x: ConnectionError) -> Self { +7289 use ConnectionError::*; +7290 let kind = match x { +7291 TimedOut => io::ErrorKind::TimedOut, +7292 Reset => io::ErrorKind::ConnectionReset, +7293 ApplicationClosed(_) | ConnectionClosed(_) => io::ErrorKind::ConnectionAborted, +7294 TransportError(_) | VersionMismatch | LocallyClosed | CidsExhausted => { +7295 io::ErrorKind::Other +7296 } +7297 }; +7298 Self::new(kind, x) +7299 } +7300} +7301 +7302/// Errors that might trigger a path being closed +7303// TODO(@divma): maybe needs to be reworked based on what we want to do with the public API +7304#[derive(Debug, Error, PartialEq, Eq, Clone, Copy)] +7305pub enum PathError { +7306 /// The extension was not negotiated with the peer +7307 #[error("multipath extension not negotiated")] +7308 MultipathNotNegotiated, +7309 /// Paths can only be opened client-side +7310 #[error("the server side may not open a path")] +7311 ServerSideNotAllowed, +7312 /// Current limits do not allow us to open more paths +7313 #[error("maximum number of concurrent paths reached")] +7314 MaxPathIdReached, +7315 /// No remote CIDs available to open a new path +7316 #[error("remoted CIDs exhausted")] +7317 RemoteCidsExhausted, +7318 /// Path could not be validated and will be abandoned +7319 #[error("path validation failed")] +7320 ValidationFailed, +7321 /// The remote address for the path is not supported by the endpoint +7322 #[error("invalid remote address")] +7323 InvalidRemoteAddress(SocketAddr), +7324} +7325 +7326/// Errors triggered when abandoning a path +7327#[derive(Debug, Error, Clone, Eq, PartialEq)] +7328pub enum ClosePathError { +7329 /// Multipath is not negotiated +7330 #[error("Multipath extension not negotiated")] +7331 MultipathNotNegotiated, +7332 /// The path is already closed or was never opened +7333 #[error("closed path")] +7334 ClosedPath, +7335 /// Cannot close the last remaining open path via the local API. +7336 /// +7337 /// Use [`Connection::close`] to end the connection instead. +7338 #[error("last open path")] +7339 LastOpenPath, +7340} +7341 +7342/// Error when the multipath extension was not negotiated, but attempted to be used. +7343#[derive(Debug, Error, Clone, Copy)] +7344#[error("Multipath extension not negotiated")] +7345pub struct MultipathNotNegotiated { +7346 _private: (), +7347} +7348 +7349/// Events of interest to the application +7350#[derive(Debug)] +7351pub enum Event { +7352 /// The connection's handshake data is ready +7353 HandshakeDataReady, +7354 /// The connection was successfully established +7355 Connected, +7356 /// The TLS handshake was confirmed +7357 HandshakeConfirmed, +7358 /// The connection was lost +7359 /// +7360 /// Emitted if the peer closes the connection or an error is encountered. +7361 ConnectionLost { +7362 /// Reason that the connection was closed +7363 reason: ConnectionError, +7364 }, +7365 /// Stream events +7366 Stream(StreamEvent), +7367 /// One or more application datagrams have been received +7368 DatagramReceived, +7369 /// One or more application datagrams have been sent after blocking +7370 DatagramsUnblocked, +7371 /// (Multi)Path events +7372 Path(PathEvent), +7373 /// n0's nat traversal events +7374 NatTraversal(n0_nat_traversal::Event), +7375} +7376 +7377impl From<PathEvent> for Event { +7378 fn from(source: PathEvent) -> Self { +7379 Self::Path(source) +7380 } +7381} +7382 +7383fn get_max_ack_delay(params: &TransportParameters) -> Duration { +7384 Duration::from_micros(params.max_ack_delay.0 * 1000) +7385} +7386 +7387/// Prevents overflow and improves behavior in extreme circumstances. +7388const MAX_BACKOFF_EXPONENT: u32 = 16; +7389 +7390/// The max interval between successive tail-loss probes. +7391/// +7392/// This is the "normal" value we use. +7393const MAX_PTO_INTERVAL: Duration = Duration::from_secs(2); 7394 -7395/// Largest amount of space that could be occupied by a Handshake or 0-RTT packet's header -7396/// -7397/// Excludes packet-type-specific fields such as packet number or Initial token -7398// https://www.rfc-editor.org/rfc/rfc9000.html#name-0-rtt: flags + version + dcid len + dcid + -7399// scid len + scid + length + pn -7400const MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE: usize = -7401 1 + 4 + 1 + MAX_CID_SIZE + 1 + MAX_CID_SIZE + VarInt::from_u32(u16::MAX as u32).size() + 4; -7402 -7403#[derive(Default)] -7404struct SentFrames { -7405 retransmits: ThinRetransmits, -7406 /// The packet number of the largest acknowledged packet for each path -7407 largest_acked: FxHashMap<PathId, u64>, -7408 stream_frames: StreamMetaVec, -7409 /// Whether the packet contains non-retransmittable frames (like datagrams) -7410 non_retransmits: bool, -7411 /// If the datagram containing these frames should be padded to the min MTU -7412 requires_padding: bool, -7413} -7414 -7415impl SentFrames { -7416 /// Returns whether the packet contains only ACKs -7417 fn is_ack_only(&self, streams: &StreamsState) -> bool { -7418 !self.largest_acked.is_empty() -7419 && !self.non_retransmits -7420 && self.stream_frames.is_empty() -7421 && self.retransmits.is_empty(streams) -7422 } -7423 -7424 fn retransmits_mut(&mut self) -> &mut Retransmits { -7425 self.retransmits.get_or_create() -7426 } +7395/// The idle time, below which we use the shorter [`MAX_PTO_FAST_INTERVAL`]. +7396const MIN_IDLE_FOR_FAST_PTO: Duration = Duration::from_secs(25); +7397 +7398/// The max interval between successive tail-loss probes with short idle times. +7399/// +7400/// If the path or connection idle time is less than [`MIN_IDLE_FOR_FAST_PTO`] then we use +7401/// this value to ensure we have plenty of retransmits before we reach the idle time. +7402const MAX_PTO_FAST_INTERVAL: Duration = Duration::from_secs(1); +7403 +7404/// The RTT threshold above which we cap the PTO interval to 1.5 * smoothed_rtt +7405/// +7406/// This is RTT time above which 1.5 * RTT > [`MAX_PTO_INTERVAL`], for these links we want +7407/// to extend the interval between tail-loss probes to not fill the entire pipe with them. +7408const SLOW_RTT_THRESHOLD: Duration = +7409 Duration::from_millis((MAX_PTO_INTERVAL.as_millis() as u64 * 2) / 3); +7410 +7411/// Minimal remaining size to allow packet coalescing, excluding cryptographic tag +7412/// +7413/// This must be at least as large as the header for a well-formed empty packet to be coalesced, +7414/// plus some space for frames. We only care about handshake headers because short header packets +7415/// necessarily have smaller headers, and initial packets are only ever the first packet in a +7416/// datagram (because we coalesce in ascending packet space order and the only reason to split a +7417/// packet is when packet space changes). +7418const MIN_PACKET_SPACE: usize = MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE + 32; +7419 +7420/// Largest amount of space that could be occupied by a Handshake or 0-RTT packet's header +7421/// +7422/// Excludes packet-type-specific fields such as packet number or Initial token +7423// https://www.rfc-editor.org/rfc/rfc9000.html#name-0-rtt: flags + version + dcid len + dcid + +7424// scid len + scid + length + pn +7425const MAX_HANDSHAKE_OR_0RTT_HEADER_SIZE: usize = +7426 1 + 4 + 1 + MAX_CID_SIZE + 1 + MAX_CID_SIZE + VarInt::from_u32(u16::MAX as u32).size() + 4; 7427 -7428 fn record_sent_frame(&mut self, frame: frame::EncodableFrame<'_>) { -7429 use frame::EncodableFrame::*; -7430 match frame { -7431 PathAck(path_ack_encoder) => { -7432 if let Some(max) = path_ack_encoder.ranges.max() { -7433 self.largest_acked.insert(path_ack_encoder.path_id, max); -7434 } -7435 } -7436 Ack(ack_encoder) => { -7437 if let Some(max) = ack_encoder.ranges.max() { -7438 self.largest_acked.insert(PathId::ZERO, max); -7439 } -7440 } -7441 Close(_) => { /* non retransmittable, but after this we don't really care */ } -7442 PathResponse(_) => self.non_retransmits = true, -7443 HandshakeDone(_) => self.retransmits_mut().handshake_done = true, -7444 ReachOut(frame::ReachOut { round, ip, port }) => { -7445 let (recorded_round, reach_outs) = self -7446 .retransmits_mut() -7447 .reach_out -7448 .get_or_insert_with(|| (round, FxHashSet::default())); -7449 // Only record reach outs for the current round or a newer than the recorded one. -7450 if *recorded_round == round { -7451 // Same round, simply append. -7452 reach_outs.insert((ip, port)); -7453 } else if *recorded_round < round { -7454 // New round. -7455 *recorded_round = round; -7456 reach_outs.drain(); -7457 reach_outs.insert((ip, port)); -7458 } else { -7459 // ignore old reach out that was sent -7460 } -7461 } -7462 -7463 ObservedAddr(_) => self.retransmits_mut().observed_addr = true, -7464 Ping(_) => self.non_retransmits = true, -7465 ImmediateAck(_) => self.non_retransmits = true, -7466 AckFrequency(_) => self.retransmits_mut().ack_frequency = true, -7467 PathChallenge(_) => self.non_retransmits = true, -7468 Crypto(crypto) => self.retransmits_mut().crypto.push_back(crypto), -7469 PathAbandon(path_abandon) => { -7470 self.retransmits_mut() -7471 .path_abandon -7472 .entry(path_abandon.path_id) -7473 .or_insert(path_abandon.error_code); -7474 } -7475 PathStatusAvailable(frame::PathStatusAvailable { path_id, .. }) -7476 | PathStatusBackup(frame::PathStatusBackup { path_id, .. }) => { -7477 self.retransmits_mut().path_status.insert(path_id); -7478 } -7479 MaxPathId(_) => self.retransmits_mut().max_path_id = true, -7480 PathsBlocked(_) => self.retransmits_mut().paths_blocked = true, -7481 PathCidsBlocked(path_cids_blocked) => { -7482 self.retransmits_mut() -7483 .path_cids_blocked -7484 .insert(path_cids_blocked.path_id); -7485 } -7486 ResetStream(reset) => self -7487 .retransmits_mut() -7488 .reset_stream -7489 .push((reset.id, reset.error_code)), -7490 StopSending(stop_sending) => self.retransmits_mut().stop_sending.push(stop_sending), -7491 NewConnectionId(new_cid) => self.retransmits_mut().new_cids.push(new_cid.issued()), -7492 RetireConnectionId(retire_cid) => self -7493 .retransmits_mut() -7494 .retire_cids -7495 .push((retire_cid.path_id.unwrap_or_default(), retire_cid.sequence)), -7496 Datagram(_) => self.non_retransmits = true, -7497 NewToken(_) => {} -7498 AddAddress(add_address) => { -7499 self.retransmits_mut().add_address.insert(add_address); -7500 } -7501 RemoveAddress(remove_address) => { -7502 self.retransmits_mut().remove_address.insert(remove_address); +7428#[derive(Default)] +7429struct SentFrames { +7430 retransmits: ThinRetransmits, +7431 /// The packet number of the largest acknowledged packet for each path +7432 largest_acked: FxHashMap<PathId, u64>, +7433 stream_frames: StreamMetaVec, +7434 /// Whether the packet contains non-retransmittable frames (like datagrams) +7435 non_retransmits: bool, +7436 /// If the datagram containing these frames should be padded to the min MTU +7437 requires_padding: bool, +7438} +7439 +7440impl SentFrames { +7441 /// Returns whether the packet contains only ACKs +7442 fn is_ack_only(&self, streams: &StreamsState) -> bool { +7443 !self.largest_acked.is_empty() +7444 && !self.non_retransmits +7445 && self.stream_frames.is_empty() +7446 && self.retransmits.is_empty(streams) +7447 } +7448 +7449 fn retransmits_mut(&mut self) -> &mut Retransmits { +7450 self.retransmits.get_or_create() +7451 } +7452 +7453 fn record_sent_frame(&mut self, frame: frame::EncodableFrame<'_>) { +7454 use frame::EncodableFrame::*; +7455 match frame { +7456 PathAck(path_ack_encoder) => { +7457 if let Some(max) = path_ack_encoder.ranges.max() { +7458 self.largest_acked.insert(path_ack_encoder.path_id, max); +7459 } +7460 } +7461 Ack(ack_encoder) => { +7462 if let Some(max) = ack_encoder.ranges.max() { +7463 self.largest_acked.insert(PathId::ZERO, max); +7464 } +7465 } +7466 Close(_) => { /* non retransmittable, but after this we don't really care */ } +7467 PathResponse(_) => self.non_retransmits = true, +7468 HandshakeDone(_) => self.retransmits_mut().handshake_done = true, +7469 ReachOut(frame::ReachOut { round, ip, port }) => { +7470 let (recorded_round, reach_outs) = self +7471 .retransmits_mut() +7472 .reach_out +7473 .get_or_insert_with(|| (round, FxHashSet::default())); +7474 // Only record reach outs for the current round or a newer than the recorded one. +7475 if *recorded_round == round { +7476 // Same round, simply append. +7477 reach_outs.insert((ip, port)); +7478 } else if *recorded_round < round { +7479 // New round. +7480 *recorded_round = round; +7481 reach_outs.drain(); +7482 reach_outs.insert((ip, port)); +7483 } else { +7484 // ignore old reach out that was sent +7485 } +7486 } +7487 +7488 ObservedAddr(_) => self.retransmits_mut().observed_addr = true, +7489 Ping(_) => self.non_retransmits = true, +7490 ImmediateAck(_) => self.non_retransmits = true, +7491 AckFrequency(_) => self.retransmits_mut().ack_frequency = true, +7492 PathChallenge(_) => self.non_retransmits = true, +7493 Crypto(crypto) => self.retransmits_mut().crypto.push_back(crypto), +7494 PathAbandon(path_abandon) => { +7495 self.retransmits_mut() +7496 .path_abandon +7497 .entry(path_abandon.path_id) +7498 .or_insert(path_abandon.error_code); +7499 } +7500 PathStatusAvailable(frame::PathStatusAvailable { path_id, .. }) +7501 | PathStatusBackup(frame::PathStatusBackup { path_id, .. }) => { +7502 self.retransmits_mut().path_status.insert(path_id); 7503 } -7504 StreamMeta(stream_meta_encoder) => self.stream_frames.push(stream_meta_encoder.meta), -7505 MaxData(_) => self.retransmits_mut().max_data = true, -7506 MaxStreamData(max) => { -7507 self.retransmits_mut().max_stream_data.insert(max.id); -7508 } -7509 MaxStreams(max_streams) => { -7510 self.retransmits_mut().max_stream_id[max_streams.dir as usize] = true -7511 } -7512 } -7513 } -7514} -7515 -7516/// Compute the negotiated idle timeout based on local and remote max_idle_timeout transport parameters. -7517/// -7518/// According to the definition of max_idle_timeout, a value of `0` means the timeout is disabled; see <https://www.rfc-editor.org/rfc/rfc9000#section-18.2-4.4.1.> -7519/// -7520/// According to the negotiation procedure, either the minimum of the timeouts or one specified is used as the negotiated value; see <https://www.rfc-editor.org/rfc/rfc9000#section-10.1-2.> -7521/// -7522/// Returns the negotiated idle timeout as a `Duration`, or `None` when both endpoints have opted out of idle timeout. -7523fn negotiate_max_idle_timeout(x: Option<VarInt>, y: Option<VarInt>) -> Option<Duration> { -7524 match (x, y) { -7525 (Some(VarInt(0)) | None, Some(VarInt(0)) | None) => None, -7526 (Some(VarInt(0)) | None, Some(y)) => Some(Duration::from_millis(y.0)), -7527 (Some(x), Some(VarInt(0)) | None) => Some(Duration::from_millis(x.0)), -7528 (Some(x), Some(y)) => Some(Duration::from_millis(cmp::min(x, y).0)), -7529 } -7530} -7531 -7532#[cfg(test)] -7533mod tests { -7534 use super::*; -7535 -7536 #[test] -7537 fn negotiate_max_idle_timeout_commutative() { -7538 let test_params = [ -7539 (None, None, None), -7540 (None, Some(VarInt(0)), None), -7541 (None, Some(VarInt(2)), Some(Duration::from_millis(2))), -7542 (Some(VarInt(0)), Some(VarInt(0)), None), -7543 ( -7544 Some(VarInt(2)), -7545 Some(VarInt(0)), -7546 Some(Duration::from_millis(2)), -7547 ), -7548 ( -7549 Some(VarInt(1)), -7550 Some(VarInt(4)), -7551 Some(Duration::from_millis(1)), -7552 ), -7553 ]; -7554 -7555 for (left, right, result) in test_params { -7556 assert_eq!(negotiate_max_idle_timeout(left, right), result); -7557 assert_eq!(negotiate_max_idle_timeout(right, left), result); -7558 } -7559 } -7560}

\ No newline at end of file +7504 MaxPathId(_) => self.retransmits_mut().max_path_id = true, +7505 PathsBlocked(_) => self.retransmits_mut().paths_blocked = true, +7506 PathCidsBlocked(path_cids_blocked) => { +7507 self.retransmits_mut() +7508 .path_cids_blocked +7509 .insert(path_cids_blocked.path_id); +7510 } +7511 ResetStream(reset) => self +7512 .retransmits_mut() +7513 .reset_stream +7514 .push((reset.id, reset.error_code)), +7515 StopSending(stop_sending) => self.retransmits_mut().stop_sending.push(stop_sending), +7516 NewConnectionId(new_cid) => self.retransmits_mut().new_cids.push(new_cid.issued()), +7517 RetireConnectionId(retire_cid) => self +7518 .retransmits_mut() +7519 .retire_cids +7520 .push((retire_cid.path_id.unwrap_or_default(), retire_cid.sequence)), +7521 Datagram(_) => self.non_retransmits = true, +7522 NewToken(_) => {} +7523 AddAddress(add_address) => { +7524 self.retransmits_mut().add_address.insert(add_address); +7525 } +7526 RemoveAddress(remove_address) => { +7527 self.retransmits_mut().remove_address.insert(remove_address); +7528 } +7529 StreamMeta(stream_meta_encoder) => self.stream_frames.push(stream_meta_encoder.meta), +7530 MaxData(_) => self.retransmits_mut().max_data = true, +7531 MaxStreamData(max) => { +7532 self.retransmits_mut().max_stream_data.insert(max.id); +7533 } +7534 MaxStreams(max_streams) => { +7535 self.retransmits_mut().max_stream_id[max_streams.dir as usize] = true +7536 } +7537 } +7538 } +7539} +7540 +7541/// Compute the negotiated idle timeout based on local and remote max_idle_timeout transport parameters. +7542/// +7543/// According to the definition of max_idle_timeout, a value of `0` means the timeout is disabled; see <https://www.rfc-editor.org/rfc/rfc9000#section-18.2-4.4.1.> +7544/// +7545/// According to the negotiation procedure, either the minimum of the timeouts or one specified is used as the negotiated value; see <https://www.rfc-editor.org/rfc/rfc9000#section-10.1-2.> +7546/// +7547/// Returns the negotiated idle timeout as a `Duration`, or `None` when both endpoints have opted out of idle timeout. +7548fn negotiate_max_idle_timeout(x: Option<VarInt>, y: Option<VarInt>) -> Option<Duration> { +7549 match (x, y) { +7550 (Some(VarInt(0)) | None, Some(VarInt(0)) | None) => None, +7551 (Some(VarInt(0)) | None, Some(y)) => Some(Duration::from_millis(y.0)), +7552 (Some(x), Some(VarInt(0)) | None) => Some(Duration::from_millis(x.0)), +7553 (Some(x), Some(y)) => Some(Duration::from_millis(cmp::min(x, y).0)), +7554 } +7555} +7556 +7557#[cfg(test)] +7558mod tests { +7559 use super::*; +7560 +7561 #[test] +7562 fn negotiate_max_idle_timeout_commutative() { +7563 let test_params = [ +7564 (None, None, None), +7565 (None, Some(VarInt(0)), None), +7566 (None, Some(VarInt(2)), Some(Duration::from_millis(2))), +7567 (Some(VarInt(0)), Some(VarInt(0)), None), +7568 ( +7569 Some(VarInt(2)), +7570 Some(VarInt(0)), +7571 Some(Duration::from_millis(2)), +7572 ), +7573 ( +7574 Some(VarInt(1)), +7575 Some(VarInt(4)), +7576 Some(Duration::from_millis(1)), +7577 ), +7578 ]; +7579 +7580 for (left, right, result) in test_params { +7581 assert_eq!(negotiate_max_idle_timeout(left, right), result); +7582 assert_eq!(negotiate_max_idle_timeout(right, left), result); +7583 } +7584 } +7585}

\ No newline at end of file diff --git a/pr/561/docs/src/noq_proto/connection/stats.rs.html b/pr/561/docs/src/noq_proto/connection/stats.rs.html index 4ff7c4999..1d8aa1a7f 100644 --- a/pr/561/docs/src/noq_proto/connection/stats.rs.html +++ b/pr/561/docs/src/noq_proto/connection/stats.rs.html @@ -227,9 +227,9 @@ 227 pub cwnd: u64, 228 /// Congestion events on the connection. 229 pub congestion_events: u64, -230 /// The amount of packets lost on this path. +230 /// The number of packets lost on this path. 231 pub lost_packets: u64, -232 /// The amount of bytes lost on this path. +232 /// The number of bytes lost on this path. 233 pub lost_bytes: u64, 234 /// The number of PLPMTUD probe packets sent on this path. 235 /// @@ -252,96 +252,112 @@ 252#[derive(Debug, Default, Clone)] 253#[non_exhaustive] 254pub struct ConnectionStats { -255 /// Statistics about UDP datagrams transmitted on a connection. +255 /// Statistics about UDP datagrams transmitted on the connection. 256 pub udp_tx: UdpStats, -257 /// Statistics about UDP datagrams received on a connection. +257 /// Statistics about UDP datagrams received on the connection. 258 pub udp_rx: UdpStats, -259 /// Statistics about frames transmitted on a connection. +259 /// Statistics about frames transmitted on the connection. 260 pub frame_tx: FrameStats, -261 /// Statistics about frames received on a connection. +261 /// Statistics about frames received on the connection. 262 pub frame_rx: FrameStats, -263} -264 -265impl std::ops::Add<PathStats> for ConnectionStats { -266 type Output = Self; -267 -268 fn add(self, rhs: PathStats) -> Self::Output { -269 // Be aware that Connection::stats() relies on the fact this function ignores the -270 // rtt, cwnd and current_mtu fields. -271 let PathStats { -272 rtt: _, -273 udp_tx, -274 udp_rx, -275 frame_tx, -276 frame_rx, -277 cwnd: _, -278 congestion_events: _, -279 lost_packets: _, -280 lost_bytes: _, -281 sent_plpmtud_probes: _, -282 lost_plpmtud_probes: _, -283 black_holes_detected: _, -284 current_mtu: _, -285 } = rhs; -286 Self { -287 udp_tx: self.udp_tx + udp_tx, -288 udp_rx: self.udp_rx + udp_rx, -289 frame_tx: self.frame_tx + frame_tx, -290 frame_rx: self.frame_rx + frame_rx, -291 } -292 } -293} -294 -295impl std::ops::AddAssign<PathStats> for ConnectionStats { -296 fn add_assign(&mut self, rhs: PathStats) { -297 // Be aware that Connection::stats() relies on the fact this function ignores the -298 // rtt, cwnd and current_mtu fields. -299 let PathStats { -300 rtt: _, -301 udp_tx, -302 udp_rx, -303 frame_tx, -304 frame_rx, -305 cwnd: _, -306 congestion_events: _, -307 lost_packets: _, -308 lost_bytes: _, -309 sent_plpmtud_probes: _, -310 lost_plpmtud_probes: _, -311 black_holes_detected: _, -312 current_mtu: _, -313 } = rhs; -314 self.udp_tx += udp_tx; -315 self.udp_rx += udp_rx; -316 self.frame_tx += frame_tx; -317 self.frame_rx += frame_rx; -318 } -319} -320 -321/// Helper to make [`PathStats`] infallibly available. -322/// -323/// This helper also helps with borrowing issues compared to having the [`Self::for_path`] -324/// function as a helper directly on [`Connection`]. -325/// -326/// [`Connection`]: super::Connection -327#[derive(Debug, Default)] -328pub(super) struct PathStatsMap(FxHashMap<PathId, PathStats>); -329 -330impl PathStatsMap { -331 /// Returns the [`PathStats`] for the path. -332 pub(super) fn for_path(&mut self, path_id: PathId) -> &mut PathStats { -333 self.0.entry(path_id).or_default() +263 /// The number of packets lost on the connection. +264 pub lost_packets: u64, +265 /// The number of bytes lost on the connection. +266 pub lost_bytes: u64, +267} +268 +269impl std::ops::Add<PathStats> for ConnectionStats { +270 type Output = Self; +271 +272 fn add(self, rhs: PathStats) -> Self::Output { +273 // Be aware that Connection::stats() relies on the fact this function ignores the +274 // rtt, cwnd and current_mtu fields. +275 let PathStats { +276 rtt: _, +277 udp_tx, +278 udp_rx, +279 frame_tx, +280 frame_rx, +281 cwnd: _, +282 congestion_events: _, +283 lost_packets, +284 lost_bytes, +285 sent_plpmtud_probes: _, +286 lost_plpmtud_probes: _, +287 black_holes_detected: _, +288 current_mtu: _, +289 } = rhs; +290 Self { +291 udp_tx: self.udp_tx + udp_tx, +292 udp_rx: self.udp_rx + udp_rx, +293 frame_tx: self.frame_tx + frame_tx, +294 frame_rx: self.frame_rx + frame_rx, +295 lost_packets: self.lost_packets + lost_packets, +296 lost_bytes: self.lost_bytes + lost_bytes, +297 } +298 } +299} +300 +301impl std::ops::AddAssign<PathStats> for ConnectionStats { +302 fn add_assign(&mut self, rhs: PathStats) { +303 // Be aware that Connection::stats() relies on the fact this function ignores the +304 // rtt, cwnd and current_mtu fields. +305 let PathStats { +306 rtt: _, +307 udp_tx: path_udp_tx, +308 udp_rx: path_udp_rx, +309 frame_tx: path_frame_tx, +310 frame_rx: path_frame_rx, +311 cwnd: _, +312 congestion_events: _, +313 lost_packets: path_lost_packets, +314 lost_bytes: path_lost_bytes, +315 sent_plpmtud_probes: _, +316 lost_plpmtud_probes: _, +317 black_holes_detected: _, +318 current_mtu: _, +319 } = rhs; +320 let Self { +321 udp_tx, +322 udp_rx, +323 frame_tx, +324 frame_rx, +325 lost_packets, +326 lost_bytes, +327 } = self; +328 *udp_tx += path_udp_tx; +329 *udp_rx += path_udp_rx; +330 *frame_tx += path_frame_tx; +331 *frame_rx += path_frame_rx; +332 *lost_packets += path_lost_packets; +333 *lost_bytes += path_lost_bytes; 334 } -335 -336 /// An iterator over all contained [`PathStats`]. -337 pub(super) fn iter_stats(&self) -> impl Iterator<Item = &PathStats> { -338 self.0.values() -339 } -340 -341 /// Removes the stats for a given path. -342 /// -343 /// Only do this once you are discarding the path. -344 pub(super) fn discard(&mut self, path_id: &PathId) -> PathStats { -345 self.0.remove(path_id).unwrap_or_default() -346 } -347} \ No newline at end of file +335} +336 +337/// Helper to make [`PathStats`] infallibly available. +338/// +339/// This helper also helps with borrowing issues compared to having the [`Self::for_path`] +340/// function as a helper directly on [`Connection`]. +341/// +342/// [`Connection`]: super::Connection +343#[derive(Debug, Default)] +344pub(super) struct PathStatsMap(FxHashMap<PathId, PathStats>); +345 +346impl PathStatsMap { +347 /// Returns the [`PathStats`] for the path. +348 pub(super) fn for_path(&mut self, path_id: PathId) -> &mut PathStats { +349 self.0.entry(path_id).or_default() +350 } +351 +352 /// An iterator over all contained [`PathStats`]. +353 pub(super) fn iter_stats(&self) -> impl Iterator<Item = &PathStats> { +354 self.0.values() +355 } +356 +357 /// Removes the stats for a given path. +358 /// +359 /// Only do this once you are discarding the path. +360 pub(super) fn discard(&mut self, path_id: &PathId) -> PathStats { +361 self.0.remove(path_id).unwrap_or_default() +362 } +363} \ No newline at end of file