,
+ isActive: Boolean,
+ formatValue: (T) -> String,
+ onValueChanged: (T) -> Unit,
+ onClear: (() -> Unit)?,
+) {
+ Item(title, isActive = isActive, onClear = onClear) {
+ DropdownMenuButton(
+ text = {
+ Text(
+ text = formatValue(value),
+ style = MaterialTheme.typography.labelMedium
+ )
+ }
+ ) { dismiss ->
+ for (aValue in values) {
+ DropdownMenuItem(
+ text = { Text(formatValue(aValue)) },
+ onClick = {
+ dismiss()
+ onValueChanged(aValue)
+ }
+ )
+ }
+ }
+ }
+}
+
+@Composable
+private fun Item(
+ title: String,
+ isActive: Boolean = true,
+ onClick: (() -> Unit)? = null,
+ onClear: (() -> Unit)? = null,
+ content: @Composable () -> Unit,
+) {
+ ListItem(
+ modifier =
+ if (onClick != null) {
+ Modifier.clickable(onClick = onClick)
+ } else {
+ Modifier
+ },
+ headlineContent = {
+ val alpha = if (isActive) 1.0f else 0.5f
+ Text(title, modifier = Modifier.alpha(alpha))
+ },
+ trailingContent = {
+ Row {
+ content()
+
+ IconButton(onClick = onClear ?: {}, enabled = onClear != null) {
+ Icon(
+ Icons.AutoMirrored.Filled.Backspace,
+ contentDescription = "Clear"
+ )
+ }
+ }
+ }
+ )
+}
diff --git a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/preferences/PreferencesManager.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/preferences/PreferencesManager.kt
similarity index 66%
rename from readium/navigators/demo/src/main/java/org/readium/navigator/demo/preferences/PreferencesManager.kt
rename to demos/navigator/src/main/java/org/readium/demo/navigator/preferences/PreferencesManager.kt
index da7d10bf28..25070d40b4 100644
--- a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/preferences/PreferencesManager.kt
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/preferences/PreferencesManager.kt
@@ -4,16 +4,19 @@
* available in the top-level LICENSE file of the project.
*/
-package org.readium.navigator.demo.preferences
+@file:OptIn(ExperimentalReadiumApi::class)
+
+package org.readium.demo.navigator.preferences
import kotlinx.coroutines.flow.MutableStateFlow
-import org.readium.r2.navigator.preferences.Configurable
+import org.readium.navigator.common.Preferences
+import org.readium.r2.shared.ExperimentalReadiumApi
/**
* Trivial user preferences manager. You can add persistence.
*/
-class PreferencesManager>(
- initialPreferences: P
+class PreferencesManager
>(
+ initialPreferences: P,
) {
private val preferencesMutable: MutableStateFlow
=
MutableStateFlow(initialPreferences)
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/preferences/UserPreferences.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/preferences/UserPreferences.kt
new file mode 100644
index 0000000000..6d458a9072
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/preferences/UserPreferences.kt
@@ -0,0 +1,492 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+@file:OptIn(ExperimentalReadiumApi::class)
+
+package org.readium.demo.navigator.preferences
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Button
+import androidx.compose.material3.HorizontalDivider
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import org.readium.demo.navigator.reader.LITERATA
+import org.readium.navigator.common.Preferences
+import org.readium.navigator.common.PreferencesEditor
+import org.readium.navigator.common.Settings
+import org.readium.navigator.web.fixedlayout.preferences.FixedWebPreferencesEditor
+import org.readium.navigator.web.reflowable.preferences.ReflowableWebPreferencesEditor
+import org.readium.r2.navigator.preferences.Axis
+import org.readium.r2.navigator.preferences.Color
+import org.readium.r2.navigator.preferences.EnumPreference
+import org.readium.r2.navigator.preferences.Fit
+import org.readium.r2.navigator.preferences.FontFamily
+import org.readium.r2.navigator.preferences.ImageFilter
+import org.readium.r2.navigator.preferences.OptionalRangePreference
+import org.readium.r2.navigator.preferences.Preference
+import org.readium.r2.navigator.preferences.RangePreference
+import org.readium.r2.navigator.preferences.ReadingProgression
+import org.readium.r2.navigator.preferences.TextAlign as ReadiumTextAlign
+import org.readium.r2.navigator.preferences.withSupportedValues
+import org.readium.r2.shared.ExperimentalReadiumApi
+import org.readium.r2.shared.util.Language
+
+/**
+ * Stateful user settings component.
+ */
+
+@Composable
+fun
, S : Settings, E : PreferencesEditor
> UserPreferences(
+ editor: E,
+ title: String,
+) {
+ val scrollState = rememberScrollState()
+
+ Column(
+ modifier = Modifier
+ .verticalScroll(scrollState)
+ .padding(vertical = 24.dp)
+ ) {
+ Text(
+ text = title,
+ textAlign = TextAlign.Center,
+ style = MaterialTheme.typography.headlineSmall,
+ color = MaterialTheme.colorScheme.onSurface,
+ modifier = Modifier
+ .fillMaxWidth()
+ )
+
+ Row(
+ modifier = Modifier
+ .padding(16.dp)
+ .align(Alignment.End),
+ horizontalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+ Button(
+ onClick = { editor.clear() }
+ ) {
+ Text("Reset")
+ }
+ }
+
+ Divider()
+
+ when (editor) {
+ is FixedWebPreferencesEditor ->
+ FixedLayoutUserPreferences(
+ readingProgression = editor.readingProgression,
+ fit = editor.fit,
+ spreads = editor.spreads
+ )
+ is ReflowableWebPreferencesEditor ->
+ ReflowableUserPreferences(
+ backgroundColor = editor.backgroundColor,
+ columnCount = editor.columnCount,
+ fontFamily = editor.fontFamily,
+ fontSize = editor.fontSize,
+ fontWeight = editor.fontWeight,
+ horizontalMargins = editor.minMargins,
+ hyphens = editor.hyphens,
+ imageFilter = editor.imageFilter,
+ language = editor.language,
+ letterSpacing = editor.letterSpacing,
+ ligatures = editor.ligatures,
+ lineHeight = editor.lineHeight,
+ linkColor = editor.linkColor,
+ maximalLineLength = editor.maximalLineLength,
+ minimalLineLength = editor.minimalLineLength,
+ optimalLineLength = editor.optimalLineLength,
+ overridePublisherColors = editor.overridePublisherColors,
+ paragraphIndent = editor.paragraphIndent,
+ paragraphSpacing = editor.paragraphSpacing,
+ readingProgression = editor.readingProgression,
+ scroll = editor.scroll,
+ textAlign = editor.textAlign,
+ textColor = editor.textColor,
+ textNormalization = editor.textNormalization,
+ verticalText = editor.verticalText,
+ visitedColor = editor.visitedColor,
+ wordSpacing = editor.wordSpacing
+ )
+ }
+ }
+}
+
+/**
+ * User preferences for a publication with a fixed layout, such as fixed-layout EPUB, PDF or comic book.
+ */
+@Composable
+private fun FixedLayoutUserPreferences(
+ readingProgression: EnumPreference? = null,
+ scrollAxis: EnumPreference? = null,
+ fit: EnumPreference? = null,
+ spreads: Preference? = null,
+ offsetFirstPage: Preference? = null,
+ pageSpacing: RangePreference? = null,
+) {
+ if (readingProgression != null) {
+ ButtonGroupItem(
+ title = "Reading progression",
+ preference = readingProgression,
+ formatValue = { it.name }
+ )
+
+ Divider()
+ }
+
+ if (scrollAxis != null) {
+ ButtonGroupItem(
+ title = "Scroll axis",
+ preference = scrollAxis
+ ) { value ->
+ when (value) {
+ Axis.HORIZONTAL -> "Horizontal"
+ Axis.VERTICAL -> "Vertical"
+ }
+ }
+ }
+
+ if (spreads != null) {
+ SwitchItem(
+ title = "Spreads",
+ preference = spreads
+ )
+
+ if (offsetFirstPage != null) {
+ SwitchItem(
+ title = "Offset",
+ preference = offsetFirstPage
+ )
+ }
+ }
+
+ if (fit != null) {
+ ButtonGroupItem(
+ title = "Fit",
+ preference = fit
+ ) { value ->
+ when (value) {
+ Fit.CONTAIN -> "Contain"
+ Fit.COVER -> "Cover"
+ Fit.WIDTH -> "Width"
+ Fit.HEIGHT -> "Height"
+ }
+ }
+ }
+
+ if (pageSpacing != null) {
+ StepperItem(
+ title = "Page spacing",
+ preference = pageSpacing
+ )
+ }
+}
+
+/**
+ * User settings for a publication with adjustable fonts and dimensions, such as
+ * a reflowable EPUB, HTML document or PDF with reflow mode enabled.
+ */
+@Composable
+private fun ReflowableUserPreferences(
+ backgroundColor: Preference? = null,
+ columnCount: Preference? = null,
+ fontFamily: Preference? = null,
+ fontSize: RangePreference? = null,
+ fontWeight: RangePreference? = null,
+ horizontalMargins: RangePreference? = null,
+ hyphens: Preference? = null,
+ imageFilter: EnumPreference? = null,
+ language: Preference? = null,
+ letterSpacing: RangePreference? = null,
+ ligatures: Preference? = null,
+ lineHeight: RangePreference? = null,
+ linkColor: Preference? = null,
+ maximalLineLength: OptionalRangePreference? = null,
+ minimalLineLength: OptionalRangePreference? = null,
+ optimalLineLength: RangePreference? = null,
+ overridePublisherColors: Preference? = null,
+ paragraphIndent: RangePreference? = null,
+ paragraphSpacing: RangePreference? = null,
+ readingProgression: EnumPreference? = null,
+ scroll: Preference? = null,
+ textAlign: EnumPreference? = null,
+ textColor: Preference? = null,
+ textNormalization: Preference? = null,
+ verticalText: Preference? = null,
+ visitedColor: Preference? = null,
+ wordSpacing: RangePreference? = null,
+) {
+ if (language != null || readingProgression != null || verticalText != null) {
+ if (language != null) {
+ LanguageItem(
+ preference = language,
+ )
+ }
+
+ if (readingProgression != null) {
+ ButtonGroupItem(
+ title = "Reading progression",
+ preference = readingProgression,
+ formatValue = { it.name }
+ )
+ }
+
+ if (verticalText != null) {
+ SwitchItem(
+ title = "Vertical text",
+ preference = verticalText,
+ )
+ }
+
+ Divider()
+ }
+
+ if (scroll != null || columnCount != null || horizontalMargins != null ||
+ optimalLineLength != null || minimalLineLength != null || maximalLineLength != null
+ ) {
+ if (scroll != null) {
+ SwitchItem(
+ title = "Scroll",
+ preference = scroll
+ )
+ }
+
+ if (columnCount != null) {
+ ButtonGroupItem(
+ title = "Columns",
+ preference = columnCount.withSupportedValues(null, 1, 2),
+ formatValue = { value: Int? ->
+ value?.toString() ?: "Auto"
+ }
+ )
+ }
+
+ if (horizontalMargins != null) {
+ StepperItem(
+ title = "Horizontal margins",
+ preference = horizontalMargins
+ )
+ }
+
+ if (optimalLineLength != null) {
+ StepperItem(
+ title = "Optimal line length",
+ preference = optimalLineLength
+ )
+ }
+
+ if (minimalLineLength != null) {
+ StepperItem(
+ title = "Minimal line length",
+ preference = minimalLineLength,
+ defaultDisplayValue = 1.0
+ )
+ }
+
+ if (maximalLineLength != null) {
+ StepperItem(
+ title = "Maximal line length",
+ preference = maximalLineLength,
+ defaultDisplayValue = 1.0
+ )
+ }
+
+ Divider()
+ }
+
+ if (imageFilter != null || textColor != null || backgroundColor != null ||
+ linkColor != null || visitedColor != null
+ ) {
+ if (imageFilter != null) {
+ ButtonGroupItem(
+ title = "Image filter",
+ preference = imageFilter
+ ) { value ->
+ when (value) {
+ ImageFilter.DARKEN -> "Darken"
+ ImageFilter.INVERT -> "Invert"
+ null -> "None"
+ }
+ }
+ }
+
+ if (textColor != null) {
+ ColorItem(
+ title = "Text color",
+ preference = textColor
+ )
+ }
+
+ if (backgroundColor != null) {
+ ColorItem(
+ title = "Background color",
+ preference = backgroundColor
+ )
+ }
+
+ if (linkColor != null) {
+ ColorItem(
+ title = "Link color",
+ preference = linkColor
+ )
+ }
+
+ if (visitedColor != null) {
+ ColorItem(
+ title = "Visited color",
+ preference = visitedColor
+ )
+ }
+
+ if (overridePublisherColors != null) {
+ SwitchItem(
+ title = "Override Publisher Colors",
+ preference = overridePublisherColors
+ )
+ }
+
+ Divider()
+ }
+
+ if (fontFamily != null || fontSize != null ||
+ fontWeight != null || textNormalization != null ||
+ lineHeight != null || paragraphSpacing != null
+ ) {
+ if (fontFamily != null) {
+ MenuItem(
+ title = "Typeface",
+ preference = fontFamily
+ .withSupportedValues(
+ null,
+ FontFamily.SANS_SERIF,
+ FontFamily.LITERATA,
+ FontFamily.IA_WRITER_DUOSPACE,
+ FontFamily.ACCESSIBLE_DFA,
+ FontFamily.OPEN_DYSLEXIC
+ )
+ ) { value ->
+ when (value) {
+ null -> "Original"
+ FontFamily.SANS_SERIF -> "Sans Serif"
+ else -> value.name
+ }
+ }
+ }
+
+ if (fontSize != null) {
+ StepperItem(
+ title = "Font size",
+ preference = fontSize
+ )
+ }
+
+ if (fontWeight != null) {
+ StepperItem(
+ title = "Font weight",
+ preference = fontWeight
+ )
+ }
+
+ if (textNormalization != null) {
+ SwitchItem(
+ title = "Text normalization",
+ preference = textNormalization
+ )
+ }
+
+ if (lineHeight != null) {
+ StepperItem(
+ title = "Line height",
+ preference = lineHeight
+ )
+ }
+
+ if (paragraphSpacing != null) {
+ StepperItem(
+ title = "Paragraph spacing",
+ preference = paragraphSpacing
+ )
+ }
+
+ Divider()
+ }
+
+ if (textAlign != null || paragraphIndent != null || wordSpacing != null ||
+ letterSpacing != null || hyphens != null || ligatures != null
+ ) {
+ if (textAlign != null) {
+ ButtonGroupItem(
+ title = "Alignment",
+ preference = textAlign.withSupportedValues(
+ ReadiumTextAlign.LEFT,
+ ReadiumTextAlign.RIGHT,
+ ReadiumTextAlign.JUSTIFY
+ )
+ ) { value ->
+ when (value) {
+ ReadiumTextAlign.CENTER -> "Center"
+ ReadiumTextAlign.JUSTIFY -> "Justify"
+ ReadiumTextAlign.START -> "Start"
+ ReadiumTextAlign.END -> "End"
+ ReadiumTextAlign.LEFT -> "Left"
+ ReadiumTextAlign.RIGHT -> "Right"
+ null -> "Default"
+ }
+ }
+ }
+
+ if (paragraphIndent != null) {
+ StepperItem(
+ title = "Paragraph indent",
+ preference = paragraphIndent
+ )
+ }
+
+ if (wordSpacing != null) {
+ StepperItem(
+ title = "Word spacing",
+ preference = wordSpacing
+ )
+ }
+
+ if (letterSpacing != null) {
+ StepperItem(
+ title = "Letter spacing",
+ preference = letterSpacing
+ )
+ }
+
+ if (hyphens != null) {
+ SwitchItem(
+ title = "Hyphens",
+ preference = hyphens
+ )
+ }
+
+ if (ligatures != null) {
+ SwitchItem(
+ title = "Ligatures",
+ preference = ligatures
+ )
+ }
+ }
+}
+
+@Composable
+private fun Divider() {
+ HorizontalDivider(modifier = Modifier.padding(vertical = 16.dp))
+}
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ActionMode.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ActionMode.kt
new file mode 100644
index 0000000000..8d265a3bfb
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ActionMode.kt
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2023 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+@file:OptIn(ExperimentalReadiumApi::class)
+
+@file:Suppress("ktlint:standard:filename")
+
+package org.readium.demo.navigator.reader
+
+import android.graphics.Color
+import android.view.ActionMode
+import android.view.Menu
+import android.view.MenuItem
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+import org.readium.demo.navigator.R
+import org.readium.demo.navigator.decorations.Highlight
+import org.readium.demo.navigator.decorations.HighlightsManager
+import org.readium.navigator.common.SelectionController
+import org.readium.navigator.common.SelectionLocation
+import org.readium.r2.navigator.util.BaseActionModeCallback
+import org.readium.r2.shared.ExperimentalReadiumApi
+
+class SelectionActionModeFactory(
+ private val highlightsManager: HighlightsManager<*>,
+) {
+
+ fun createActionModeCallback(
+ selectionController: SelectionController<*>,
+ coroutineScope: CoroutineScope,
+ onNoteAdded: (Long) -> Unit,
+ onAnyHighlightAdded: () -> Unit,
+ ): ActionMode.Callback = SelectionActionModeCallback(
+ coroutineScope = coroutineScope,
+ selectionController = selectionController,
+ highlightsManager = highlightsManager,
+ onNoteAdded = onNoteAdded,
+ onAnyHighlightAdded = onAnyHighlightAdded
+ )
+}
+
+private class SelectionActionModeCallback(
+ private val coroutineScope: CoroutineScope,
+ private val selectionController: SelectionController,
+ private val highlightsManager: HighlightsManager<*>,
+ private val onAnyHighlightAdded: () -> Unit,
+ private val onNoteAdded: (Long) -> Unit,
+) : BaseActionModeCallback() {
+
+ private val defaultTint = Color.rgb(249, 239, 125)
+
+ override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
+ mode.menuInflater.inflate(R.menu.menu_action_mode, menu)
+ menu.findItem(R.id.highlight).isVisible = true
+ menu.findItem(R.id.underline).isVisible = true
+ menu.findItem(R.id.note).isVisible = true
+ return true
+ }
+
+ override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
+ coroutineScope.launch {
+ val selection = selectionController.currentSelection() ?: return@launch
+ val locator = selection.location.toLocator()
+
+ when (item.itemId) {
+ R.id.highlight -> {
+ highlightsManager.addHighlight(
+ locator = locator,
+ style = Highlight.Style.HIGHLIGHT,
+ tint = defaultTint
+ )
+ }
+ R.id.underline -> {
+ highlightsManager.addHighlight(
+ locator = locator,
+ style = Highlight.Style.UNDERLINE,
+ tint = defaultTint
+ )
+ }
+ R.id.note -> {
+ val highlightId = highlightsManager.addHighlight(
+ locator = locator,
+ style = Highlight.Style.HIGHLIGHT,
+ tint = defaultTint
+ )
+ onNoteAdded(highlightId)
+ }
+ else -> throw IllegalStateException()
+ }
+
+ onAnyHighlightAdded()
+ }
+ mode.finish()
+ return true
+ }
+}
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Configurations.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Configurations.kt
new file mode 100644
index 0000000000..b0a8c92e23
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Configurations.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+@file:OptIn(ExperimentalReadiumApi::class)
+
+package org.readium.demo.navigator.reader
+
+import kotlin.collections.set
+import kotlinx.collections.immutable.persistentListOf
+import org.readium.demo.navigator.decorations.DecorationStyleAnnotationMark
+import org.readium.demo.navigator.decorations.DecorationStylePageNumber
+import org.readium.demo.navigator.decorations.annotationMarkTemplate
+import org.readium.demo.navigator.decorations.pageNumberTemplate
+import org.readium.navigator.web.common.FontFamilyDeclarations
+import org.readium.navigator.web.common.FontStyle
+import org.readium.navigator.web.common.WebDecorationTemplates
+import org.readium.navigator.web.fixedlayout.FixedWebConfiguration
+import org.readium.navigator.web.reflowable.ReflowableWebConfiguration
+import org.readium.r2.navigator.preferences.FontFamily
+import org.readium.r2.shared.ExperimentalReadiumApi
+
+val FontFamily.Companion.LITERATA: FontFamily get() = FontFamily("Literata")
+
+val reflowableConfig: ReflowableWebConfiguration =
+ ReflowableWebConfiguration(
+ // App assets which will be accessible from the EPUB resources.
+ // You can use simple glob patterns, such as "images/.*" to allow several
+ // assets in one go.
+ servedAssets = persistentListOf(
+ // For the custom font Literata.
+ "fonts/.*",
+ // Icon for the annotation side mark, see [annotationMarkTemplate].
+ "annotation-icon.svg"
+ ),
+ // Register the templates for our custom decoration styles.
+ decorationTemplates = WebDecorationTemplates {
+ set(DecorationStyleAnnotationMark::class, annotationMarkTemplate())
+ set(DecorationStylePageNumber::class, pageNumberTemplate())
+ },
+ fontFamilyDeclarations = FontFamilyDeclarations {
+ // Declare a custom font family for reflowable EPUBs.
+ addFontFamilyDeclaration(FontFamily.LITERATA) {
+ addFontFace {
+ addSource("fonts/Literata-VariableFont_opsz,wght.ttf")
+ setFontStyle(FontStyle.NORMAL)
+ // Literata is a variable font family, so we can provide a font weight range.
+ setFontWeight(200..900)
+ }
+ addFontFace {
+ addSource("fonts/Literata-Italic-VariableFont_opsz,wght.ttf")
+ setFontStyle(FontStyle.ITALIC)
+ setFontWeight(200..900)
+ }
+ }
+ }
+
+ )
+
+val fixedConfig = FixedWebConfiguration(
+ // App assets which will be accessible from the EPUB resources.
+ // You can use simple glob patterns, such as "images/.*" to allow several
+ // assets in one go.
+ servedAssets = persistentListOf(
+ // Icon for the annotation side mark, see [annotationMarkTemplate].
+ "annotation-icon.svg"
+ ),
+ // Register the templates for our custom decoration styles.
+ decorationTemplates = WebDecorationTemplates {
+ set(DecorationStyleAnnotationMark::class, annotationMarkTemplate())
+ }
+)
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Outline.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Outline.kt
new file mode 100644
index 0000000000..9aaef7f935
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Outline.kt
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+@file:OptIn(ExperimentalReadiumApi::class)
+
+package org.readium.demo.navigator.reader
+
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.ArrowBack
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.ListItem
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBar
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import org.readium.r2.shared.ExperimentalReadiumApi
+import org.readium.r2.shared.publication.Link
+import org.readium.r2.shared.publication.Publication
+import org.readium.r2.shared.util.Url
+
+@Composable
+fun Outline(
+ modifier: Modifier = Modifier,
+ publication: Publication,
+ onBackActivated: () -> Unit,
+ onTocItemActivated: (Url) -> Unit,
+) {
+ Scaffold(
+ modifier = modifier,
+ topBar = { TopBar(onBackActivated) },
+ content = { padding ->
+ Box(
+ modifier = Modifier
+ .padding(padding),
+ propagateMinConstraints = true
+ ) {
+ Contents(
+ modifier = Modifier.fillMaxSize(),
+ publication = publication,
+ onItemActivated = onTocItemActivated
+ )
+ }
+ }
+ )
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+private fun TopBar(
+ onBackActivated: () -> Unit,
+) {
+ TopAppBar(
+ title = { Text("Contents") },
+ navigationIcon = {
+ IconButton(
+ onClick = onBackActivated
+ ) {
+ Icon(
+ Icons.AutoMirrored.Filled.ArrowBack,
+ contentDescription = "Back"
+ )
+ }
+ }
+ )
+}
+
+@Composable
+private fun Contents(
+ modifier: Modifier = Modifier,
+ publication: Publication,
+ onItemActivated: (Url) -> Unit,
+) {
+ val items = publication.tableOfContents
+ .flatMap { it.toTocItems(publication) }
+
+ val scrollState = rememberScrollState()
+
+ Contents(
+ modifier = modifier.verticalScroll(scrollState),
+ items = items,
+ onClick = onItemActivated
+ )
+}
+
+private data class TocItem(
+ val title: String,
+ val url: Url,
+ val depth: Int,
+)
+
+private fun Link.toTocItems(
+ publication: Publication,
+ depth: Int = 0,
+): List {
+ val title = title ?: url().filename ?: ""
+
+ return buildList {
+ add(TocItem(title, url(), depth))
+ for (child in children) {
+ addAll(child.toTocItems(publication, depth + 1))
+ }
+ }
+}
+
+@Composable
+private fun Contents(
+ modifier: Modifier = Modifier,
+ items: List,
+ onClick: (Url) -> Unit,
+ depth: Int = 0,
+) {
+ Column(modifier) {
+ for (item in items) {
+ TocItem(
+ item = item,
+ onClick = onClick,
+ depth = depth,
+ )
+ }
+ }
+}
+
+@Composable
+private fun TocItem(
+ modifier: Modifier = Modifier,
+ item: TocItem,
+ onClick: (Url) -> Unit,
+ depth: Int = 0,
+) {
+ ListItem(
+ headlineContent = {
+ Text(
+ text = item.title,
+ )
+ },
+ modifier = modifier
+ .clickable { onClick(item.url) }
+ .padding(start = 24.dp * depth)
+ )
+}
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ReaderOpener.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ReaderOpener.kt
new file mode 100644
index 0000000000..3e11e82818
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ReaderOpener.kt
@@ -0,0 +1,232 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+@file:OptIn(ExperimentalReadiumApi::class)
+
+package org.readium.demo.navigator.reader
+
+import android.app.Application
+import androidx.compose.runtime.snapshotFlow
+import kotlinx.collections.immutable.plus
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.MainScope
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import org.readium.demo.navigator.decorations.FixedWebHighlightsManager
+import org.readium.demo.navigator.decorations.HighlightsManager
+import org.readium.demo.navigator.decorations.ReflowableWebHighlightsManager
+import org.readium.demo.navigator.decorations.pageNumberDecorations
+import org.readium.demo.navigator.persistence.LocatorRepository
+import org.readium.demo.navigator.preferences.PreferencesManager
+import org.readium.navigator.common.DecorationController
+import org.readium.navigator.common.DecorationLocation
+import org.readium.navigator.common.PreferencesEditor
+import org.readium.navigator.common.Settings
+import org.readium.navigator.common.SettingsController
+import org.readium.navigator.web.fixedlayout.FixedWebGoLocation
+import org.readium.navigator.web.fixedlayout.FixedWebLocation
+import org.readium.navigator.web.fixedlayout.FixedWebRenditionController
+import org.readium.navigator.web.fixedlayout.FixedWebRenditionFactory
+import org.readium.navigator.web.fixedlayout.FixedWebSelectionLocation
+import org.readium.navigator.web.fixedlayout.preferences.FixedWebPreferences
+import org.readium.navigator.web.reflowable.ReflowableWebGoLocation
+import org.readium.navigator.web.reflowable.ReflowableWebLocation
+import org.readium.navigator.web.reflowable.ReflowableWebRenditionController
+import org.readium.navigator.web.reflowable.ReflowableWebRenditionFactory
+import org.readium.navigator.web.reflowable.ReflowableWebSelectionLocation
+import org.readium.navigator.web.reflowable.preferences.ReflowableWebPreferences
+import org.readium.r2.shared.ExperimentalReadiumApi
+import org.readium.r2.shared.publication.Locator
+import org.readium.r2.shared.publication.Publication
+import org.readium.r2.shared.util.AbsoluteUrl
+import org.readium.r2.shared.util.DebugError
+import org.readium.r2.shared.util.Error
+import org.readium.r2.shared.util.Try
+import org.readium.r2.shared.util.asset.AssetRetriever
+import org.readium.r2.shared.util.getOrElse
+import org.readium.r2.shared.util.http.DefaultHttpClient
+import org.readium.r2.streamer.PublicationOpener
+import org.readium.r2.streamer.parser.DefaultPublicationParser
+
+class ReaderOpener(
+ private val application: Application,
+) {
+
+ private val httpClient =
+ DefaultHttpClient()
+
+ private val assetRetriever =
+ AssetRetriever(application.contentResolver, httpClient)
+
+ private val publicationParser =
+ DefaultPublicationParser(application, httpClient, assetRetriever, null)
+
+ private val publicationOpener =
+ PublicationOpener(publicationParser)
+
+ suspend fun open(url: AbsoluteUrl): Try, Error> {
+ val asset = assetRetriever.retrieve(url)
+ .getOrElse { return Try.failure(it) }
+
+ val publication = publicationOpener.open(asset, allowUserInteraction = false)
+ .getOrElse {
+ asset.close()
+ return Try.failure(it)
+ }
+
+ val initialLocator = LocatorRepository.getLocator(url)
+
+ val readerState = (
+ createFixedWebReader(url, publication, initialLocator)
+ ?: createReflowableWebReader(url, publication, initialLocator)
+ )
+ .or { Try.failure(DebugError("Publication not supported")) }
+ .getOrElse { error ->
+ publication.close()
+ return Try.failure(error)
+ }
+
+ return Try.success(readerState)
+ }
+
+ private fun Try?.or(onNull: () -> Try): Try =
+ this ?: onNull()
+
+ private suspend fun createReflowableWebReader(
+ url: AbsoluteUrl,
+ publication: Publication,
+ initialLocator: Locator?,
+ ): Try, Error>? {
+ val navigatorFactory = ReflowableWebRenditionFactory(
+ application = application,
+ publication = publication,
+ configuration = reflowableConfig
+ ) ?: return null
+
+ val initialLocation = initialLocator?.let { ReflowableWebGoLocation(it) }
+
+ val coroutineScope = MainScope()
+
+ val initialPreferences = ReflowableWebPreferences()
+
+ val preferencesManager = PreferencesManager(initialPreferences)
+
+ val preferencesEditor = navigatorFactory.createPreferencesEditor(initialPreferences)
+
+ snapshotFlow { preferencesEditor.preferences }
+ .onEach { preferencesManager.setPreferences(it) }
+ .launchIn(coroutineScope)
+
+ val renditionState = navigatorFactory.createRenditionState(
+ initialSettings = preferencesEditor.settings,
+ initialLocation = initialLocation
+ ).getOrElse {
+ return Try.failure(it)
+ }
+
+ val highlightsManager = ReflowableWebHighlightsManager()
+
+ val onControllerAvailable: (ReflowableWebRenditionController) -> Unit = { controller ->
+ applySettings(coroutineScope, controller, preferencesEditor)
+ applyHighlightDecorations(coroutineScope, controller, highlightsManager)
+
+ publication.pageNumberDecorations
+ .takeIf { it.isNotEmpty() }
+ ?.let { controller.decorations + ("pageNumbers" to it) }
+ }
+
+ val actionModeFactory = SelectionActionModeFactory(highlightsManager)
+
+ val readerState = ReaderState(
+ url = url,
+ coroutineScope = coroutineScope,
+ publication = publication,
+ renditionState = renditionState,
+ preferencesEditor = preferencesEditor,
+ onControllerAvailable = onControllerAvailable,
+ actionModeFactory = actionModeFactory,
+ highlightsManager = highlightsManager
+ )
+
+ return Try.success(readerState)
+ }
+
+ private suspend fun createFixedWebReader(
+ url: AbsoluteUrl,
+ publication: Publication,
+ initialLocator: Locator?,
+ ): Try, Error>? {
+ val navigatorFactory = FixedWebRenditionFactory(
+ application = application,
+ publication = publication,
+ configuration = fixedConfig
+ ) ?: return null
+
+ val initialLocation = initialLocator?.let { FixedWebGoLocation(it) }
+
+ val coroutineScope = MainScope()
+
+ val initialPreferences = FixedWebPreferences()
+
+ val preferencesManager = PreferencesManager(initialPreferences)
+
+ val preferencesEditor = navigatorFactory.createPreferencesEditor(initialPreferences)
+
+ snapshotFlow { preferencesEditor.preferences }
+ .onEach { preferencesManager.setPreferences(it) }
+ .launchIn(coroutineScope)
+
+ val renditionState = navigatorFactory.createRenditionState(
+ initialSettings = preferencesEditor.settings,
+ initialLocation = initialLocation
+ ).getOrElse {
+ return Try.failure(it)
+ }
+
+ val highlightsManager = FixedWebHighlightsManager()
+
+ val onControllerAvailable: (FixedWebRenditionController) -> Unit = { controller ->
+ applySettings(coroutineScope, controller, preferencesEditor)
+ applyHighlightDecorations(coroutineScope, controller, highlightsManager)
+ }
+
+ val actionModeFactory = SelectionActionModeFactory(highlightsManager)
+
+ val readerState = ReaderState(
+ url = url,
+ coroutineScope = coroutineScope,
+ publication = publication,
+ renditionState = renditionState,
+ preferencesEditor = preferencesEditor,
+ onControllerAvailable = onControllerAvailable,
+ highlightsManager = highlightsManager,
+ actionModeFactory = actionModeFactory
+ )
+
+ return Try.success(readerState)
+ }
+
+ private fun applySettings(
+ coroutineScope: CoroutineScope,
+ settingsController: SettingsController,
+ preferencesEditor: PreferencesEditor<*, S>,
+ ) {
+ snapshotFlow { preferencesEditor.settings }
+ .onEach { settingsController.settings = it }
+ .launchIn(coroutineScope)
+ }
+
+ private fun applyHighlightDecorations(
+ coroutineScope: CoroutineScope,
+ decorationController: DecorationController,
+ highlightsManager: HighlightsManager,
+ ) {
+ highlightsManager.decorations
+ .onEach {
+ decorationController.decorations += ("highlights" to it)
+ }.launchIn(coroutineScope)
+ }
+}
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ReaderState.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ReaderState.kt
new file mode 100644
index 0000000000..ba6765f0ca
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/ReaderState.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+@file:OptIn(ExperimentalReadiumApi::class)
+
+package org.readium.demo.navigator.reader
+
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.cancel
+import org.readium.demo.navigator.decorations.HighlightsManager
+import org.readium.navigator.common.ExportableLocation
+import org.readium.navigator.common.GoLocation
+import org.readium.navigator.common.NavigationController
+import org.readium.navigator.common.PreferencesEditor
+import org.readium.navigator.common.RenditionState
+import org.readium.navigator.common.SelectionController
+import org.readium.navigator.common.SelectionLocation
+import org.readium.r2.shared.ExperimentalReadiumApi
+import org.readium.r2.shared.publication.Publication
+import org.readium.r2.shared.util.AbsoluteUrl
+
+data class ReaderState(
+ val url: AbsoluteUrl,
+ val coroutineScope: CoroutineScope,
+ val publication: Publication,
+ val renditionState: RenditionState,
+ val preferencesEditor: PreferencesEditor<*, *>,
+ val highlightsManager: HighlightsManager<*>,
+ val onControllerAvailable: (C) -> Unit,
+ val actionModeFactory: SelectionActionModeFactory,
+) where C : NavigationController, C : SelectionController {
+
+ fun close() {
+ coroutineScope.cancel()
+ publication.close()
+ }
+}
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Rendition.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Rendition.kt
new file mode 100644
index 0000000000..b49a1aae96
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/reader/Rendition.kt
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+@file:OptIn(ExperimentalReadiumApi::class)
+
+package org.readium.demo.navigator.reader
+
+import androidx.activity.compose.BackHandler
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.ModalBottomSheet
+import androidx.compose.material3.TopAppBar
+import androidx.compose.material3.rememberModalBottomSheetState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.snapshotFlow
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.zIndex
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.launch
+import org.readium.demo.navigator.R
+import org.readium.demo.navigator.decorations.DecorationStyleAnnotationMark
+import org.readium.demo.navigator.decorations.EditAnnotationDialog
+import org.readium.demo.navigator.decorations.EditAnnotationViewModel
+import org.readium.demo.navigator.decorations.EditHighlightPopup
+import org.readium.demo.navigator.decorations.EditHighlightViewModel
+import org.readium.demo.navigator.persistence.LocatorRepository
+import org.readium.demo.navigator.preferences.UserPreferences
+import org.readium.demo.navigator.util.launchWebBrowser
+import org.readium.navigator.common.DecorationListener
+import org.readium.navigator.common.DecorationLocation
+import org.readium.navigator.common.ExportableLocation
+import org.readium.navigator.common.GoLocation
+import org.readium.navigator.common.InputListener
+import org.readium.navigator.common.NavigationController
+import org.readium.navigator.common.OverflowController
+import org.readium.navigator.common.SelectionController
+import org.readium.navigator.common.SelectionLocation
+import org.readium.navigator.common.TapContext
+import org.readium.navigator.common.TapEvent
+import org.readium.navigator.common.defaultHyperlinkListener
+import org.readium.navigator.common.defaultInputListener
+import org.readium.navigator.web.fixedlayout.FixedWebRendition
+import org.readium.navigator.web.fixedlayout.FixedWebRenditionState
+import org.readium.navigator.web.reflowable.ReflowableWebRendition
+import org.readium.navigator.web.reflowable.ReflowableWebRenditionState
+import org.readium.r2.shared.ExperimentalReadiumApi
+import org.readium.r2.shared.util.toUri
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun Rendition(
+ readerState: ReaderState,
+ fullScreenState: MutableState,
+) where C : NavigationController, C : SelectionController {
+ val coroutineScope = rememberCoroutineScope()
+
+ val showPreferences = remember { mutableStateOf(false) }
+ val preferencesSheetState = rememberModalBottomSheetState()
+
+ if (showPreferences.value) {
+ ModalBottomSheet(
+ sheetState = preferencesSheetState,
+ onDismissRequest = {
+ showPreferences.value = false
+ }
+ ) {
+ UserPreferences(
+ editor = readerState.preferencesEditor,
+ title = "Preferences"
+ )
+ }
+ }
+
+ val showOutline = rememberSaveable { mutableStateOf(false) }
+
+ if (showOutline.value) {
+ Outline(
+ modifier = Modifier
+ .zIndex(1f)
+ .fillMaxSize(),
+ publication = readerState.publication,
+ onBackActivated = {
+ showOutline.value = false
+ fullScreenState.value = true
+ },
+ onTocItemActivated = {
+ val controllerNow = readerState.renditionState.controller
+ ?: return@Outline
+
+ coroutineScope.launch {
+ controllerNow.goTo(it)
+ }
+
+ fullScreenState.value = true
+ showOutline.value = false
+ }
+ )
+ }
+
+ Box {
+ TopBar(
+ modifier = Modifier.zIndex(10f),
+ visible = !fullScreenState.value,
+ onPreferencesActivated = { showPreferences.value = !showPreferences.value },
+ onOutlineActivated = { showOutline.value = !showOutline.value }
+ )
+
+ val navigationHistory: MutableState> = remember { mutableStateOf(emptyList()) }
+
+ val controllerNow = readerState.renditionState.controller
+
+ if (controllerNow != null) {
+ LaunchedEffect(controllerNow) {
+ readerState.onControllerAvailable(controllerNow)
+ }
+
+ LaunchedEffect(controllerNow) {
+ snapshotFlow {
+ controllerNow.location
+ }.onEach {
+ LocatorRepository.saveLocator(readerState.url, it.toLocator())
+ }.launchIn(readerState.coroutineScope)
+ }
+
+ BackHandler(enabled = navigationHistory.value.isNotEmpty()) {
+ val previousItem = navigationHistory.value.last()
+ navigationHistory.value -= previousItem
+ coroutineScope.launch { controllerNow.goTo(previousItem) }
+ }
+ }
+
+ val fallbackInputListener = remember {
+ object : InputListener {
+ override fun onTap(event: TapEvent, context: TapContext) {
+ fullScreenState.value = !fullScreenState.value
+ }
+ }
+ }
+
+ val inputListener =
+ (controllerNow as? OverflowController)?.let {
+ defaultInputListener(
+ controller = it,
+ fallbackListener = fallbackInputListener
+ )
+ } ?: fallbackInputListener
+
+ val context = LocalContext.current
+
+ val hyperlinkListener =
+ defaultHyperlinkListener(
+ controller = controllerNow,
+ shouldFollowReadingOrderLink = { _, _ ->
+ navigationHistory.value += location
+ true
+ },
+ onExternalLinkActivated = { url, _ -> launchWebBrowser(context, url.toUri()) }
+ )
+
+ val showAnnotationDialog: MutableState =
+ remember { mutableStateOf(null) }
+
+ val showEditHighlightPopup: MutableState =
+ remember { mutableStateOf(null) }
+
+ showAnnotationDialog.value?.let { viewModel ->
+ EditAnnotationDialog(
+ viewModel = viewModel,
+ onDismissRequest = { showAnnotationDialog.value = null }
+ )
+ }
+
+ showEditHighlightPopup.value?.let { viewModel ->
+ EditHighlightPopup(
+ viewModel = viewModel,
+ onDismissRequest = {
+ showEditHighlightPopup.value = null
+ },
+ onEditNoteRequest = {
+ showAnnotationDialog.value =
+ EditAnnotationViewModel(viewModel.id, viewModel.highlightsManager)
+ showEditHighlightPopup.value = null
+ }
+ )
+ }
+
+ val selectionActionMode = remember(controllerNow) {
+ controllerNow?.let { controller ->
+ readerState.actionModeFactory.createActionModeCallback(
+ coroutineScope = coroutineScope,
+ selectionController = controller,
+ onNoteAdded = { id ->
+ showAnnotationDialog.value =
+ EditAnnotationViewModel(id, readerState.highlightsManager)
+ },
+ onAnyHighlightAdded = {
+ controller.clearSelection()
+ }
+ )
+ }
+ }
+
+ val decorationsListener = remember {
+ object : DecorationListener {
+
+ override fun onDecorationActivated(event: DecorationListener.OnActivatedEvent) {
+ if (event.group != "highlights") {
+ return
+ }
+ when (event.decoration.style) {
+ is DecorationStyleAnnotationMark -> {
+ showAnnotationDialog.value =
+ EditAnnotationViewModel(
+ id = event.decoration.id.value.split('-').first().toLong(),
+ highlightsManager = readerState.highlightsManager
+ )
+ }
+ else -> {
+ showEditHighlightPopup.value =
+ EditHighlightViewModel(
+ id = event.decoration.id.value.split('-').first().toLong(),
+ contentRect = event.rect!!,
+ highlightsManager = readerState.highlightsManager
+ )
+ }
+ }
+ }
+ }
+ }
+
+ when (readerState.renditionState) {
+ is FixedWebRenditionState -> {
+ FixedWebRendition(
+ modifier = Modifier.fillMaxSize(),
+ state = readerState.renditionState,
+ inputListener = inputListener,
+ hyperlinkListener = hyperlinkListener,
+ decorationListener = decorationsListener,
+ textSelectionActionModeCallback = selectionActionMode
+ )
+ }
+ is ReflowableWebRenditionState -> {
+ ReflowableWebRendition(
+ modifier = Modifier.fillMaxSize(),
+ state = readerState.renditionState,
+ inputListener = inputListener,
+ hyperlinkListener = hyperlinkListener,
+ decorationListener = decorationsListener,
+ textSelectionActionModeCallback = selectionActionMode
+ )
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+private fun TopBar(
+ modifier: Modifier,
+ visible: Boolean,
+ onPreferencesActivated: () -> Unit,
+ onOutlineActivated: () -> Unit,
+) {
+ AnimatedVisibility(
+ modifier = modifier,
+ visible = visible,
+ enter = fadeIn(),
+ exit = fadeOut()
+ ) {
+ TopAppBar(
+ title = { },
+ actions = {
+ IconButton(
+ onClick = onPreferencesActivated
+ ) {
+ Icon(
+ painterResource(R.drawable.ic_preferences_24),
+ contentDescription = "Preferences",
+ )
+ }
+ IconButton(
+ onClick = onOutlineActivated
+ ) {
+ Icon(
+ painterResource(R.drawable.ic_outline_24),
+ contentDescription = "Outline"
+ )
+ }
+ }
+ )
+ }
+}
diff --git a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/Theme.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/theme/Theme.kt
similarity index 91%
rename from readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/Theme.kt
rename to demos/navigator/src/main/java/org/readium/demo/navigator/theme/Theme.kt
index 0965f29764..6fde783504 100644
--- a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/Theme.kt
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/theme/Theme.kt
@@ -4,7 +4,7 @@
* available in the top-level LICENSE file of the project.
*/
-package org.readium.navigator.demo.util
+package org.readium.demo.navigator.theme
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
@@ -15,7 +15,7 @@ import androidx.compose.runtime.Composable
@Composable
fun Theme(
darkTheme: Boolean = isSystemInDarkTheme(),
- content: @Composable () -> Unit
+ content: @Composable () -> Unit,
) {
val colors = if (darkTheme) {
darkColorScheme()
@@ -25,8 +25,8 @@ fun Theme(
MaterialTheme(
colorScheme = colors,
- shapes = MaterialTheme.shapes,
typography = MaterialTheme.typography,
+ shapes = MaterialTheme.shapes,
content = content
)
}
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/util/ColorPicker.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/util/ColorPicker.kt
new file mode 100644
index 0000000000..ae8d0f695d
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/util/ColorPicker.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+package org.readium.demo.navigator.util
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.core.graphics.toColorInt
+
+@Composable
+fun ColorPicker(onPick: (Int) -> Unit) {
+ val colors = listOf(
+ // Gray
+ listOf("#ffffff", "#bfbfbf", "#808080", "#404040", "#000000"),
+ // Sepia
+ listOf("#FAF4E8", "#CDBEAE", "#A08774", "#73513A", "#461A00"),
+ // Brown
+ listOf("#d7ccc8", "#a1887f", "#795548", "#5d4037", "#3e2723"),
+ // Red
+ listOf("#ffcdd2", "#e57373", "#f44336", "#d32f2f", "#b71c1c"),
+ // Purple
+ listOf("#e1bee7", "#ba68c8", "#9c27b0", "#7b1fa2", "#4a148c"),
+ // Blue
+ listOf("#bbdefb", "#64b5f6", "#2196f3", "#1976d2", "#0d47a1"),
+ // Green
+ listOf("#c8e6c9", "#81c784", "#4caf50", "#388e3c", "#1b5e20"),
+ // Yellow
+ listOf("#fff9c4", "#fff176", "#ffeb3b", "#fbc02d", "#f57f17"),
+ // Orange
+ listOf("#ffe0b2", "#ffb74d", "#ff9800", "#f57c00", "#e65100")
+ )
+
+ Column {
+ for (row in colors) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ ) {
+ for (color in row) {
+ ColorBox(color, onClick = onPick)
+ }
+ }
+ }
+ }
+}
+
+@Composable
+private fun RowScope.ColorBox(colorHex: String, onClick: (Int) -> Unit) {
+ val color = remember(colorHex) { colorHex.toColorInt() }
+
+ Box(
+ modifier = Modifier
+ .clickable { onClick(color) }
+ .weight(1f)
+ .size(40.dp)
+ .background(Color(color))
+ )
+}
+
+@Preview(showBackground = true)
+@Composable
+fun PreviewColorPicker() {
+ ColorPicker {}
+}
diff --git a/demos/navigator/src/main/java/org/readium/demo/navigator/util/DropdownMenuButton.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/util/DropdownMenuButton.kt
new file mode 100644
index 0000000000..925ab07691
--- /dev/null
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/util/DropdownMenuButton.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2024 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+package org.readium.demo.navigator.util
+
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.RowScope
+import androidx.compose.material3.DropdownMenu
+import androidx.compose.material3.OutlinedButton
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+
+@Composable
+fun DropdownMenuButton(
+ text: @Composable RowScope.() -> Unit,
+ content: @Composable ColumnScope.(dismiss: () -> Unit) -> Unit,
+) {
+ var isExpanded by remember { mutableStateOf(false) }
+ fun dismiss() {
+ isExpanded = false
+ }
+
+ OutlinedButton(
+ onClick = { isExpanded = true }
+ ) {
+ text()
+ DropdownMenu(
+ expanded = isExpanded,
+ onDismissRequest = { isExpanded = false }
+ ) {
+ content(::dismiss)
+ }
+ }
+}
diff --git a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/Fullscreenable.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/util/Fullscreenable.kt
similarity index 92%
rename from readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/Fullscreenable.kt
rename to demos/navigator/src/main/java/org/readium/demo/navigator/util/Fullscreenable.kt
index 24ba274450..445d4d634b 100644
--- a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/Fullscreenable.kt
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/util/Fullscreenable.kt
@@ -4,7 +4,7 @@
* available in the top-level LICENSE file of the project.
*/
-package org.readium.navigator.demo.util
+package org.readium.demo.navigator.util
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -19,7 +19,7 @@ import androidx.core.view.WindowInsetsControllerCompat
fun Fullscreenable(
fullscreenState: State,
insetsController: WindowInsetsControllerCompat,
- content: @Composable () -> Unit
+ content: @Composable () -> Unit,
) {
insetsController.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
diff --git a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/ToggleButton.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/util/ToggleButton.kt
similarity index 95%
rename from readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/ToggleButton.kt
rename to demos/navigator/src/main/java/org/readium/demo/navigator/util/ToggleButton.kt
index 8650c78f7a..c38f23d1a5 100644
--- a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/ToggleButton.kt
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/util/ToggleButton.kt
@@ -4,7 +4,7 @@
* available in the top-level LICENSE file of the project.
*/
-package org.readium.navigator.demo.util
+package org.readium.demo.navigator.util
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
@@ -28,7 +28,7 @@ fun ToggleButtonGroup(
selectedOption: T?,
onSelectOption: (T) -> Unit,
enabled: (T) -> Boolean = { true },
- content: @Composable RowScope.(T) -> Unit
+ content: @Composable RowScope.(T) -> Unit,
) {
Row {
for (option in options) {
@@ -50,7 +50,7 @@ fun ToggleButton(
enabled: Boolean = true,
active: Boolean = false,
selected: Boolean = false,
- content: @Composable RowScope.() -> Unit
+ content: @Composable RowScope.() -> Unit,
) {
OutlinedButton(
modifier = modifier,
diff --git a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/WebLauncher.kt b/demos/navigator/src/main/java/org/readium/demo/navigator/util/WebLauncher.kt
similarity index 96%
rename from readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/WebLauncher.kt
rename to demos/navigator/src/main/java/org/readium/demo/navigator/util/WebLauncher.kt
index 3ab7ee6641..fa29131f10 100644
--- a/readium/navigators/demo/src/main/java/org/readium/navigator/demo/util/WebLauncher.kt
+++ b/demos/navigator/src/main/java/org/readium/demo/navigator/util/WebLauncher.kt
@@ -4,7 +4,7 @@
* available in the top-level LICENSE file of the project.
*/
-package org.readium.navigator.demo.util
+package org.readium.demo.navigator.util
import android.content.ActivityNotFoundException
import android.content.Context
diff --git a/readium/navigators/demo/src/main/res/drawable-v24/ic_launcher_foreground.xml b/demos/navigator/src/main/res/drawable-v24/ic_launcher_foreground.xml
similarity index 100%
rename from readium/navigators/demo/src/main/res/drawable-v24/ic_launcher_foreground.xml
rename to demos/navigator/src/main/res/drawable-v24/ic_launcher_foreground.xml
diff --git a/readium/navigators/demo/src/main/res/drawable/ic_launcher_background.xml b/demos/navigator/src/main/res/drawable/ic_launcher_background.xml
similarity index 100%
rename from readium/navigators/demo/src/main/res/drawable/ic_launcher_background.xml
rename to demos/navigator/src/main/res/drawable/ic_launcher_background.xml
diff --git a/demos/navigator/src/main/res/drawable/ic_outline_24.xml b/demos/navigator/src/main/res/drawable/ic_outline_24.xml
new file mode 100644
index 0000000000..4350ba96af
--- /dev/null
+++ b/demos/navigator/src/main/res/drawable/ic_outline_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/demos/navigator/src/main/res/drawable/ic_preferences_24.xml b/demos/navigator/src/main/res/drawable/ic_preferences_24.xml
new file mode 100644
index 0000000000..4cfa4c7cb6
--- /dev/null
+++ b/demos/navigator/src/main/res/drawable/ic_preferences_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/demos/navigator/src/main/res/menu/menu_action_mode.xml b/demos/navigator/src/main/res/menu/menu_action_mode.xml
new file mode 100644
index 0000000000..6080fa0e4b
--- /dev/null
+++ b/demos/navigator/src/main/res/menu/menu_action_mode.xml
@@ -0,0 +1,28 @@
+
+
\ No newline at end of file
diff --git a/demos/navigator/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/demos/navigator/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000000..729f828c86
--- /dev/null
+++ b/demos/navigator/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/readium/navigators/demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/demos/navigator/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
similarity index 100%
rename from readium/navigators/demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to demos/navigator/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
diff --git a/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher.png b/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000000..14bfe31ecc
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_background.png b/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_background.png
new file mode 100644
index 0000000000..be6198d045
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_background.png differ
diff --git a/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000..f9eff93226
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/readium/navigators/demo/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_round.webp
similarity index 100%
rename from readium/navigators/demo/src/main/res/mipmap-hdpi/ic_launcher_round.webp
rename to demos/navigator/src/main/res/mipmap-hdpi/ic_launcher_round.webp
diff --git a/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher.png b/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000000..c9760a62a8
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_background.png b/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_background.png
new file mode 100644
index 0000000000..d5afce8c9b
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_background.png differ
diff --git a/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000..1fa12fe98b
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/readium/navigators/demo/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_round.webp
similarity index 100%
rename from readium/navigators/demo/src/main/res/mipmap-mdpi/ic_launcher_round.webp
rename to demos/navigator/src/main/res/mipmap-mdpi/ic_launcher_round.webp
diff --git a/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher.png b/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000..2a740d3c8c
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_background.png
new file mode 100644
index 0000000000..ba70604015
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ
diff --git a/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000..f5b9612c11
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/readium/navigators/demo/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
similarity index 100%
rename from readium/navigators/demo/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
rename to demos/navigator/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
diff --git a/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher.png b/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000..d3a296ff05
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
new file mode 100644
index 0000000000..29d5717ee8
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ
diff --git a/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000..1c1d8b9913
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/readium/navigators/demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
similarity index 100%
rename from readium/navigators/demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
rename to demos/navigator/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
diff --git a/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000000..121be937fe
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
new file mode 100644
index 0000000000..8b70d79773
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ
diff --git a/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000..1d53082535
Binary files /dev/null and b/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/readium/navigators/demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
similarity index 100%
rename from readium/navigators/demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
rename to demos/navigator/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
diff --git a/readium/navigators/demo/src/main/res/values/colors.xml b/demos/navigator/src/main/res/values/colors.xml
similarity index 100%
rename from readium/navigators/demo/src/main/res/values/colors.xml
rename to demos/navigator/src/main/res/values/colors.xml
diff --git a/readium/navigators/demo/src/main/res/values/strings.xml b/demos/navigator/src/main/res/values/strings.xml
similarity index 100%
rename from readium/navigators/demo/src/main/res/values/strings.xml
rename to demos/navigator/src/main/res/values/strings.xml
diff --git a/demos/navigator/src/main/res/values/themes.xml b/demos/navigator/src/main/res/values/themes.xml
new file mode 100644
index 0000000000..59cb03fc3e
--- /dev/null
+++ b/demos/navigator/src/main/res/values/themes.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/readium/navigators/demo/src/main/res/xml/network_security_config.xml b/demos/navigator/src/main/res/xml/network_security_config.xml
similarity index 100%
rename from readium/navigators/demo/src/main/res/xml/network_security_config.xml
rename to demos/navigator/src/main/res/xml/network_security_config.xml
diff --git a/gradle.properties b/gradle.properties
index b48daadb6d..e43daaa038 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -8,7 +8,7 @@
pom.groupId=org.readium.kotlin-toolkit
pom.version=3.1.1
-android.minSdk=21
+android.minSdk=23
android.compileSdk=36
android.targetSdk=36
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 38ae0b11b8..6a23e17f8c 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -47,6 +47,8 @@ kotlinx-coroutines = "1.10.2"
kotlinx-coroutines-test = "1.10.2"
kotlinx-datetime = "0.7.1"
kotlinx-serialization-json = "1.8.1"
+kotlinx-collections-immutable = "0.4.0"
+
# Make sure to align with the Kotlin version.
# See https://github.com/google/ksp/releases
@@ -118,6 +120,7 @@ kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinx-coroutines-test" }
kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinx-datetime" }
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }
+kotlinx-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotlinx-collections-immutable", version.ref = "kotlinx-collections-immutable" }
picasso = { group = "com.squareup.picasso", name = "picasso", version.ref = "picasso" }
pspdfkit = { group = "com.pspdfkit", name = "pspdfkit", version.ref ="pspdfkit" }
diff --git a/readium/navigator/build.gradle.kts b/readium/navigator/build.gradle.kts
index e3d0795204..de92f97828 100644
--- a/readium/navigator/build.gradle.kts
+++ b/readium/navigator/build.gradle.kts
@@ -35,6 +35,7 @@ dependencies {
implementation(libs.androidx.legacy.ui)
implementation(libs.androidx.lifecycle.common)
implementation(libs.androidx.recyclerview)
+ implementation(libs.androidx.viewpager2)
implementation(libs.bundles.media3)
implementation(libs.androidx.webkit)
diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js
index 6e58c438f6..924d40b71d 100644
--- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js
+++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js
@@ -1,2 +1,2 @@
-!function(){var u={1844:function(u,t){"use strict";function e(u){return u.split("").reverse().join("")}function r(u){return(u|-u)>>31&1}function n(u,t,e,n){var o=u.P[e],D=u.M[e],i=n>>>31,a=t[e]|i,c=a|D,F=(a&o)+o^o|a,l=D|~(F|o),f=o&F,s=r(l&u.lastRowMask[e])-r(f&u.lastRowMask[e]);return l<<=1,f<<=1,o=(f|=i)|~(c|(l|=r(n)-i)),D=l&c,u.P[e]=o,u.M[e]=D,s}function o(u,t,e){if(0===t.length)return[];e=Math.min(e,t.length);var r=[],o=32,D=Math.ceil(t.length/o)-1,i={P:new Uint32Array(D+1),M:new Uint32Array(D+1),lastRowMask:new Uint32Array(D+1)};i.lastRowMask.fill(1<<31),i.lastRowMask[D]=1<<(t.length-1)%o;for(var a=new Uint32Array(D+1),c=new Map,F=[],l=0;l<256;l++)F.push(a);for(var f=0;f=t.length||t.charCodeAt(C)===s&&(p[A]|=1<0&&d[y]>=e+o;)y-=1;y===D&&d[y]<=e&&(d[y]-1?n(e):e}},2755:function(u,t,e){"use strict";var r=e(3569),n=e(2870),o=n("%Function.prototype.apply%"),D=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||r.call(D,o),a=n("%Object.getOwnPropertyDescriptor%",!0),c=n("%Object.defineProperty%",!0),F=n("%Math.max%");if(c)try{c({},"a",{value:1})}catch(u){c=null}u.exports=function(u){var t=i(r,D,arguments);return a&&c&&a(t,"length").configurable&&c(t,"length",{value:1+F(0,u.length-(arguments.length-1))}),t};var l=function(){return i(r,o,arguments)};c?c(u.exports,"apply",{value:l}):u.exports.apply=l},6663:function(u,t,e){"use strict";var r=e(229)(),n=e(2870),o=r&&n("%Object.defineProperty%",!0),D=n("%SyntaxError%"),i=n("%TypeError%"),a=e(658);u.exports=function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new i("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new i("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new i("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new i("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new i("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new i("`loose`, if provided, must be a boolean");var r=arguments.length>3?arguments[3]:null,n=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,F=arguments.length>6&&arguments[6],l=!!a&&a(u,t);if(o)o(u,t,{configurable:null===c&&l?l.configurable:!c,enumerable:null===r&&l?l.enumerable:!r,value:e,writable:null===n&&l?l.writable:!n});else{if(!F&&(r||n||c))throw new D("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");u[t]=e}}},9722:function(u,t,e){"use strict";var r=e(2051),n="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),o=Object.prototype.toString,D=Array.prototype.concat,i=e(6663),a=e(229)(),c=function(u,t,e,r){if(t in u)if(!0===r){if(u[t]===e)return}else if("function"!=typeof(n=r)||"[object Function]"!==o.call(n)||!r())return;var n;a?i(u,t,e,!0):i(u,t,e)},F=function(u,t){var e=arguments.length>2?arguments[2]:{},o=r(t);n&&(o=D.call(o,Object.getOwnPropertySymbols(t)));for(var i=0;i2&&arguments[2]&&arguments[2].force;!D||!e&&o(u,D)||(r?r(u,D,{configurable:!0,enumerable:!1,value:t,writable:!1}):u[D]=t)}},7358:function(u,t,e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator,n=e(7959),o=e(3655),D=e(455),i=e(8760);u.exports=function(u){if(n(u))return u;var t,e="default";if(arguments.length>1&&(arguments[1]===String?e="string":arguments[1]===Number&&(e="number")),r&&(Symbol.toPrimitive?t=function(u,t){var e=u[t];if(null!=e){if(!o(e))throw new TypeError(e+" returned for property "+t+" of object "+u+" is not a function");return e}}(u,Symbol.toPrimitive):i(u)&&(t=Symbol.prototype.valueOf)),void 0!==t){var a=t.call(u,e);if(n(a))return a;throw new TypeError("unable to convert exotic object to primitive")}return"default"===e&&(D(u)||i(u))&&(e="string"),function(u,t){if(null==u)throw new TypeError("Cannot call method on "+u);if("string"!=typeof t||"number"!==t&&"string"!==t)throw new TypeError('hint must be "string" or "number"');var e,r,D,i="string"===t?["toString","valueOf"]:["valueOf","toString"];for(D=0;D1&&"boolean"!=typeof t)throw new D('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,u))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var e=function(u){var t=v(u,0,1),e=v(u,-1);if("%"===t&&"%"!==e)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===e&&"%"!==t)throw new n("invalid intrinsic syntax, expected opening `%`");var r=[];return b(u,x,(function(u,t,e,n){r[r.length]=e?b(n,S,"$1"):t||u})),r}(u),r=e.length>0?e[0]:"",o=O("%"+r+"%",t),i=o.name,c=o.value,F=!1,l=o.alias;l&&(r=l[0],m(e,g([0,1],l)));for(var f=1,s=!0;f=e.length){var y=a(c,p);c=(s=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:c[p]}else s=B(c,p),c=c[p];s&&!F&&(E[i]=c)}}return c}},658:function(u,t,e){"use strict";var r=e(2870)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(u){r=null}u.exports=r},229:function(u,t,e){"use strict";var r=e(2870)("%Object.defineProperty%",!0),n=function(){if(r)try{return r({},"a",{value:1}),!0}catch(u){return!1}return!1};n.hasArrayLengthDefineBug=function(){if(!n())return null;try{return 1!==r([],"length",{value:1}).length}catch(u){return!0}},u.exports=n},3413:function(u){"use strict";var t={foo:{}},e=Object;u.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof e)}},1143:function(u,t,e){"use strict";var r="undefined"!=typeof Symbol&&Symbol,n=e(9985);u.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&n()}},9985:function(u){"use strict";u.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var u={},t=Symbol("test"),e=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;for(t in u[t]=42,u)return!1;if("function"==typeof Object.keys&&0!==Object.keys(u).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(u).length)return!1;var r=Object.getOwnPropertySymbols(u);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(u,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var n=Object.getOwnPropertyDescriptor(u,t);if(42!==n.value||!0!==n.enumerable)return!1}return!0}},3060:function(u,t,e){"use strict";var r=e(9985);u.exports=function(){return r()&&!!Symbol.toStringTag}},9545:function(u){"use strict";var t={}.hasOwnProperty,e=Function.prototype.call;u.exports=e.bind?e.bind(t):function(u,r){return e.call(t,u,r)}},7284:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=e(5714)(),D=r("%TypeError%"),i={assert:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");if(o.assert(u),!i.has(u,t))throw new D("`"+t+"` is not present on `O`")},get:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return e&&e["$"+t]},has:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return!!e&&n(e,"$"+t)},set:function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var r=o.get(u);r||(r={},o.set(u,r)),r["$"+t]=e}};Object.freeze&&Object.freeze(i),u.exports=i},3655:function(u){"use strict";var t,e,r=Function.prototype.toString,n="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof n&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw e}}),e={},n((function(){throw 42}),null,t)}catch(u){u!==e&&(n=null)}else n=null;var o=/^\s*class\b/,D=function(u){try{var t=r.call(u);return o.test(t)}catch(u){return!1}},i=function(u){try{return!D(u)&&(r.call(u),!0)}catch(u){return!1}},a=Object.prototype.toString,c="function"==typeof Symbol&&!!Symbol.toStringTag,F=!(0 in[,]),l=function(){return!1};if("object"==typeof document){var f=document.all;a.call(f)===a.call(document.all)&&(l=function(u){if((F||!u)&&(void 0===u||"object"==typeof u))try{var t=a.call(u);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==u("")}catch(u){}return!1})}u.exports=n?function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;try{n(u,null,t)}catch(u){if(u!==e)return!1}return!D(u)&&i(u)}:function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;if(c)return i(u);if(D(u))return!1;var t=a.call(u);return!("[object Function]"!==t&&"[object GeneratorFunction]"!==t&&!/^\[object HTML/.test(t))&&i(u)}},455:function(u,t,e){"use strict";var r=Date.prototype.getDay,n=Object.prototype.toString,o=e(3060)();u.exports=function(u){return"object"==typeof u&&null!==u&&(o?function(u){try{return r.call(u),!0}catch(u){return!1}}(u):"[object Date]"===n.call(u))}},5494:function(u,t,e){"use strict";var r,n,o,D,i=e(3099),a=e(3060)();if(a){r=i("Object.prototype.hasOwnProperty"),n=i("RegExp.prototype.exec"),o={};var c=function(){throw o};D={toString:c,valueOf:c},"symbol"==typeof Symbol.toPrimitive&&(D[Symbol.toPrimitive]=c)}var F=i("Object.prototype.toString"),l=Object.getOwnPropertyDescriptor;u.exports=a?function(u){if(!u||"object"!=typeof u)return!1;var t=l(u,"lastIndex");if(!t||!r(t,"value"))return!1;try{n(u,D)}catch(u){return u===o}}:function(u){return!(!u||"object"!=typeof u&&"function"!=typeof u)&&"[object RegExp]"===F(u)}},8760:function(u,t,e){"use strict";var r=Object.prototype.toString;if(e(1143)()){var n=Symbol.prototype.toString,o=/^Symbol\(.*\)$/;u.exports=function(u){if("symbol"==typeof u)return!0;if("[object Symbol]"!==r.call(u))return!1;try{return function(u){return"symbol"==typeof u.valueOf()&&o.test(n.call(u))}(u)}catch(u){return!1}}}else u.exports=function(u){return!1}},4538:function(u,t,e){var r="function"==typeof Map&&Map.prototype,n=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,o=r&&n&&"function"==typeof n.get?n.get:null,D=r&&Map.prototype.forEach,i="function"==typeof Set&&Set.prototype,a=Object.getOwnPropertyDescriptor&&i?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=i&&a&&"function"==typeof a.get?a.get:null,F=i&&Set.prototype.forEach,l="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,f="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,s="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,p=Boolean.prototype.valueOf,A=Object.prototype.toString,E=Function.prototype.toString,C=String.prototype.match,y=String.prototype.slice,d=String.prototype.replace,h=String.prototype.toUpperCase,B=String.prototype.toLowerCase,g=RegExp.prototype.test,m=Array.prototype.concat,b=Array.prototype.join,v=Array.prototype.slice,w=Math.floor,x="function"==typeof BigInt?BigInt.prototype.valueOf:null,S=Object.getOwnPropertySymbols,O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,j="function"==typeof Symbol&&"object"==typeof Symbol.iterator,P="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol.toStringTag,1)?Symbol.toStringTag:null,T=Object.prototype.propertyIsEnumerable,I=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(u){return u.__proto__}:null);function R(u,t){if(u===1/0||u===-1/0||u!=u||u&&u>-1e3&&u<1e3||g.call(/e/,t))return t;var e=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof u){var r=u<0?-w(-u):w(u);if(r!==u){var n=String(r),o=y.call(t,n.length+1);return d.call(n,e,"$&_")+"."+d.call(d.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return d.call(t,e,"$&_")}var N=e(7002),M=N.custom,k=W(M)?M:null;function L(u,t,e){var r="double"===(e.quoteStyle||t)?'"':"'";return r+u+r}function $(u){return d.call(String(u),/"/g,""")}function _(u){return!("[object Array]"!==H(u)||P&&"object"==typeof u&&P in u)}function U(u){return!("[object RegExp]"!==H(u)||P&&"object"==typeof u&&P in u)}function W(u){if(j)return u&&"object"==typeof u&&u instanceof Symbol;if("symbol"==typeof u)return!0;if(!u||"object"!=typeof u||!O)return!1;try{return O.call(u),!0}catch(u){}return!1}u.exports=function u(t,e,r,n){var i=e||{};if(V(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!V(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var A=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return X(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var h=String(t);return A?R(t,h):h}if("bigint"==typeof t){var g=String(t)+"n";return A?R(t,g):g}var w=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=w&&w>0&&"object"==typeof t)return _(t)?"[Array]":"[Object]";var S,M=function(u,t){var e;if("\t"===u.indent)e="\t";else{if(!("number"==typeof u.indent&&u.indent>0))return null;e=b.call(Array(u.indent+1)," ")}return{base:e,prev:b.call(Array(t+1),e)}}(i,r);if(void 0===n)n=[];else if(q(n,t)>=0)return"[Circular]";function G(t,e,o){if(e&&(n=v.call(n)).push(e),o){var D={depth:i.depth};return V(i,"quoteStyle")&&(D.quoteStyle=i.quoteStyle),u(t,D,r+1,n)}return u(t,i,r+1,n)}if("function"==typeof t&&!U(t)){var Y=function(u){if(u.name)return u.name;var t=C.call(E.call(u),/^function\s*([\w$]+)/);return t?t[1]:null}(t),uu=Q(t,G);return"[Function"+(Y?": "+Y:" (anonymous)")+"]"+(uu.length>0?" { "+b.call(uu,", ")+" }":"")}if(W(t)){var tu=j?d.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):O.call(t);return"object"!=typeof t||j?tu:z(tu)}if((S=t)&&"object"==typeof S&&("undefined"!=typeof HTMLElement&&S instanceof HTMLElement||"string"==typeof S.nodeName&&"function"==typeof S.getAttribute)){for(var eu="<"+B.call(String(t.nodeName)),ru=t.attributes||[],nu=0;nu",t.childNodes&&t.childNodes.length&&(eu+="..."),eu+""+B.call(String(t.nodeName))+">"}if(_(t)){if(0===t.length)return"[]";var ou=Q(t,G);return M&&!function(u){for(var t=0;t=0)return!1;return!0}(ou)?"["+Z(ou,M)+"]":"[ "+b.call(ou,", ")+" ]"}if(function(u){return!("[object Error]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)){var Du=Q(t,G);return"cause"in Error.prototype||!("cause"in t)||T.call(t,"cause")?0===Du.length?"["+String(t)+"]":"{ ["+String(t)+"] "+b.call(Du,", ")+" }":"{ ["+String(t)+"] "+b.call(m.call("[cause]: "+G(t.cause),Du),", ")+" }"}if("object"==typeof t&&a){if(k&&"function"==typeof t[k]&&N)return N(t,{depth:w-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(u){if(!o||!u||"object"!=typeof u)return!1;try{o.call(u);try{c.call(u)}catch(u){return!0}return u instanceof Map}catch(u){}return!1}(t)){var iu=[];return D&&D.call(t,(function(u,e){iu.push(G(e,t,!0)+" => "+G(u,t))})),K("Map",o.call(t),iu,M)}if(function(u){if(!c||!u||"object"!=typeof u)return!1;try{c.call(u);try{o.call(u)}catch(u){return!0}return u instanceof Set}catch(u){}return!1}(t)){var au=[];return F&&F.call(t,(function(u){au.push(G(u,t))})),K("Set",c.call(t),au,M)}if(function(u){if(!l||!u||"object"!=typeof u)return!1;try{l.call(u,l);try{f.call(u,f)}catch(u){return!0}return u instanceof WeakMap}catch(u){}return!1}(t))return J("WeakMap");if(function(u){if(!f||!u||"object"!=typeof u)return!1;try{f.call(u,f);try{l.call(u,l)}catch(u){return!0}return u instanceof WeakSet}catch(u){}return!1}(t))return J("WeakSet");if(function(u){if(!s||!u||"object"!=typeof u)return!1;try{return s.call(u),!0}catch(u){}return!1}(t))return J("WeakRef");if(function(u){return!("[object Number]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(Number(t)));if(function(u){if(!u||"object"!=typeof u||!x)return!1;try{return x.call(u),!0}catch(u){}return!1}(t))return z(G(x.call(t)));if(function(u){return!("[object Boolean]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(p.call(t));if(function(u){return!("[object String]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(String(t)));if(!function(u){return!("[object Date]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)&&!U(t)){var cu=Q(t,G),Fu=I?I(t)===Object.prototype:t instanceof Object||t.constructor===Object,lu=t instanceof Object?"":"null prototype",fu=!Fu&&P&&Object(t)===t&&P in t?y.call(H(t),8,-1):lu?"Object":"",su=(Fu||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(fu||lu?"["+b.call(m.call([],fu||[],lu||[]),": ")+"] ":"");return 0===cu.length?su+"{}":M?su+"{"+Z(cu,M)+"}":su+"{ "+b.call(cu,", ")+" }"}return String(t)};var G=Object.prototype.hasOwnProperty||function(u){return u in this};function V(u,t){return G.call(u,t)}function H(u){return A.call(u)}function q(u,t){if(u.indexOf)return u.indexOf(t);for(var e=0,r=u.length;et.maxStringLength){var e=u.length-t.maxStringLength,r="... "+e+" more character"+(e>1?"s":"");return X(y.call(u,0,t.maxStringLength),t)+r}return L(d.call(d.call(u,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Y),"single",t)}function Y(u){var t=u.charCodeAt(0),e={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return e?"\\"+e:"\\x"+(t<16?"0":"")+h.call(t.toString(16))}function z(u){return"Object("+u+")"}function J(u){return u+" { ? }"}function K(u,t,e,r){return u+" ("+t+") {"+(r?Z(e,r):b.call(e,", "))+"}"}function Z(u,t){if(0===u.length)return"";var e="\n"+t.prev+t.base;return e+b.call(u,","+e)+"\n"+t.prev}function Q(u,t){var e=_(u),r=[];if(e){r.length=u.length;for(var n=0;n0&&!n.call(u,0))for(var A=0;A0)for(var E=0;E=0&&"[object Function]"===t.call(u.callee)),r}},9766:function(u,t,e){"use strict";var r=e(8921),n=Object,o=TypeError;u.exports=r((function(){if(null!=this&&this!==n(this))throw new o("RegExp.prototype.flags getter called on non-object");var u="";return this.hasIndices&&(u+="d"),this.global&&(u+="g"),this.ignoreCase&&(u+="i"),this.multiline&&(u+="m"),this.dotAll&&(u+="s"),this.unicode&&(u+="u"),this.unicodeSets&&(u+="v"),this.sticky&&(u+="y"),u}),"get flags",!0)},483:function(u,t,e){"use strict";var r=e(9722),n=e(2755),o=e(9766),D=e(5113),i=e(7299),a=n(D());r(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},5113:function(u,t,e){"use strict";var r=e(9766),n=e(9722).supportsDescriptors,o=Object.getOwnPropertyDescriptor;u.exports=function(){if(n&&"gim"===/a/gim.flags){var u=o(RegExp.prototype,"flags");if(u&&"function"==typeof u.get&&"boolean"==typeof RegExp.prototype.dotAll&&"boolean"==typeof RegExp.prototype.hasIndices){var t="",e={};if(Object.defineProperty(e,"hasIndices",{get:function(){t+="d"}}),Object.defineProperty(e,"sticky",{get:function(){t+="y"}}),"dy"===t)return u.get}}return r}},7299:function(u,t,e){"use strict";var r=e(9722).supportsDescriptors,n=e(5113),o=Object.getOwnPropertyDescriptor,D=Object.defineProperty,i=TypeError,a=Object.getPrototypeOf,c=/a/;u.exports=function(){if(!r||!a)throw new i("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var u=n(),t=a(c),e=o(t,"flags");return e&&e.get===u||D(t,"flags",{configurable:!0,enumerable:!1,get:u}),u}},7582:function(u,t,e){"use strict";var r=e(3099),n=e(2870),o=e(5494),D=r("RegExp.prototype.exec"),i=n("%TypeError%");u.exports=function(u){if(!o(u))throw new i("`regex` must be a RegExp");return function(t){return null!==D(u,t)}}},8921:function(u,t,e){"use strict";var r=e(6663),n=e(229)(),o=e(5610).functionsHaveConfigurableNames(),D=TypeError;u.exports=function(u,t){if("function"!=typeof u)throw new D("`fn` is not a function");return arguments.length>2&&!!arguments[2]&&!o||(n?r(u,"name",t,!0,!0):r(u,"name",t)),u}},5714:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=e(4538),D=r("%TypeError%"),i=r("%WeakMap%",!0),a=r("%Map%",!0),c=n("WeakMap.prototype.get",!0),F=n("WeakMap.prototype.set",!0),l=n("WeakMap.prototype.has",!0),f=n("Map.prototype.get",!0),s=n("Map.prototype.set",!0),p=n("Map.prototype.has",!0),A=function(u,t){for(var e,r=u;null!==(e=r.next);r=e)if(e.key===t)return r.next=e.next,e.next=u.next,u.next=e,e};u.exports=function(){var u,t,e,r={assert:function(u){if(!r.has(u))throw new D("Side channel does not contain "+o(u))},get:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return c(u,r)}else if(a){if(t)return f(t,r)}else if(e)return function(u,t){var e=A(u,t);return e&&e.value}(e,r)},has:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return l(u,r)}else if(a){if(t)return p(t,r)}else if(e)return function(u,t){return!!A(u,t)}(e,r);return!1},set:function(r,n){i&&r&&("object"==typeof r||"function"==typeof r)?(u||(u=new i),F(u,r,n)):a?(t||(t=new a),s(t,r,n)):(e||(e={key:{},next:null}),function(u,t,e){var r=A(u,t);r?r.value=e:u.next={key:t,next:u.next,value:e}}(e,r,n))}};return r}},3073:function(u,t,e){"use strict";var r=e(7113),n=e(151),o=e(1959),D=e(9497),i=e(5128),a=e(6751),c=e(3099),F=e(1143)(),l=e(483),f=c("String.prototype.indexOf"),s=e(2009),p=function(u){var t=s();if(F&&"symbol"==typeof Symbol.matchAll){var e=o(u,Symbol.matchAll);return e===RegExp.prototype[Symbol.matchAll]&&e!==t?t:e}if(D(u))return t};u.exports=function(u){var t=a(this);if(null!=u){if(D(u)){var e="flags"in u?n(u,"flags"):l(u);if(a(e),f(i(e),"g")<0)throw new TypeError("matchAll requires a global regular expression")}var o=p(u);if(void 0!==o)return r(o,u,[t])}var c=i(t),F=new RegExp(u,"g");return r(p(F),F,[c])}},5155:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(3073),D=e(1794),i=e(3911),a=r(o);n(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},2009:function(u,t,e){"use strict";var r=e(1143)(),n=e(8012);u.exports=function(){return r&&"symbol"==typeof Symbol.matchAll&&"function"==typeof RegExp.prototype[Symbol.matchAll]?RegExp.prototype[Symbol.matchAll]:n}},1794:function(u,t,e){"use strict";var r=e(3073);u.exports=function(){if(String.prototype.matchAll)try{"".matchAll(RegExp.prototype)}catch(u){return String.prototype.matchAll}return r}},8012:function(u,t,e){"use strict";var r=e(1398),n=e(151),o=e(8322),D=e(2449),i=e(3995),a=e(5128),c=e(1874),F=e(483),l=e(8921),f=e(3099)("String.prototype.indexOf"),s=RegExp,p="flags"in RegExp.prototype,A=l((function(u){var t=this;if("Object"!==c(t))throw new TypeError('"this" value must be an Object');var e=a(u),l=function(u,t){var e="flags"in t?n(t,"flags"):a(F(t));return{flags:e,matcher:new u(p&&"string"==typeof e?t:u===s?t.source:t,e)}}(D(t,s),t),A=l.flags,E=l.matcher,C=i(n(t,"lastIndex"));o(E,"lastIndex",C,!0);var y=f(A,"g")>-1,d=f(A,"u")>-1;return r(E,e,y,d)}),"[Symbol.matchAll]",!0);u.exports=A},3911:function(u,t,e){"use strict";var r=e(9722),n=e(1143)(),o=e(1794),D=e(2009),i=Object.defineProperty,a=Object.getOwnPropertyDescriptor;u.exports=function(){var u=o();if(r(String.prototype,{matchAll:u},{matchAll:function(){return String.prototype.matchAll!==u}}),n){var t=Symbol.matchAll||(Symbol.for?Symbol.for("Symbol.matchAll"):Symbol("Symbol.matchAll"));if(r(Symbol,{matchAll:t},{matchAll:function(){return Symbol.matchAll!==t}}),i&&a){var e=a(Symbol,t);e&&!e.configurable||i(Symbol,t,{configurable:!1,enumerable:!1,value:t,writable:!1})}var c=D(),F={};F[t]=c;var l={};l[t]=function(){return RegExp.prototype[t]!==c},r(RegExp.prototype,F,l)}return u}},8125:function(u,t,e){"use strict";var r=e(6751),n=e(5128),o=e(3099)("String.prototype.replace"),D=/^\s$/.test(""),i=D?/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/:/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,a=D?/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/:/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;u.exports=function(){var u=n(r(this));return o(o(u,i,""),a,"")}},9434:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(6751),D=e(8125),i=e(3228),a=e(818),c=r(i()),F=function(u){return o(u),c(u)};n(F,{getPolyfill:i,implementation:D,shim:a}),u.exports=F},3228:function(u,t,e){"use strict";var r=e(8125);u.exports=function(){return String.prototype.trim&&""==="".trim()&&""==="".trim()&&"_"==="_".trim()&&"_"==="_".trim()?String.prototype.trim:r}},818:function(u,t,e){"use strict";var r=e(9722),n=e(3228);u.exports=function(){var u=n();return r(String.prototype,{trim:u},{trim:function(){return String.prototype.trim!==u}}),u}},7002:function(){},1510:function(u,t,e){"use strict";var r=e(2870),n=e(6318),o=e(1874),D=e(2990),i=e(5674),a=r("%TypeError%");u.exports=function(u,t,e){if("String"!==o(u))throw new a("Assertion failed: `S` must be a String");if(!D(t)||t<0||t>i)throw new a("Assertion failed: `length` must be an integer >= 0 and <= 2**53");if("Boolean"!==o(e))throw new a("Assertion failed: `unicode` must be a Boolean");return e?t+1>=u.length?t+1:t+n(u,t)["[[CodeUnitCount]]"]:t+1}},7113:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=r("%TypeError%"),D=e(6287),i=r("%Reflect.apply%",!0)||n("Function.prototype.apply");u.exports=function(u,t){var e=arguments.length>2?arguments[2]:[];if(!D(e))throw new o("Assertion failed: optional `argumentsList`, if provided, must be a List");return i(u,t,e)}},6318:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099),o=e(5541),D=e(959),i=e(1874),a=e(1751),c=n("String.prototype.charAt"),F=n("String.prototype.charCodeAt");u.exports=function(u,t){if("String"!==i(u))throw new r("Assertion failed: `string` must be a String");var e=u.length;if(t<0||t>=e)throw new r("Assertion failed: `position` must be >= 0, and < the length of `string`");var n=F(u,t),l=c(u,t),f=o(n),s=D(n);if(!f&&!s)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!1};if(s||t+1===e)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0};var p=F(u,t+1);return D(p)?{"[[CodePoint]]":a(n,p),"[[CodeUnitCount]]":2,"[[IsUnpairedSurrogate]]":!1}:{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0}}},5702:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(1874);u.exports=function(u,t){if("Boolean"!==n(t))throw new r("Assertion failed: Type(done) is not Boolean");return{value:u,done:t}}},6782:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(2860),o=e(8357),D=e(3301),i=e(6284),a=e(8277),c=e(1874);u.exports=function(u,t,e){if("Object"!==c(u))throw new r("Assertion failed: Type(O) is not Object");if(!i(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");return n(D,a,o,u,t,{"[[Configurable]]":!0,"[[Enumerable]]":!1,"[[Value]]":e,"[[Writable]]":!0})}},1398:function(u,t,e){"use strict";var r=e(2870),n=e(1143)(),o=r("%TypeError%"),D=r("%IteratorPrototype%",!0),i=e(1510),a=e(5702),c=e(6782),F=e(151),l=e(5716),f=e(3500),s=e(8322),p=e(3995),A=e(5128),E=e(1874),C=e(7284),y=e(2263),d=function(u,t,e,r){if("String"!==E(t))throw new o("`S` must be a string");if("Boolean"!==E(e))throw new o("`global` must be a boolean");if("Boolean"!==E(r))throw new o("`fullUnicode` must be a boolean");C.set(this,"[[IteratingRegExp]]",u),C.set(this,"[[IteratedString]]",t),C.set(this,"[[Global]]",e),C.set(this,"[[Unicode]]",r),C.set(this,"[[Done]]",!1)};D&&(d.prototype=l(D)),c(d.prototype,"next",(function(){var u=this;if("Object"!==E(u))throw new o("receiver must be an object");if(!(u instanceof d&&C.has(u,"[[IteratingRegExp]]")&&C.has(u,"[[IteratedString]]")&&C.has(u,"[[Global]]")&&C.has(u,"[[Unicode]]")&&C.has(u,"[[Done]]")))throw new o('"this" value must be a RegExpStringIterator instance');if(C.get(u,"[[Done]]"))return a(void 0,!0);var t=C.get(u,"[[IteratingRegExp]]"),e=C.get(u,"[[IteratedString]]"),r=C.get(u,"[[Global]]"),n=C.get(u,"[[Unicode]]"),D=f(t,e);if(null===D)return C.set(u,"[[Done]]",!0),a(void 0,!0);if(r){if(""===A(F(D,"0"))){var c=p(F(t,"lastIndex")),l=i(e,c,n);s(t,"lastIndex",l,!0)}return a(D,!1)}return C.set(u,"[[Done]]",!0),a(D,!1)})),n&&(y(d.prototype,"RegExp String Iterator"),Symbol.iterator&&"function"!=typeof d.prototype[Symbol.iterator])&&c(d.prototype,Symbol.iterator,(function(){return this})),u.exports=function(u,t,e,r){return new d(u,t,e,r)}},3645:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(7999),o=e(2860),D=e(8357),i=e(8355),a=e(3301),c=e(6284),F=e(8277),l=e(7628),f=e(1874);u.exports=function(u,t,e){if("Object"!==f(u))throw new r("Assertion failed: Type(O) is not Object");if(!c(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var s=n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},e)?e:l(e);if(!n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},s))throw new r("Assertion failed: Desc is not a valid Property Descriptor");return o(a,F,D,u,t,s)}},8357:function(u,t,e){"use strict";var r=e(1489),n=e(1598),o=e(1874);u.exports=function(u){return void 0!==u&&r(o,"Property Descriptor","Desc",u),n(u)}},151:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284),D=e(1874);u.exports=function(u,t){if("Object"!==D(u))throw new r("Assertion failed: Type(O) is not Object");if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},1959:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(9374),o=e(7304),D=e(6284),i=e(4538);u.exports=function(u,t){if(!D(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var e=n(u,t);if(null!=e){if(!o(e))throw new r(i(t)+" is not a function: "+i(e));return e}}},9374:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284);u.exports=function(u,t){if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},8355:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Get]]")&&!r(u,"[[Set]]")))}},6287:function(u,t,e){"use strict";u.exports=e(2403)},7304:function(u,t,e){"use strict";u.exports=e(3655)},4791:function(u,t,e){"use strict";var r=e(6740)("%Reflect.construct%",!0),n=e(3645);try{n({},"",{"[[Get]]":function(){}})}catch(u){n=null}if(n&&r){var o={},D={};n(D,"length",{"[[Get]]":function(){throw o},"[[Enumerable]]":!0}),u.exports=function(u){try{r(u,D)}catch(u){return u===o}}}else u.exports=function(u){return"function"==typeof u&&!!u.prototype}},3301:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Value]]")&&!r(u,"[[Writable]]")))}},6284:function(u){"use strict";u.exports=function(u){return"string"==typeof u||"symbol"==typeof u}},9497:function(u,t,e){"use strict";var r=e(2870)("%Symbol.match%",!0),n=e(5494),o=e(5695);u.exports=function(u){if(!u||"object"!=typeof u)return!1;if(r){var t=u[r];if(void 0!==t)return o(t)}return n(u)}},5716:function(u,t,e){"use strict";var r=e(2870),n=r("%Object.create%",!0),o=r("%TypeError%"),D=r("%SyntaxError%"),i=e(6287),a=e(1874),c=e(7735),F=e(7284),l=e(3413)();u.exports=function(u){if(null!==u&&"Object"!==a(u))throw new o("Assertion failed: `proto` must be null or an object");var t,e=arguments.length<2?[]:arguments[1];if(!i(e))throw new o("Assertion failed: `additionalInternalSlotsList` must be an Array");if(n)t=n(u);else if(l)t={__proto__:u};else{if(null===u)throw new D("native Object.create support is required to create null objects");var r=function(){};r.prototype=u,t=new r}return e.length>0&&c(e,(function(u){F.set(t,u,void 0)})),t}},3500:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099)("RegExp.prototype.exec"),o=e(7113),D=e(151),i=e(7304),a=e(1874);u.exports=function(u,t){if("Object"!==a(u))throw new r("Assertion failed: `R` must be an Object");if("String"!==a(t))throw new r("Assertion failed: `S` must be a String");var e=D(u,"exec");if(i(e)){var c=o(e,u,[t]);if(null===c||"Object"===a(c))return c;throw new r('"exec" method must return `null` or an Object')}return n(u,t)}},6751:function(u,t,e){"use strict";u.exports=e(9572)},8277:function(u,t,e){"use strict";var r=e(159);u.exports=function(u,t){return u===t?0!==u||1/u==1/t:r(u)&&r(t)}},8322:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(6284),o=e(8277),D=e(1874),i=function(){try{return delete[].length,!0}catch(u){return!1}}();u.exports=function(u,t,e,a){if("Object"!==D(u))throw new r("Assertion failed: `O` must be an Object");if(!n(t))throw new r("Assertion failed: `P` must be a Property Key");if("Boolean"!==D(a))throw new r("Assertion failed: `Throw` must be a Boolean");if(a){if(u[t]=e,i&&!o(u[t],e))throw new r("Attempted to assign to readonly property.");return!0}try{return u[t]=e,!i||o(u[t],e)}catch(u){return!1}}},2449:function(u,t,e){"use strict";var r=e(2870),n=r("%Symbol.species%",!0),o=r("%TypeError%"),D=e(4791),i=e(1874);u.exports=function(u,t){if("Object"!==i(u))throw new o("Assertion failed: Type(O) is not Object");var e=u.constructor;if(void 0===e)return t;if("Object"!==i(e))throw new o("O.constructor is not an Object");var r=n?e[n]:void 0;if(null==r)return t;if(D(r))return r;throw new o("no constructor found")}},6207:function(u,t,e){"use strict";var r=e(2870),n=r("%Number%"),o=r("%RegExp%"),D=r("%TypeError%"),i=r("%parseInt%"),a=e(3099),c=e(7582),F=a("String.prototype.slice"),l=c(/^0b[01]+$/i),f=c(/^0o[0-7]+$/i),s=c(/^[-+]0x[0-9a-f]+$/i),p=c(new o("["+["
","",""].join("")+"]","g")),A=e(9434),E=e(1874);u.exports=function u(t){if("String"!==E(t))throw new D("Assertion failed: `argument` is not a String");if(l(t))return n(i(F(t,2),2));if(f(t))return n(i(F(t,2),8));if(p(t)||s(t))return NaN;var e=A(t);return e!==t?u(e):n(t)}},5695:function(u){"use strict";u.exports=function(u){return!!u}},1200:function(u,t,e){"use strict";var r=e(6542),n=e(5693),o=e(159),D=e(1117);u.exports=function(u){var t=r(u);return o(t)||0===t?0:D(t)?n(t):t}},3995:function(u,t,e){"use strict";var r=e(5674),n=e(1200);u.exports=function(u){var t=n(u);return t<=0?0:t>r?r:t}},6542:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%Number%"),D=e(8606),i=e(703),a=e(6207);u.exports=function(u){var t=D(u)?u:i(u,o);if("symbol"==typeof t)throw new n("Cannot convert a Symbol value to a number");if("bigint"==typeof t)throw new n("Conversion from 'BigInt' to 'number' is not allowed.");return"string"==typeof t?a(t):o(t)}},703:function(u,t,e){"use strict";var r=e(7358);u.exports=function(u){return arguments.length>1?r(u,arguments[1]):r(u)}},7628:function(u,t,e){"use strict";var r=e(9545),n=e(2870)("%TypeError%"),o=e(1874),D=e(5695),i=e(7304);u.exports=function(u){if("Object"!==o(u))throw new n("ToPropertyDescriptor requires an object");var t={};if(r(u,"enumerable")&&(t["[[Enumerable]]"]=D(u.enumerable)),r(u,"configurable")&&(t["[[Configurable]]"]=D(u.configurable)),r(u,"value")&&(t["[[Value]]"]=u.value),r(u,"writable")&&(t["[[Writable]]"]=D(u.writable)),r(u,"get")){var e=u.get;if(void 0!==e&&!i(e))throw new n("getter must be a function");t["[[Get]]"]=e}if(r(u,"set")){var a=u.set;if(void 0!==a&&!i(a))throw new n("setter must be a function");t["[[Set]]"]=a}if((r(t,"[[Get]]")||r(t,"[[Set]]"))&&(r(t,"[[Value]]")||r(t,"[[Writable]]")))throw new n("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return t}},5128:function(u,t,e){"use strict";var r=e(2870),n=r("%String%"),o=r("%TypeError%");u.exports=function(u){if("symbol"==typeof u)throw new o("Cannot convert a Symbol value to a string");return n(u)}},1874:function(u,t,e){"use strict";var r=e(6101);u.exports=function(u){return"symbol"==typeof u?"Symbol":"bigint"==typeof u?"BigInt":r(u)}},1751:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%String.fromCharCode%"),D=e(5541),i=e(959);u.exports=function(u,t){if(!D(u)||!i(t))throw new n("Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code");return o(u)+o(t)}},3567:function(u,t,e){"use strict";var r=e(1874),n=Math.floor;u.exports=function(u){return"BigInt"===r(u)?u:n(u)}},5693:function(u,t,e){"use strict";var r=e(2870),n=e(3567),o=r("%TypeError%");u.exports=function(u){if("number"!=typeof u&&"bigint"!=typeof u)throw new o("argument must be a Number or a BigInt");var t=u<0?-n(-u):n(u);return 0===t?0:t}},9572:function(u,t,e){"use strict";var r=e(2870)("%TypeError%");u.exports=function(u,t){if(null==u)throw new r(t||"Cannot call method on "+u);return u}},6101:function(u){"use strict";u.exports=function(u){return null===u?"Null":void 0===u?"Undefined":"function"==typeof u||"object"==typeof u?"Object":"number"==typeof u?"Number":"boolean"==typeof u?"Boolean":"string"==typeof u?"String":void 0}},6740:function(u,t,e){"use strict";u.exports=e(2870)},2860:function(u,t,e){"use strict";var r=e(229),n=e(2870),o=r()&&n("%Object.defineProperty%",!0),D=r.hasArrayLengthDefineBug(),i=D&&e(2403),a=e(3099)("Object.prototype.propertyIsEnumerable");u.exports=function(u,t,e,r,n,c){if(!o){if(!u(c))return!1;if(!c["[[Configurable]]"]||!c["[[Writable]]"])return!1;if(n in r&&a(r,n)!==!!c["[[Enumerable]]"])return!1;var F=c["[[Value]]"];return r[n]=F,t(r[n],F)}return D&&"length"===n&&"[[Value]]"in c&&i(r)&&r.length!==c["[[Value]]"]?(r.length=c["[[Value]]"],r.length===c["[[Value]]"]):(o(r,n,e(c)),!0)}},2403:function(u,t,e){"use strict";var r=e(2870)("%Array%"),n=!r.isArray&&e(3099)("Object.prototype.toString");u.exports=r.isArray||function(u){return"[object Array]"===n(u)}},1489:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%SyntaxError%"),D=e(9545),i=e(2990),a={"Property Descriptor":function(u){var t={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};if(!u)return!1;for(var e in u)if(D(u,e)&&!t[e])return!1;var r=D(u,"[[Value]]"),o=D(u,"[[Get]]")||D(u,"[[Set]]");if(r&&o)throw new n("Property Descriptors may not be both accessor and data descriptors");return!0},"Match Record":e(900),"Iterator Record":function(u){return D(u,"[[Iterator]]")&&D(u,"[[NextMethod]]")&&D(u,"[[Done]]")},"PromiseCapability Record":function(u){return!!u&&D(u,"[[Resolve]]")&&"function"==typeof u["[[Resolve]]"]&&D(u,"[[Reject]]")&&"function"==typeof u["[[Reject]]"]&&D(u,"[[Promise]]")&&u["[[Promise]]"]&&"function"==typeof u["[[Promise]]"].then},"AsyncGeneratorRequest Record":function(u){return!!u&&D(u,"[[Completion]]")&&D(u,"[[Capability]]")&&a["PromiseCapability Record"](u["[[Capability]]"])},"RegExp Record":function(u){return u&&D(u,"[[IgnoreCase]]")&&"boolean"==typeof u["[[IgnoreCase]]"]&&D(u,"[[Multiline]]")&&"boolean"==typeof u["[[Multiline]]"]&&D(u,"[[DotAll]]")&&"boolean"==typeof u["[[DotAll]]"]&&D(u,"[[Unicode]]")&&"boolean"==typeof u["[[Unicode]]"]&&D(u,"[[CapturingGroupsCount]]")&&"number"==typeof u["[[CapturingGroupsCount]]"]&&i(u["[[CapturingGroupsCount]]"])&&u["[[CapturingGroupsCount]]"]>=0}};u.exports=function(u,t,e,r){var D=a[t];if("function"!=typeof D)throw new o("unknown record type: "+t);if("Object"!==u(r)||!D(r))throw new n(e+" must be a "+t)}},7735:function(u){"use strict";u.exports=function(u,t){for(var e=0;e=55296&&u<=56319}},900:function(u,t,e){"use strict";var r=e(9545);u.exports=function(u){return r(u,"[[StartIndex]]")&&r(u,"[[EndIndex]]")&&u["[[StartIndex]]"]>=0&&u["[[EndIndex]]"]>=u["[[StartIndex]]"]&&String(parseInt(u["[[StartIndex]]"],10))===String(u["[[StartIndex]]"])&&String(parseInt(u["[[EndIndex]]"],10))===String(u["[[EndIndex]]"])}},159:function(u){"use strict";u.exports=Number.isNaN||function(u){return u!=u}},8606:function(u){"use strict";u.exports=function(u){return null===u||"function"!=typeof u&&"object"!=typeof u}},7999:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=r("%TypeError%");u.exports=function(u,t){if("Object"!==u.Type(t))return!1;var e={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var r in t)if(n(t,r)&&!e[r])return!1;if(u.IsDataDescriptor(t)&&u.IsAccessorDescriptor(t))throw new o("Property Descriptors may not be both accessor and data descriptors");return!0}},959:function(u){"use strict";u.exports=function(u){return"number"==typeof u&&u>=56320&&u<=57343}},5674:function(u){"use strict";u.exports=Number.MAX_SAFE_INTEGER||9007199254740991}},t={};function e(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return u[r](o,o.exports,e),o.exports}e.n=function(u){var t=u&&u.__esModule?function(){return u.default}:function(){return u};return e.d(t,{a:t}),t},e.d=function(u,t){for(var r in t)e.o(t,r)&&!e.o(u,r)&&Object.defineProperty(u,r,{enumerable:!0,get:t[r]})},e.o=function(u,t){return Object.prototype.hasOwnProperty.call(u,t)},function(){"use strict";var u=e(1844);function t(t,e,r){for(var n=0,o=[];-1!==n;)-1!==(n=t.indexOf(e,n))&&(o.push({start:n,end:n+e.length,errors:0}),n+=1);return o.length>0?o:(0,u.Z)(t,e,r)}function r(u,e){return 0===e.length||0===u.length?0:1-t(u,e,e.length)[0].errors/e.length}function n(u){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(u){return typeof u}:function(u){return u&&"function"==typeof Symbol&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},n(u)}function o(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1?t-1:0),r=1;ro?(i.push({node:n,offset:o-c}),o=e.shift()):(a=D.nextNode(),c+=n.data.length);for(;void 0!==o&&n&&c===o;)i.push({node:n,offset:n.data.length}),o=e.shift();if(void 0!==o)throw new RangeError("Offset exceeds text length");return i}var f=function(){function u(t,e){if(D(this,u),e<0)throw new Error("Offset is invalid");this.element=t,this.offset=e}return a(u,[{key:"relativeTo",value:function(t){if(!t.contains(this.element))throw new Error("Parent is not an ancestor of current element");for(var e=this.element,r=this.offset;e!==t;)r+=F(e),e=e.parentElement;return new u(e,r)}},{key:"resolve",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{return l(this.element,this.offset)[0]}catch(n){if(0===this.offset&&void 0!==u.direction){var t=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);t.currentNode=this.element;var e=1===u.direction,r=e?t.nextNode():t.previousNode();if(!r)throw n;return{node:r,offset:e?0:r.data.length}}throw n}}}],[{key:"fromCharOffset",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:return u.fromPoint(t,e);case Node.ELEMENT_NODE:return new u(t,e);default:throw new Error("Node is not an element or text node")}}},{key:"fromPoint",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:if(e<0||e>t.data.length)throw new Error("Text node offset is out of range");if(!t.parentElement)throw new Error("Text node has no parent");var r=F(t)+e;return new u(t.parentElement,r);case Node.ELEMENT_NODE:if(e<0||e>t.childNodes.length)throw new Error("Child node offset is out of range");for(var n=0,o=0;o2&&void 0!==arguments[2]?arguments[2]:{};C(this,u),this.root=t,this.exact=e,this.context=r}return d(u,[{key:"toSelector",value:function(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}},{key:"toRange",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.toPositionAnchor(u).toRange()}},{key:"toPositionAnchor",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=function(u,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(0===e.length)return null;var o=Math.min(256,e.length/2),D=t(u,e,o);if(0===D.length)return null;var i=function(t){var o=1-t.errors/e.length,D=n.prefix?r(u.slice(Math.max(0,t.start-n.prefix.length),t.start),n.prefix):1,i=n.suffix?r(u.slice(t.end,t.end+n.suffix.length),n.suffix):1,a=1;return"number"==typeof n.hint&&(a=1-Math.abs(t.start-n.hint)/u.length),(50*o+20*D+20*i+2*a)/92},a=D.map((function(u){return{start:u.start,end:u.end,score:i(u)}}));return a.sort((function(u,t){return t.score-u.score})),a[0]}(this.root.textContent,this.exact,E(E({},this.context),{},{hint:u.hint}));if(!e)throw new Error("Quote not found");return new B(this.root,e.start,e.end)}}],[{key:"fromRange",value:function(t,e){var r=t.textContent,n=s.fromRange(e).relativeTo(t),o=n.start.offset,D=n.end.offset;return new u(t,r.slice(o,D),{prefix:r.slice(Math.max(0,o-32),o),suffix:r.slice(D,Math.min(r.length,D+32))})}},{key:"fromSelector",value:function(t,e){var r=e.prefix,n=e.suffix;return new u(t,e.exact,{prefix:r,suffix:n})}}]),u}();function m(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e.1&&(t?t.remove():((t=document.createElement("div")).setAttribute("id",u),t.style.breakBefore="column",t.innerHTML="",document.body.appendChild(t)))}}(),P()}))})).observe(document.body)}),!1);var b=1;function v(){var u=document.documentElement.style;return"readium-scroll-on"==u.getPropertyValue("--USER__view").trim()||"readium-scroll-on"==u.getPropertyValue("--USER__scroll").trim()}function w(){return"rtl"==document.body.dir.toLowerCase()}function x(){return window.getComputedStyle(document.documentElement).getPropertyValue("writing-mode").startsWith("vertical")}function S(u){return v()?document.scrollingElement.scrollTop=u.top+window.scrollY:document.scrollingElement.scrollLeft=j(u.left+window.scrollX),!0}function O(u){if(v())throw"Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";var t=window.scrollX;return document.scrollingElement.scrollLeft=j(u),Math.abs(t-u)/b>.01}function j(u){var t=u+(w()?-1:1);return t-t%b}function P(){if(!v()){var u=window.scrollX,t=(w()?-1:1)*(b/2);document.scrollingElement.scrollLeft=j(u+t)}}function T(u){try{var t,e=u.locations,r=u.text;if(r&&r.highlight)return e&&e.cssSelector&&(t=document.querySelector(e.cssSelector)),t||(t=document.body),new g(t,r.highlight,{prefix:r.before,suffix:r.after}).toRange();if(e){var n=null;if(!n&&e.cssSelector&&(n=document.querySelector(e.cssSelector)),!n&&e.fragments){var o,D=function(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return m(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?m(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}(e.fragments);try{for(D.s();!(o=D.n()).done;){var i=o.value;if(n=document.getElementById(i))break}}catch(u){D.e(u)}finally{D.f()}}if(n){var a=document.createRange();return a.setStartBefore(n),a.setEndAfter(n),a}}}catch(u){M(u)}return null}function I(u,t){null===t||""===t?R(u):document.documentElement.style.setProperty(u,t,"important")}function R(u){document.documentElement.style.removeProperty(u)}function N(){var u=Array.prototype.slice.call(arguments).join(" ");Android.log(u)}function M(u){Android.logError(u,"",0)}function k(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return L(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?L(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function L(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1&&o.height>1){var D,i=k(u);try{for(i.s();!(D=i.n()).done;){var a=D.value;if(o!==a&&r.has(a)&&V(a,o,1)){J("CLIENT RECT: remove contained"),r.delete(o);break}}}catch(u){i.e(u)}finally{i.f()}}else J("CLIENT RECT: remove tiny"),r.delete(o)}}catch(u){n.e(u)}finally{n.f()}return Array.from(r)}(W(r,1,t)),i=q(D),a=i.length-1;a>=0;a--){var c=i[a];if(!(c.width*c.height>4)){if(!(i.length>1)){J("CLIENT RECT: remove small, but keep otherwise empty!");break}J("CLIENT RECT: remove small"),i.splice(a,1)}}return J("CLIENT RECT: reduced ".concat(r.length," --\x3e ").concat(i.length)),i}function W(u,t,e){for(var r=0;rt||z(u.right,t,r))&&(u.tope||z(u.bottom,e,r))}function q(u){for(var t=0;t=0&&z(u.left,t.right,e))&&(t.left=0&&z(t.left,u.right,e))&&(u.top=0&&z(u.top,t.bottom,e))&&(t.top=0&&z(t.top,u.bottom,e))}function z(u,t,e){return Math.abs(u-t)<=e}function J(){$&&N.apply(null,arguments)}function K(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=Q(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function Z(u,t){return function(u){if(Array.isArray(u))return u}(u)||function(u,t){var e=null==u?null:"undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(null!=e){var r,n,o,D,i=[],a=!0,c=!1;try{if(o=(e=e.call(u)).next,0===t){if(Object(e)!==e)return;a=!1}else for(;!(a=(r=o.call(e)).done)&&(i.push(r.value),i.length!==t);a=!0);}catch(u){c=!0,n=u}finally{try{if(!a&&null!=e.return&&(D=e.return(),Object(D)!==D))return}finally{if(c)throw n}}return i}}(u,t)||Q(u,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(u,t){if(u){if("string"==typeof u)return uu(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?uu(u,t):void 0}}function uu(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e "},Du={id:"id",class:"class",tag:"tag",attribute:"attribute",nthchild:"nthchild",nthoftype:"nthoftype"},iu="CssSelectorGenerator";function au(u="unknown problem",...t){console.warn(`${iu}: ${u}`,...t)}const cu={selectors:[Du.id,Du.class,Du.tag,Du.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function Fu(u){return u instanceof RegExp}function lu(u){return["string","function"].includes(typeof u)||Fu(u)}function fu(u){return Array.isArray(u)?u.filter(lu):[]}function su(u){const t=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(u){return u instanceof Node}(u)&&t.includes(u.nodeType)}function pu(u,t){if(su(u))return u.contains(t)||au("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element's real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),u;const e=t.getRootNode({composed:!1});return su(e)?(e!==document&&au("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),e):t.ownerDocument.querySelector(":root")}function Au(u){return"number"==typeof u?u:Number.POSITIVE_INFINITY}function Eu(u=[]){const[t=[],...e]=u;return 0===e.length?t:e.reduce(((u,t)=>u.filter((u=>t.includes(u)))),t)}function Cu(u){return[].concat(...u)}function yu(u){const t=u.map((u=>{if(Fu(u))return t=>u.test(t);if("function"==typeof u)return t=>{const e=u(t);return"boolean"!=typeof e?(au("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",u),!1):e};if("string"==typeof u){const t=new RegExp("^"+u.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")+"$");return u=>t.test(u)}return au("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",u),()=>!1}));return u=>t.some((t=>t(u)))}function du(u,t,e){const r=Array.from(pu(e,u[0]).querySelectorAll(t));return r.length===u.length&&u.every((u=>r.includes(u)))}function hu(u,t){t=null!=t?t:function(u){return u.ownerDocument.querySelector(":root")}(u);const e=[];let r=u;for(;nu(r)&&r!==t;)e.push(r),r=r.parentElement;return e}function Bu(u,t){return Eu(u.map((u=>hu(u,t))))}const gu=new RegExp(["^$","\\s"].join("|")),mu=new RegExp(["^$"].join("|")),bu=[Du.nthoftype,Du.tag,Du.id,Du.class,Du.attribute,Du.nthchild],vu=yu(["class","id","ng-*"]);function wu({name:u}){return`[${u}]`}function xu({name:u,value:t}){return`[${u}='${t}']`}function Su({nodeName:u,nodeValue:t}){return{name:(e=u,e.replace(/:/g,"\\:")),value:Uu(t)};var e}function Ou(u){const t=Array.from(u.attributes).filter((t=>function({nodeName:u},t){const e=t.tagName.toLowerCase();return!(["input","option"].includes(e)&&"value"===u||vu(u))}(t,u))).map(Su);return[...t.map(wu),...t.map(xu)]}function ju(u){return(u.getAttribute("class")||"").trim().split(/\s+/).filter((u=>!mu.test(u))).map((u=>`.${Uu(u)}`))}function Pu(u){const t=u.getAttribute("id")||"",e=`#${Uu(t)}`,r=u.getRootNode({composed:!1});return!gu.test(t)&&du([u],e,r)?[e]:[]}function Tu(u){const t=u.parentNode;if(t){const e=Array.from(t.childNodes).filter(nu).indexOf(u);if(e>-1)return[`:nth-child(${e+1})`]}return[]}function Iu(u){return[Uu(u.tagName.toLowerCase())]}function Ru(u){const t=[...new Set(Cu(u.map(Iu)))];return 0===t.length||t.length>1?[]:[t[0]]}function Nu(u){const t=Ru([u])[0],e=u.parentElement;if(e){const r=Array.from(e.children).filter((u=>u.tagName.toLowerCase()===t)),n=r.indexOf(u);if(n>-1)return[`${t}:nth-of-type(${n+1})`]}return[]}function Mu(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){return Array.from(function*(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){let e=0,r=Lu(1);for(;r.length<=u.length&&eu[t]));yield t,r=ku(r,u.length-1)}}(u,{maxResults:t}))}function ku(u=[],t=0){const e=u.length;if(0===e)return[];const r=[...u];r[e-1]+=1;for(let u=e-1;u>=0;u--)if(r[u]>t){if(0===u)return Lu(e+1);r[u-1]++,r[u]=r[u-1]+1}return r[e-1]>t?Lu(e+1):r}function Lu(u=1){return Array.from(Array(u).keys())}const $u=":".charCodeAt(0).toString(16).toUpperCase(),_u=/[ !"#$%&'()\[\]{|}<>*+,./;=?@^`~\\]/;function Uu(u=""){var t,e;return null!==(e=null===(t=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===t?void 0:t.call(CSS,u))&&void 0!==e?e:function(u=""){return u.split("").map((u=>":"===u?`\\${$u} `:_u.test(u)?`\\${u}`:escape(u).replace(/%/g,"\\"))).join("")}(u)}const Wu={tag:Ru,id:function(u){return 0===u.length||u.length>1?[]:Pu(u[0])},class:function(u){return Eu(u.map(ju))},attribute:function(u){return Eu(u.map(Ou))},nthchild:function(u){return Eu(u.map(Tu))},nthoftype:function(u){return Eu(u.map(Nu))}},Gu={tag:Iu,id:Pu,class:ju,attribute:Ou,nthchild:Tu,nthoftype:Nu};function Vu(u){return u.includes(Du.tag)||u.includes(Du.nthoftype)?[...u]:[...u,Du.tag]}function Hu(u={}){const t=[...bu];return u[Du.tag]&&u[Du.nthoftype]&&t.splice(t.indexOf(Du.tag),1),t.map((t=>{return(r=u)[e=t]?r[e].join(""):"";var e,r})).join("")}function qu(u,t,e="",r){const n=function(u,t){return""===t?u:function(u,t){return[...u.map((u=>t+ou.DESCENDANT+u)),...u.map((u=>t+ou.CHILD+u))]}(u,t)}(function(u,t,e){const r=function(u,t){const{blacklist:e,whitelist:r,combineWithinSelector:n,maxCombinations:o}=t,D=yu(e),i=yu(r);return function(u){const{selectors:t,includeTag:e}=u,r=[].concat(t);return e&&!r.includes("tag")&&r.push("tag"),r}(t).reduce(((t,e)=>{const r=function(u,t){var e;return(null!==(e=Wu[t])&&void 0!==e?e:()=>[])(u)}(u,e),a=function(u=[],t,e){return u.filter((u=>e(u)||!t(u)))}(r,D,i),c=function(u=[],t){return u.sort(((u,e)=>{const r=t(u),n=t(e);return r&&!n?-1:!r&&n?1:0}))}(a,i);return t[e]=n?Mu(c,{maxResults:o}):c.map((u=>[u])),t}),{})}(u,e),n=function(u,t){return function(u){const{selectors:t,combineBetweenSelectors:e,includeTag:r,maxCandidates:n}=u,o=e?Mu(t,{maxResults:n}):t.map((u=>[u]));return r?o.map(Vu):o}(t).map((t=>function(u,t){const e={};return u.forEach((u=>{const r=t[u];r.length>0&&(e[u]=r)})),function(u={}){let t=[];return Object.entries(u).forEach((([u,e])=>{t=e.flatMap((e=>0===t.length?[{[u]:e}]:t.map((t=>Object.assign(Object.assign({},t),{[u]:e})))))})),t}(e).map(Hu)}(t,u))).filter((u=>u.length>0))}(r,e),o=Cu(n);return[...new Set(o)]}(u,r.root,r),e);for(const t of n)if(du(u,t,r.root))return t;return null}function Xu(u){return{value:u,include:!1}}function Yu({selectors:u,operator:t}){let e=[...bu];u[Du.tag]&&u[Du.nthoftype]&&(e=e.filter((u=>u!==Du.tag)));let r="";return e.forEach((t=>{(u[t]||[]).forEach((({value:u,include:t})=>{t&&(r+=u)}))})),t+r}function zu(u){return[":root",...hu(u).reverse().map((u=>{const t=function(u,t,e=ou.NONE){const r={};return t.forEach((t=>{Reflect.set(r,t,function(u,t){return Gu[t](u)}(u,t).map(Xu))})),{element:u,operator:e,selectors:r}}(u,[Du.nthchild],ou.CHILD);return t.selectors.nthchild.forEach((u=>{u.include=!0})),t})).map(Yu)].join("")}function Ju(u,t={}){const e=function(u){(u instanceof NodeList||u instanceof HTMLCollection)&&(u=Array.from(u));const t=(Array.isArray(u)?u:[u]).filter(nu);return[...new Set(t)]}(u),r=function(u,t={}){const e=Object.assign(Object.assign({},cu),t);return{selectors:(r=e.selectors,Array.isArray(r)?r.filter((u=>{return t=Du,e=u,Object.values(t).includes(e);var t,e})):[]),whitelist:fu(e.whitelist),blacklist:fu(e.blacklist),root:pu(e.root,u),combineWithinSelector:!!e.combineWithinSelector,combineBetweenSelectors:!!e.combineBetweenSelectors,includeTag:!!e.includeTag,maxCombinations:Au(e.maxCombinations),maxCandidates:Au(e.maxCandidates)};var r}(e[0],t);let n="",o=r.root;function D(){return function(u,t,e="",r){if(0===u.length)return null;const n=[u.length>1?u:[],...Bu(u,t).map((u=>[u]))];for(const u of n){const t=qu(u,0,e,r);if(t)return{foundElements:u,selector:t}}return null}(e,o,n,r)}let i=D();for(;i;){const{foundElements:u,selector:t}=i;if(du(e,t,r.root))return t;o=u[0],n=t,i=D()}return e.length>1?e.map((u=>Ju(u,r))).join(", "):function(u){return u.map(zu).join(", ")}(e)}function Ku(u){return null==u?null:-1!=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"].indexOf(u.nodeName.toLowerCase())||u.hasAttribute("contenteditable")&&"false"!=u.getAttribute("contenteditable").toLowerCase()?u.outerHTML:u.parentElement?Ku(u.parentElement):null}function Zu(u){for(var t=0;t0&&t.top0&&t.left=6||Math.abs(t.offsetY)>=6)&&(e=!1,n=Android.onDragStart(JSON.stringify(t))):n=Android.onDragMove(JSON.stringify(t)),n&&(u.stopPropagation(),u.preventDefault())}}),{passive:!1});var t=void 0,e=!1,r=window.devicePixelRatio}(document)})),window.addEventListener("keydown",(function(u){et(u)||(rt(u),nt(u,"down"))})),window.addEventListener("keyup",(function(u){et(u)||(rt(u),nt(u,"up"))}));var ot=e(5155);e.n(ot)().shim();var Dt=!0;function it(){Dt&&N.apply(null,arguments)}window.addEventListener("load",(function(){var u=!1;document.addEventListener("selectionchange",(function(){var t=window.getSelection().isCollapsed;t&&u?(u=!1,Android.onSelectionEnd(),P()):t||u||(u=!0,Android.onSelectionStart())}))}),!1),window.readium={scrollToId:function(u){var t=document.getElementById(u);return!!t&&S(t.getBoundingClientRect())},scrollToPosition:function(u){if(u<0||u>1)throw"scrollToPosition() must be given a position from 0.0 to 1.0";var t;v()?x()?(t=document.scrollingElement.scrollWidth*u,document.scrollingElement.scrollLeft=-t):(t=document.scrollingElement.scrollHeight*u,document.scrollingElement.scrollTop=t):(t=document.scrollingElement.scrollWidth*u*(w()?-1:1),document.scrollingElement.scrollLeft=j(t))},scrollToLocator:function(u){var t=T(u);return!!t&&function(u){return S(u.getBoundingClientRect())}(t)},scrollLeft:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX-b,e=w()?-(u-b):0;return O(Math.max(t,e))},scrollRight:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX+b,e=w()?0:u-b;return O(Math.min(t,e))},scrollToStart:function(){v()&&!x()?document.scrollingElement.scrollTop=0:document.scrollingElement.scrollLeft=0},scrollToEnd:function(){var u=document.scrollingElement;if(v())x()?u.scrollLeft=-document.scrollingElement.scrollWidth:u.scrollTop=document.body.scrollHeight;else{var t=w()?-1:1;u.scrollLeft=j(u.scrollWidth*t)}},setCSSProperties:function(u){for(var t in u)I(t,u[t])},setProperty:I,removeProperty:R,getCurrentSelection:function(){var u=function(){var u=window.getSelection();if(u&&!u.isCollapsed){var t=u.toString();if(0!==t.trim().replace(/\n/g," ").replace(/\s\s+/g," ").length&&u.anchorNode&&u.focusNode){var e=1===u.rangeCount?u.getRangeAt(0):function(u,t,e,r){var n=new Range;if(n.setStart(u,t),n.setEnd(e,r),!n.collapsed)return n;it(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");var o=new Range;if(o.setStart(e,r),o.setEnd(u,t),!o.collapsed)return it(">>> createOrderedRange RANGE REVERSE OK."),n;it(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!")}(u.anchorNode,u.anchorOffset,u.focusNode,u.focusOffset);if(e&&!e.collapsed){var r=document.body.textContent,n=s.fromRange(e).relativeTo(document.body),o=n.start.offset,D=n.end.offset,i=r.slice(Math.max(0,o-200),o),a=i.search(/(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/g);-1!==a&&(i=i.slice(a+1));var c=r.slice(D,Math.min(r.length,D+200)),F=Array.from(c.matchAll(/(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g)).pop();return void 0!==F&&F.index>1&&(c=c.slice(0,F.index+1)),{highlight:t,before:i,after:c}}it("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!")}}}();return u?{text:u,rect:function(){try{var u=window.getSelection();if(!u)return;return _(u.getRangeAt(0).getBoundingClientRect())}catch(u){return M(u),null}}()}:null},registerDecorationTemplates:function(u){for(var t="",e=0,r=Object.entries(u);e>31&1}function n(u,t,e,n){var o=u.P[e],D=u.M[e],i=n>>>31,a=t[e]|i,c=a|D,F=(a&o)+o^o|a,l=D|~(F|o),f=o&F,s=r(l&u.lastRowMask[e])-r(f&u.lastRowMask[e]);return l<<=1,f<<=1,o=(f|=i)|~(c|(l|=r(n)-i)),D=l&c,u.P[e]=o,u.M[e]=D,s}function o(u,t,e){if(0===t.length)return[];e=Math.min(e,t.length);var r=[],o=32,D=Math.ceil(t.length/o)-1,i={P:new Uint32Array(D+1),M:new Uint32Array(D+1),lastRowMask:new Uint32Array(D+1)};i.lastRowMask.fill(1<<31),i.lastRowMask[D]=1<<(t.length-1)%o;for(var a=new Uint32Array(D+1),c=new Map,F=[],l=0;l<256;l++)F.push(a);for(var f=0;f=t.length||t.charCodeAt(C)===s&&(p[A]|=1<0&&d[y]>=e+o;)y-=1;y===D&&d[y]<=e&&(d[y]-1?n(e):e}},2755:function(u,t,e){"use strict";var r=e(3569),n=e(2870),o=n("%Function.prototype.apply%"),D=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||r.call(D,o),a=n("%Object.getOwnPropertyDescriptor%",!0),c=n("%Object.defineProperty%",!0),F=n("%Math.max%");if(c)try{c({},"a",{value:1})}catch(u){c=null}u.exports=function(u){var t=i(r,D,arguments);return a&&c&&a(t,"length").configurable&&c(t,"length",{value:1+F(0,u.length-(arguments.length-1))}),t};var l=function(){return i(r,o,arguments)};c?c(u.exports,"apply",{value:l}):u.exports.apply=l},6663:function(u,t,e){"use strict";var r=e(229)(),n=e(2870),o=r&&n("%Object.defineProperty%",!0),D=n("%SyntaxError%"),i=n("%TypeError%"),a=e(658);u.exports=function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new i("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new i("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new i("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new i("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new i("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new i("`loose`, if provided, must be a boolean");var r=arguments.length>3?arguments[3]:null,n=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,F=arguments.length>6&&arguments[6],l=!!a&&a(u,t);if(o)o(u,t,{configurable:null===c&&l?l.configurable:!c,enumerable:null===r&&l?l.enumerable:!r,value:e,writable:null===n&&l?l.writable:!n});else{if(!F&&(r||n||c))throw new D("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");u[t]=e}}},9722:function(u,t,e){"use strict";var r=e(2051),n="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),o=Object.prototype.toString,D=Array.prototype.concat,i=e(6663),a=e(229)(),c=function(u,t,e,r){if(t in u)if(!0===r){if(u[t]===e)return}else if("function"!=typeof(n=r)||"[object Function]"!==o.call(n)||!r())return;var n;a?i(u,t,e,!0):i(u,t,e)},F=function(u,t){var e=arguments.length>2?arguments[2]:{},o=r(t);n&&(o=D.call(o,Object.getOwnPropertySymbols(t)));for(var i=0;i2&&arguments[2]&&arguments[2].force;!D||!e&&o(u,D)||(r?r(u,D,{configurable:!0,enumerable:!1,value:t,writable:!1}):u[D]=t)}},7358:function(u,t,e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator,n=e(7959),o=e(3655),D=e(455),i=e(8760);u.exports=function(u){if(n(u))return u;var t,e="default";if(arguments.length>1&&(arguments[1]===String?e="string":arguments[1]===Number&&(e="number")),r&&(Symbol.toPrimitive?t=function(u,t){var e=u[t];if(null!=e){if(!o(e))throw new TypeError(e+" returned for property "+t+" of object "+u+" is not a function");return e}}(u,Symbol.toPrimitive):i(u)&&(t=Symbol.prototype.valueOf)),void 0!==t){var a=t.call(u,e);if(n(a))return a;throw new TypeError("unable to convert exotic object to primitive")}return"default"===e&&(D(u)||i(u))&&(e="string"),function(u,t){if(null==u)throw new TypeError("Cannot call method on "+u);if("string"!=typeof t||"number"!==t&&"string"!==t)throw new TypeError('hint must be "string" or "number"');var e,r,D,i="string"===t?["toString","valueOf"]:["valueOf","toString"];for(D=0;D1&&"boolean"!=typeof t)throw new D('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,u))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var e=function(u){var t=v(u,0,1),e=v(u,-1);if("%"===t&&"%"!==e)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===e&&"%"!==t)throw new n("invalid intrinsic syntax, expected opening `%`");var r=[];return b(u,x,(function(u,t,e,n){r[r.length]=e?b(n,S,"$1"):t||u})),r}(u),r=e.length>0?e[0]:"",o=O("%"+r+"%",t),i=o.name,c=o.value,F=!1,l=o.alias;l&&(r=l[0],m(e,g([0,1],l)));for(var f=1,s=!0;f=e.length){var y=a(c,p);c=(s=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:c[p]}else s=B(c,p),c=c[p];s&&!F&&(E[i]=c)}}return c}},658:function(u,t,e){"use strict";var r=e(2870)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(u){r=null}u.exports=r},229:function(u,t,e){"use strict";var r=e(2870)("%Object.defineProperty%",!0),n=function(){if(r)try{return r({},"a",{value:1}),!0}catch(u){return!1}return!1};n.hasArrayLengthDefineBug=function(){if(!n())return null;try{return 1!==r([],"length",{value:1}).length}catch(u){return!0}},u.exports=n},3413:function(u){"use strict";var t={foo:{}},e=Object;u.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof e)}},1143:function(u,t,e){"use strict";var r="undefined"!=typeof Symbol&&Symbol,n=e(9985);u.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&n()}},9985:function(u){"use strict";u.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var u={},t=Symbol("test"),e=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;for(t in u[t]=42,u)return!1;if("function"==typeof Object.keys&&0!==Object.keys(u).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(u).length)return!1;var r=Object.getOwnPropertySymbols(u);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(u,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var n=Object.getOwnPropertyDescriptor(u,t);if(42!==n.value||!0!==n.enumerable)return!1}return!0}},3060:function(u,t,e){"use strict";var r=e(9985);u.exports=function(){return r()&&!!Symbol.toStringTag}},9545:function(u){"use strict";var t={}.hasOwnProperty,e=Function.prototype.call;u.exports=e.bind?e.bind(t):function(u,r){return e.call(t,u,r)}},7284:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=e(5714)(),D=r("%TypeError%"),i={assert:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");if(o.assert(u),!i.has(u,t))throw new D("`"+t+"` is not present on `O`")},get:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return e&&e["$"+t]},has:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return!!e&&n(e,"$"+t)},set:function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var r=o.get(u);r||(r={},o.set(u,r)),r["$"+t]=e}};Object.freeze&&Object.freeze(i),u.exports=i},3655:function(u){"use strict";var t,e,r=Function.prototype.toString,n="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof n&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw e}}),e={},n((function(){throw 42}),null,t)}catch(u){u!==e&&(n=null)}else n=null;var o=/^\s*class\b/,D=function(u){try{var t=r.call(u);return o.test(t)}catch(u){return!1}},i=function(u){try{return!D(u)&&(r.call(u),!0)}catch(u){return!1}},a=Object.prototype.toString,c="function"==typeof Symbol&&!!Symbol.toStringTag,F=!(0 in[,]),l=function(){return!1};if("object"==typeof document){var f=document.all;a.call(f)===a.call(document.all)&&(l=function(u){if((F||!u)&&(void 0===u||"object"==typeof u))try{var t=a.call(u);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==u("")}catch(u){}return!1})}u.exports=n?function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;try{n(u,null,t)}catch(u){if(u!==e)return!1}return!D(u)&&i(u)}:function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;if(c)return i(u);if(D(u))return!1;var t=a.call(u);return!("[object Function]"!==t&&"[object GeneratorFunction]"!==t&&!/^\[object HTML/.test(t))&&i(u)}},455:function(u,t,e){"use strict";var r=Date.prototype.getDay,n=Object.prototype.toString,o=e(3060)();u.exports=function(u){return"object"==typeof u&&null!==u&&(o?function(u){try{return r.call(u),!0}catch(u){return!1}}(u):"[object Date]"===n.call(u))}},5494:function(u,t,e){"use strict";var r,n,o,D,i=e(3099),a=e(3060)();if(a){r=i("Object.prototype.hasOwnProperty"),n=i("RegExp.prototype.exec"),o={};var c=function(){throw o};D={toString:c,valueOf:c},"symbol"==typeof Symbol.toPrimitive&&(D[Symbol.toPrimitive]=c)}var F=i("Object.prototype.toString"),l=Object.getOwnPropertyDescriptor;u.exports=a?function(u){if(!u||"object"!=typeof u)return!1;var t=l(u,"lastIndex");if(!t||!r(t,"value"))return!1;try{n(u,D)}catch(u){return u===o}}:function(u){return!(!u||"object"!=typeof u&&"function"!=typeof u)&&"[object RegExp]"===F(u)}},8760:function(u,t,e){"use strict";var r=Object.prototype.toString;if(e(1143)()){var n=Symbol.prototype.toString,o=/^Symbol\(.*\)$/;u.exports=function(u){if("symbol"==typeof u)return!0;if("[object Symbol]"!==r.call(u))return!1;try{return function(u){return"symbol"==typeof u.valueOf()&&o.test(n.call(u))}(u)}catch(u){return!1}}}else u.exports=function(u){return!1}},4538:function(u,t,e){var r="function"==typeof Map&&Map.prototype,n=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,o=r&&n&&"function"==typeof n.get?n.get:null,D=r&&Map.prototype.forEach,i="function"==typeof Set&&Set.prototype,a=Object.getOwnPropertyDescriptor&&i?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=i&&a&&"function"==typeof a.get?a.get:null,F=i&&Set.prototype.forEach,l="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,f="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,s="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,p=Boolean.prototype.valueOf,A=Object.prototype.toString,E=Function.prototype.toString,C=String.prototype.match,y=String.prototype.slice,d=String.prototype.replace,h=String.prototype.toUpperCase,B=String.prototype.toLowerCase,g=RegExp.prototype.test,m=Array.prototype.concat,b=Array.prototype.join,v=Array.prototype.slice,w=Math.floor,x="function"==typeof BigInt?BigInt.prototype.valueOf:null,S=Object.getOwnPropertySymbols,O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,j="function"==typeof Symbol&&"object"==typeof Symbol.iterator,P="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol.toStringTag,1)?Symbol.toStringTag:null,T=Object.prototype.propertyIsEnumerable,I=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(u){return u.__proto__}:null);function R(u,t){if(u===1/0||u===-1/0||u!=u||u&&u>-1e3&&u<1e3||g.call(/e/,t))return t;var e=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof u){var r=u<0?-w(-u):w(u);if(r!==u){var n=String(r),o=y.call(t,n.length+1);return d.call(n,e,"$&_")+"."+d.call(d.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return d.call(t,e,"$&_")}var N=e(7002),M=N.custom,k=W(M)?M:null;function L(u,t,e){var r="double"===(e.quoteStyle||t)?'"':"'";return r+u+r}function $(u){return d.call(String(u),/"/g,""")}function _(u){return!("[object Array]"!==H(u)||P&&"object"==typeof u&&P in u)}function U(u){return!("[object RegExp]"!==H(u)||P&&"object"==typeof u&&P in u)}function W(u){if(j)return u&&"object"==typeof u&&u instanceof Symbol;if("symbol"==typeof u)return!0;if(!u||"object"!=typeof u||!O)return!1;try{return O.call(u),!0}catch(u){}return!1}u.exports=function u(t,e,r,n){var i=e||{};if(V(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!V(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var A=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return X(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var h=String(t);return A?R(t,h):h}if("bigint"==typeof t){var g=String(t)+"n";return A?R(t,g):g}var w=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=w&&w>0&&"object"==typeof t)return _(t)?"[Array]":"[Object]";var S,M=function(u,t){var e;if("\t"===u.indent)e="\t";else{if(!("number"==typeof u.indent&&u.indent>0))return null;e=b.call(Array(u.indent+1)," ")}return{base:e,prev:b.call(Array(t+1),e)}}(i,r);if(void 0===n)n=[];else if(q(n,t)>=0)return"[Circular]";function G(t,e,o){if(e&&(n=v.call(n)).push(e),o){var D={depth:i.depth};return V(i,"quoteStyle")&&(D.quoteStyle=i.quoteStyle),u(t,D,r+1,n)}return u(t,i,r+1,n)}if("function"==typeof t&&!U(t)){var Y=function(u){if(u.name)return u.name;var t=C.call(E.call(u),/^function\s*([\w$]+)/);return t?t[1]:null}(t),uu=Q(t,G);return"[Function"+(Y?": "+Y:" (anonymous)")+"]"+(uu.length>0?" { "+b.call(uu,", ")+" }":"")}if(W(t)){var tu=j?d.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):O.call(t);return"object"!=typeof t||j?tu:z(tu)}if((S=t)&&"object"==typeof S&&("undefined"!=typeof HTMLElement&&S instanceof HTMLElement||"string"==typeof S.nodeName&&"function"==typeof S.getAttribute)){for(var eu="<"+B.call(String(t.nodeName)),ru=t.attributes||[],nu=0;nu",t.childNodes&&t.childNodes.length&&(eu+="..."),eu+""+B.call(String(t.nodeName))+">"}if(_(t)){if(0===t.length)return"[]";var ou=Q(t,G);return M&&!function(u){for(var t=0;t=0)return!1;return!0}(ou)?"["+Z(ou,M)+"]":"[ "+b.call(ou,", ")+" ]"}if(function(u){return!("[object Error]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)){var Du=Q(t,G);return"cause"in Error.prototype||!("cause"in t)||T.call(t,"cause")?0===Du.length?"["+String(t)+"]":"{ ["+String(t)+"] "+b.call(Du,", ")+" }":"{ ["+String(t)+"] "+b.call(m.call("[cause]: "+G(t.cause),Du),", ")+" }"}if("object"==typeof t&&a){if(k&&"function"==typeof t[k]&&N)return N(t,{depth:w-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(u){if(!o||!u||"object"!=typeof u)return!1;try{o.call(u);try{c.call(u)}catch(u){return!0}return u instanceof Map}catch(u){}return!1}(t)){var iu=[];return D&&D.call(t,(function(u,e){iu.push(G(e,t,!0)+" => "+G(u,t))})),K("Map",o.call(t),iu,M)}if(function(u){if(!c||!u||"object"!=typeof u)return!1;try{c.call(u);try{o.call(u)}catch(u){return!0}return u instanceof Set}catch(u){}return!1}(t)){var au=[];return F&&F.call(t,(function(u){au.push(G(u,t))})),K("Set",c.call(t),au,M)}if(function(u){if(!l||!u||"object"!=typeof u)return!1;try{l.call(u,l);try{f.call(u,f)}catch(u){return!0}return u instanceof WeakMap}catch(u){}return!1}(t))return J("WeakMap");if(function(u){if(!f||!u||"object"!=typeof u)return!1;try{f.call(u,f);try{l.call(u,l)}catch(u){return!0}return u instanceof WeakSet}catch(u){}return!1}(t))return J("WeakSet");if(function(u){if(!s||!u||"object"!=typeof u)return!1;try{return s.call(u),!0}catch(u){}return!1}(t))return J("WeakRef");if(function(u){return!("[object Number]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(Number(t)));if(function(u){if(!u||"object"!=typeof u||!x)return!1;try{return x.call(u),!0}catch(u){}return!1}(t))return z(G(x.call(t)));if(function(u){return!("[object Boolean]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(p.call(t));if(function(u){return!("[object String]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(String(t)));if(!function(u){return!("[object Date]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)&&!U(t)){var cu=Q(t,G),Fu=I?I(t)===Object.prototype:t instanceof Object||t.constructor===Object,lu=t instanceof Object?"":"null prototype",fu=!Fu&&P&&Object(t)===t&&P in t?y.call(H(t),8,-1):lu?"Object":"",su=(Fu||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(fu||lu?"["+b.call(m.call([],fu||[],lu||[]),": ")+"] ":"");return 0===cu.length?su+"{}":M?su+"{"+Z(cu,M)+"}":su+"{ "+b.call(cu,", ")+" }"}return String(t)};var G=Object.prototype.hasOwnProperty||function(u){return u in this};function V(u,t){return G.call(u,t)}function H(u){return A.call(u)}function q(u,t){if(u.indexOf)return u.indexOf(t);for(var e=0,r=u.length;et.maxStringLength){var e=u.length-t.maxStringLength,r="... "+e+" more character"+(e>1?"s":"");return X(y.call(u,0,t.maxStringLength),t)+r}return L(d.call(d.call(u,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Y),"single",t)}function Y(u){var t=u.charCodeAt(0),e={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return e?"\\"+e:"\\x"+(t<16?"0":"")+h.call(t.toString(16))}function z(u){return"Object("+u+")"}function J(u){return u+" { ? }"}function K(u,t,e,r){return u+" ("+t+") {"+(r?Z(e,r):b.call(e,", "))+"}"}function Z(u,t){if(0===u.length)return"";var e="\n"+t.prev+t.base;return e+b.call(u,","+e)+"\n"+t.prev}function Q(u,t){var e=_(u),r=[];if(e){r.length=u.length;for(var n=0;n0&&!n.call(u,0))for(var A=0;A0)for(var E=0;E=0&&"[object Function]"===t.call(u.callee)),r}},9766:function(u,t,e){"use strict";var r=e(8921),n=Object,o=TypeError;u.exports=r((function(){if(null!=this&&this!==n(this))throw new o("RegExp.prototype.flags getter called on non-object");var u="";return this.hasIndices&&(u+="d"),this.global&&(u+="g"),this.ignoreCase&&(u+="i"),this.multiline&&(u+="m"),this.dotAll&&(u+="s"),this.unicode&&(u+="u"),this.unicodeSets&&(u+="v"),this.sticky&&(u+="y"),u}),"get flags",!0)},483:function(u,t,e){"use strict";var r=e(9722),n=e(2755),o=e(9766),D=e(5113),i=e(7299),a=n(D());r(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},5113:function(u,t,e){"use strict";var r=e(9766),n=e(9722).supportsDescriptors,o=Object.getOwnPropertyDescriptor;u.exports=function(){if(n&&"gim"===/a/gim.flags){var u=o(RegExp.prototype,"flags");if(u&&"function"==typeof u.get&&"boolean"==typeof RegExp.prototype.dotAll&&"boolean"==typeof RegExp.prototype.hasIndices){var t="",e={};if(Object.defineProperty(e,"hasIndices",{get:function(){t+="d"}}),Object.defineProperty(e,"sticky",{get:function(){t+="y"}}),"dy"===t)return u.get}}return r}},7299:function(u,t,e){"use strict";var r=e(9722).supportsDescriptors,n=e(5113),o=Object.getOwnPropertyDescriptor,D=Object.defineProperty,i=TypeError,a=Object.getPrototypeOf,c=/a/;u.exports=function(){if(!r||!a)throw new i("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var u=n(),t=a(c),e=o(t,"flags");return e&&e.get===u||D(t,"flags",{configurable:!0,enumerable:!1,get:u}),u}},7582:function(u,t,e){"use strict";var r=e(3099),n=e(2870),o=e(5494),D=r("RegExp.prototype.exec"),i=n("%TypeError%");u.exports=function(u){if(!o(u))throw new i("`regex` must be a RegExp");return function(t){return null!==D(u,t)}}},8921:function(u,t,e){"use strict";var r=e(6663),n=e(229)(),o=e(5610).functionsHaveConfigurableNames(),D=TypeError;u.exports=function(u,t){if("function"!=typeof u)throw new D("`fn` is not a function");return arguments.length>2&&!!arguments[2]&&!o||(n?r(u,"name",t,!0,!0):r(u,"name",t)),u}},5714:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=e(4538),D=r("%TypeError%"),i=r("%WeakMap%",!0),a=r("%Map%",!0),c=n("WeakMap.prototype.get",!0),F=n("WeakMap.prototype.set",!0),l=n("WeakMap.prototype.has",!0),f=n("Map.prototype.get",!0),s=n("Map.prototype.set",!0),p=n("Map.prototype.has",!0),A=function(u,t){for(var e,r=u;null!==(e=r.next);r=e)if(e.key===t)return r.next=e.next,e.next=u.next,u.next=e,e};u.exports=function(){var u,t,e,r={assert:function(u){if(!r.has(u))throw new D("Side channel does not contain "+o(u))},get:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return c(u,r)}else if(a){if(t)return f(t,r)}else if(e)return function(u,t){var e=A(u,t);return e&&e.value}(e,r)},has:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return l(u,r)}else if(a){if(t)return p(t,r)}else if(e)return function(u,t){return!!A(u,t)}(e,r);return!1},set:function(r,n){i&&r&&("object"==typeof r||"function"==typeof r)?(u||(u=new i),F(u,r,n)):a?(t||(t=new a),s(t,r,n)):(e||(e={key:{},next:null}),function(u,t,e){var r=A(u,t);r?r.value=e:u.next={key:t,next:u.next,value:e}}(e,r,n))}};return r}},3073:function(u,t,e){"use strict";var r=e(7113),n=e(151),o=e(1959),D=e(9497),i=e(5128),a=e(6751),c=e(3099),F=e(1143)(),l=e(483),f=c("String.prototype.indexOf"),s=e(2009),p=function(u){var t=s();if(F&&"symbol"==typeof Symbol.matchAll){var e=o(u,Symbol.matchAll);return e===RegExp.prototype[Symbol.matchAll]&&e!==t?t:e}if(D(u))return t};u.exports=function(u){var t=a(this);if(null!=u){if(D(u)){var e="flags"in u?n(u,"flags"):l(u);if(a(e),f(i(e),"g")<0)throw new TypeError("matchAll requires a global regular expression")}var o=p(u);if(void 0!==o)return r(o,u,[t])}var c=i(t),F=new RegExp(u,"g");return r(p(F),F,[c])}},5155:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(3073),D=e(1794),i=e(3911),a=r(o);n(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},2009:function(u,t,e){"use strict";var r=e(1143)(),n=e(8012);u.exports=function(){return r&&"symbol"==typeof Symbol.matchAll&&"function"==typeof RegExp.prototype[Symbol.matchAll]?RegExp.prototype[Symbol.matchAll]:n}},1794:function(u,t,e){"use strict";var r=e(3073);u.exports=function(){if(String.prototype.matchAll)try{"".matchAll(RegExp.prototype)}catch(u){return String.prototype.matchAll}return r}},8012:function(u,t,e){"use strict";var r=e(1398),n=e(151),o=e(8322),D=e(2449),i=e(3995),a=e(5128),c=e(1874),F=e(483),l=e(8921),f=e(3099)("String.prototype.indexOf"),s=RegExp,p="flags"in RegExp.prototype,A=l((function(u){var t=this;if("Object"!==c(t))throw new TypeError('"this" value must be an Object');var e=a(u),l=function(u,t){var e="flags"in t?n(t,"flags"):a(F(t));return{flags:e,matcher:new u(p&&"string"==typeof e?t:u===s?t.source:t,e)}}(D(t,s),t),A=l.flags,E=l.matcher,C=i(n(t,"lastIndex"));o(E,"lastIndex",C,!0);var y=f(A,"g")>-1,d=f(A,"u")>-1;return r(E,e,y,d)}),"[Symbol.matchAll]",!0);u.exports=A},3911:function(u,t,e){"use strict";var r=e(9722),n=e(1143)(),o=e(1794),D=e(2009),i=Object.defineProperty,a=Object.getOwnPropertyDescriptor;u.exports=function(){var u=o();if(r(String.prototype,{matchAll:u},{matchAll:function(){return String.prototype.matchAll!==u}}),n){var t=Symbol.matchAll||(Symbol.for?Symbol.for("Symbol.matchAll"):Symbol("Symbol.matchAll"));if(r(Symbol,{matchAll:t},{matchAll:function(){return Symbol.matchAll!==t}}),i&&a){var e=a(Symbol,t);e&&!e.configurable||i(Symbol,t,{configurable:!1,enumerable:!1,value:t,writable:!1})}var c=D(),F={};F[t]=c;var l={};l[t]=function(){return RegExp.prototype[t]!==c},r(RegExp.prototype,F,l)}return u}},8125:function(u,t,e){"use strict";var r=e(6751),n=e(5128),o=e(3099)("String.prototype.replace"),D=/^\s$/.test(""),i=D?/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/:/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,a=D?/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/:/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;u.exports=function(){var u=n(r(this));return o(o(u,i,""),a,"")}},9434:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(6751),D=e(8125),i=e(3228),a=e(818),c=r(i()),F=function(u){return o(u),c(u)};n(F,{getPolyfill:i,implementation:D,shim:a}),u.exports=F},3228:function(u,t,e){"use strict";var r=e(8125);u.exports=function(){return String.prototype.trim&&""==="".trim()&&""==="".trim()&&"_"==="_".trim()&&"_"==="_".trim()?String.prototype.trim:r}},818:function(u,t,e){"use strict";var r=e(9722),n=e(3228);u.exports=function(){var u=n();return r(String.prototype,{trim:u},{trim:function(){return String.prototype.trim!==u}}),u}},7002:function(){},1510:function(u,t,e){"use strict";var r=e(2870),n=e(6318),o=e(1874),D=e(2990),i=e(5674),a=r("%TypeError%");u.exports=function(u,t,e){if("String"!==o(u))throw new a("Assertion failed: `S` must be a String");if(!D(t)||t<0||t>i)throw new a("Assertion failed: `length` must be an integer >= 0 and <= 2**53");if("Boolean"!==o(e))throw new a("Assertion failed: `unicode` must be a Boolean");return e?t+1>=u.length?t+1:t+n(u,t)["[[CodeUnitCount]]"]:t+1}},7113:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=r("%TypeError%"),D=e(6287),i=r("%Reflect.apply%",!0)||n("Function.prototype.apply");u.exports=function(u,t){var e=arguments.length>2?arguments[2]:[];if(!D(e))throw new o("Assertion failed: optional `argumentsList`, if provided, must be a List");return i(u,t,e)}},6318:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099),o=e(5541),D=e(959),i=e(1874),a=e(1751),c=n("String.prototype.charAt"),F=n("String.prototype.charCodeAt");u.exports=function(u,t){if("String"!==i(u))throw new r("Assertion failed: `string` must be a String");var e=u.length;if(t<0||t>=e)throw new r("Assertion failed: `position` must be >= 0, and < the length of `string`");var n=F(u,t),l=c(u,t),f=o(n),s=D(n);if(!f&&!s)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!1};if(s||t+1===e)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0};var p=F(u,t+1);return D(p)?{"[[CodePoint]]":a(n,p),"[[CodeUnitCount]]":2,"[[IsUnpairedSurrogate]]":!1}:{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0}}},5702:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(1874);u.exports=function(u,t){if("Boolean"!==n(t))throw new r("Assertion failed: Type(done) is not Boolean");return{value:u,done:t}}},6782:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(2860),o=e(8357),D=e(3301),i=e(6284),a=e(8277),c=e(1874);u.exports=function(u,t,e){if("Object"!==c(u))throw new r("Assertion failed: Type(O) is not Object");if(!i(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");return n(D,a,o,u,t,{"[[Configurable]]":!0,"[[Enumerable]]":!1,"[[Value]]":e,"[[Writable]]":!0})}},1398:function(u,t,e){"use strict";var r=e(2870),n=e(1143)(),o=r("%TypeError%"),D=r("%IteratorPrototype%",!0),i=e(1510),a=e(5702),c=e(6782),F=e(151),l=e(5716),f=e(3500),s=e(8322),p=e(3995),A=e(5128),E=e(1874),C=e(7284),y=e(2263),d=function(u,t,e,r){if("String"!==E(t))throw new o("`S` must be a string");if("Boolean"!==E(e))throw new o("`global` must be a boolean");if("Boolean"!==E(r))throw new o("`fullUnicode` must be a boolean");C.set(this,"[[IteratingRegExp]]",u),C.set(this,"[[IteratedString]]",t),C.set(this,"[[Global]]",e),C.set(this,"[[Unicode]]",r),C.set(this,"[[Done]]",!1)};D&&(d.prototype=l(D)),c(d.prototype,"next",(function(){var u=this;if("Object"!==E(u))throw new o("receiver must be an object");if(!(u instanceof d&&C.has(u,"[[IteratingRegExp]]")&&C.has(u,"[[IteratedString]]")&&C.has(u,"[[Global]]")&&C.has(u,"[[Unicode]]")&&C.has(u,"[[Done]]")))throw new o('"this" value must be a RegExpStringIterator instance');if(C.get(u,"[[Done]]"))return a(void 0,!0);var t=C.get(u,"[[IteratingRegExp]]"),e=C.get(u,"[[IteratedString]]"),r=C.get(u,"[[Global]]"),n=C.get(u,"[[Unicode]]"),D=f(t,e);if(null===D)return C.set(u,"[[Done]]",!0),a(void 0,!0);if(r){if(""===A(F(D,"0"))){var c=p(F(t,"lastIndex")),l=i(e,c,n);s(t,"lastIndex",l,!0)}return a(D,!1)}return C.set(u,"[[Done]]",!0),a(D,!1)})),n&&(y(d.prototype,"RegExp String Iterator"),Symbol.iterator&&"function"!=typeof d.prototype[Symbol.iterator])&&c(d.prototype,Symbol.iterator,(function(){return this})),u.exports=function(u,t,e,r){return new d(u,t,e,r)}},3645:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(7999),o=e(2860),D=e(8357),i=e(8355),a=e(3301),c=e(6284),F=e(8277),l=e(7628),f=e(1874);u.exports=function(u,t,e){if("Object"!==f(u))throw new r("Assertion failed: Type(O) is not Object");if(!c(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var s=n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},e)?e:l(e);if(!n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},s))throw new r("Assertion failed: Desc is not a valid Property Descriptor");return o(a,F,D,u,t,s)}},8357:function(u,t,e){"use strict";var r=e(1489),n=e(1598),o=e(1874);u.exports=function(u){return void 0!==u&&r(o,"Property Descriptor","Desc",u),n(u)}},151:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284),D=e(1874);u.exports=function(u,t){if("Object"!==D(u))throw new r("Assertion failed: Type(O) is not Object");if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},1959:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(9374),o=e(7304),D=e(6284),i=e(4538);u.exports=function(u,t){if(!D(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var e=n(u,t);if(null!=e){if(!o(e))throw new r(i(t)+" is not a function: "+i(e));return e}}},9374:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284);u.exports=function(u,t){if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},8355:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Get]]")&&!r(u,"[[Set]]")))}},6287:function(u,t,e){"use strict";u.exports=e(2403)},7304:function(u,t,e){"use strict";u.exports=e(3655)},4791:function(u,t,e){"use strict";var r=e(6740)("%Reflect.construct%",!0),n=e(3645);try{n({},"",{"[[Get]]":function(){}})}catch(u){n=null}if(n&&r){var o={},D={};n(D,"length",{"[[Get]]":function(){throw o},"[[Enumerable]]":!0}),u.exports=function(u){try{r(u,D)}catch(u){return u===o}}}else u.exports=function(u){return"function"==typeof u&&!!u.prototype}},3301:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Value]]")&&!r(u,"[[Writable]]")))}},6284:function(u){"use strict";u.exports=function(u){return"string"==typeof u||"symbol"==typeof u}},9497:function(u,t,e){"use strict";var r=e(2870)("%Symbol.match%",!0),n=e(5494),o=e(5695);u.exports=function(u){if(!u||"object"!=typeof u)return!1;if(r){var t=u[r];if(void 0!==t)return o(t)}return n(u)}},5716:function(u,t,e){"use strict";var r=e(2870),n=r("%Object.create%",!0),o=r("%TypeError%"),D=r("%SyntaxError%"),i=e(6287),a=e(1874),c=e(7735),F=e(7284),l=e(3413)();u.exports=function(u){if(null!==u&&"Object"!==a(u))throw new o("Assertion failed: `proto` must be null or an object");var t,e=arguments.length<2?[]:arguments[1];if(!i(e))throw new o("Assertion failed: `additionalInternalSlotsList` must be an Array");if(n)t=n(u);else if(l)t={__proto__:u};else{if(null===u)throw new D("native Object.create support is required to create null objects");var r=function(){};r.prototype=u,t=new r}return e.length>0&&c(e,(function(u){F.set(t,u,void 0)})),t}},3500:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099)("RegExp.prototype.exec"),o=e(7113),D=e(151),i=e(7304),a=e(1874);u.exports=function(u,t){if("Object"!==a(u))throw new r("Assertion failed: `R` must be an Object");if("String"!==a(t))throw new r("Assertion failed: `S` must be a String");var e=D(u,"exec");if(i(e)){var c=o(e,u,[t]);if(null===c||"Object"===a(c))return c;throw new r('"exec" method must return `null` or an Object')}return n(u,t)}},6751:function(u,t,e){"use strict";u.exports=e(9572)},8277:function(u,t,e){"use strict";var r=e(159);u.exports=function(u,t){return u===t?0!==u||1/u==1/t:r(u)&&r(t)}},8322:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(6284),o=e(8277),D=e(1874),i=function(){try{return delete[].length,!0}catch(u){return!1}}();u.exports=function(u,t,e,a){if("Object"!==D(u))throw new r("Assertion failed: `O` must be an Object");if(!n(t))throw new r("Assertion failed: `P` must be a Property Key");if("Boolean"!==D(a))throw new r("Assertion failed: `Throw` must be a Boolean");if(a){if(u[t]=e,i&&!o(u[t],e))throw new r("Attempted to assign to readonly property.");return!0}try{return u[t]=e,!i||o(u[t],e)}catch(u){return!1}}},2449:function(u,t,e){"use strict";var r=e(2870),n=r("%Symbol.species%",!0),o=r("%TypeError%"),D=e(4791),i=e(1874);u.exports=function(u,t){if("Object"!==i(u))throw new o("Assertion failed: Type(O) is not Object");var e=u.constructor;if(void 0===e)return t;if("Object"!==i(e))throw new o("O.constructor is not an Object");var r=n?e[n]:void 0;if(null==r)return t;if(D(r))return r;throw new o("no constructor found")}},6207:function(u,t,e){"use strict";var r=e(2870),n=r("%Number%"),o=r("%RegExp%"),D=r("%TypeError%"),i=r("%parseInt%"),a=e(3099),c=e(7582),F=a("String.prototype.slice"),l=c(/^0b[01]+$/i),f=c(/^0o[0-7]+$/i),s=c(/^[-+]0x[0-9a-f]+$/i),p=c(new o("["+["
","",""].join("")+"]","g")),A=e(9434),E=e(1874);u.exports=function u(t){if("String"!==E(t))throw new D("Assertion failed: `argument` is not a String");if(l(t))return n(i(F(t,2),2));if(f(t))return n(i(F(t,2),8));if(p(t)||s(t))return NaN;var e=A(t);return e!==t?u(e):n(t)}},5695:function(u){"use strict";u.exports=function(u){return!!u}},1200:function(u,t,e){"use strict";var r=e(6542),n=e(5693),o=e(159),D=e(1117);u.exports=function(u){var t=r(u);return o(t)||0===t?0:D(t)?n(t):t}},3995:function(u,t,e){"use strict";var r=e(5674),n=e(1200);u.exports=function(u){var t=n(u);return t<=0?0:t>r?r:t}},6542:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%Number%"),D=e(8606),i=e(703),a=e(6207);u.exports=function(u){var t=D(u)?u:i(u,o);if("symbol"==typeof t)throw new n("Cannot convert a Symbol value to a number");if("bigint"==typeof t)throw new n("Conversion from 'BigInt' to 'number' is not allowed.");return"string"==typeof t?a(t):o(t)}},703:function(u,t,e){"use strict";var r=e(7358);u.exports=function(u){return arguments.length>1?r(u,arguments[1]):r(u)}},7628:function(u,t,e){"use strict";var r=e(9545),n=e(2870)("%TypeError%"),o=e(1874),D=e(5695),i=e(7304);u.exports=function(u){if("Object"!==o(u))throw new n("ToPropertyDescriptor requires an object");var t={};if(r(u,"enumerable")&&(t["[[Enumerable]]"]=D(u.enumerable)),r(u,"configurable")&&(t["[[Configurable]]"]=D(u.configurable)),r(u,"value")&&(t["[[Value]]"]=u.value),r(u,"writable")&&(t["[[Writable]]"]=D(u.writable)),r(u,"get")){var e=u.get;if(void 0!==e&&!i(e))throw new n("getter must be a function");t["[[Get]]"]=e}if(r(u,"set")){var a=u.set;if(void 0!==a&&!i(a))throw new n("setter must be a function");t["[[Set]]"]=a}if((r(t,"[[Get]]")||r(t,"[[Set]]"))&&(r(t,"[[Value]]")||r(t,"[[Writable]]")))throw new n("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return t}},5128:function(u,t,e){"use strict";var r=e(2870),n=r("%String%"),o=r("%TypeError%");u.exports=function(u){if("symbol"==typeof u)throw new o("Cannot convert a Symbol value to a string");return n(u)}},1874:function(u,t,e){"use strict";var r=e(6101);u.exports=function(u){return"symbol"==typeof u?"Symbol":"bigint"==typeof u?"BigInt":r(u)}},1751:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%String.fromCharCode%"),D=e(5541),i=e(959);u.exports=function(u,t){if(!D(u)||!i(t))throw new n("Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code");return o(u)+o(t)}},3567:function(u,t,e){"use strict";var r=e(1874),n=Math.floor;u.exports=function(u){return"BigInt"===r(u)?u:n(u)}},5693:function(u,t,e){"use strict";var r=e(2870),n=e(3567),o=r("%TypeError%");u.exports=function(u){if("number"!=typeof u&&"bigint"!=typeof u)throw new o("argument must be a Number or a BigInt");var t=u<0?-n(-u):n(u);return 0===t?0:t}},9572:function(u,t,e){"use strict";var r=e(2870)("%TypeError%");u.exports=function(u,t){if(null==u)throw new r(t||"Cannot call method on "+u);return u}},6101:function(u){"use strict";u.exports=function(u){return null===u?"Null":void 0===u?"Undefined":"function"==typeof u||"object"==typeof u?"Object":"number"==typeof u?"Number":"boolean"==typeof u?"Boolean":"string"==typeof u?"String":void 0}},6740:function(u,t,e){"use strict";u.exports=e(2870)},2860:function(u,t,e){"use strict";var r=e(229),n=e(2870),o=r()&&n("%Object.defineProperty%",!0),D=r.hasArrayLengthDefineBug(),i=D&&e(2403),a=e(3099)("Object.prototype.propertyIsEnumerable");u.exports=function(u,t,e,r,n,c){if(!o){if(!u(c))return!1;if(!c["[[Configurable]]"]||!c["[[Writable]]"])return!1;if(n in r&&a(r,n)!==!!c["[[Enumerable]]"])return!1;var F=c["[[Value]]"];return r[n]=F,t(r[n],F)}return D&&"length"===n&&"[[Value]]"in c&&i(r)&&r.length!==c["[[Value]]"]?(r.length=c["[[Value]]"],r.length===c["[[Value]]"]):(o(r,n,e(c)),!0)}},2403:function(u,t,e){"use strict";var r=e(2870)("%Array%"),n=!r.isArray&&e(3099)("Object.prototype.toString");u.exports=r.isArray||function(u){return"[object Array]"===n(u)}},1489:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%SyntaxError%"),D=e(9545),i=e(2990),a={"Property Descriptor":function(u){var t={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};if(!u)return!1;for(var e in u)if(D(u,e)&&!t[e])return!1;var r=D(u,"[[Value]]"),o=D(u,"[[Get]]")||D(u,"[[Set]]");if(r&&o)throw new n("Property Descriptors may not be both accessor and data descriptors");return!0},"Match Record":e(900),"Iterator Record":function(u){return D(u,"[[Iterator]]")&&D(u,"[[NextMethod]]")&&D(u,"[[Done]]")},"PromiseCapability Record":function(u){return!!u&&D(u,"[[Resolve]]")&&"function"==typeof u["[[Resolve]]"]&&D(u,"[[Reject]]")&&"function"==typeof u["[[Reject]]"]&&D(u,"[[Promise]]")&&u["[[Promise]]"]&&"function"==typeof u["[[Promise]]"].then},"AsyncGeneratorRequest Record":function(u){return!!u&&D(u,"[[Completion]]")&&D(u,"[[Capability]]")&&a["PromiseCapability Record"](u["[[Capability]]"])},"RegExp Record":function(u){return u&&D(u,"[[IgnoreCase]]")&&"boolean"==typeof u["[[IgnoreCase]]"]&&D(u,"[[Multiline]]")&&"boolean"==typeof u["[[Multiline]]"]&&D(u,"[[DotAll]]")&&"boolean"==typeof u["[[DotAll]]"]&&D(u,"[[Unicode]]")&&"boolean"==typeof u["[[Unicode]]"]&&D(u,"[[CapturingGroupsCount]]")&&"number"==typeof u["[[CapturingGroupsCount]]"]&&i(u["[[CapturingGroupsCount]]"])&&u["[[CapturingGroupsCount]]"]>=0}};u.exports=function(u,t,e,r){var D=a[t];if("function"!=typeof D)throw new o("unknown record type: "+t);if("Object"!==u(r)||!D(r))throw new n(e+" must be a "+t)}},7735:function(u){"use strict";u.exports=function(u,t){for(var e=0;e=55296&&u<=56319}},900:function(u,t,e){"use strict";var r=e(9545);u.exports=function(u){return r(u,"[[StartIndex]]")&&r(u,"[[EndIndex]]")&&u["[[StartIndex]]"]>=0&&u["[[EndIndex]]"]>=u["[[StartIndex]]"]&&String(parseInt(u["[[StartIndex]]"],10))===String(u["[[StartIndex]]"])&&String(parseInt(u["[[EndIndex]]"],10))===String(u["[[EndIndex]]"])}},159:function(u){"use strict";u.exports=Number.isNaN||function(u){return u!=u}},8606:function(u){"use strict";u.exports=function(u){return null===u||"function"!=typeof u&&"object"!=typeof u}},7999:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=r("%TypeError%");u.exports=function(u,t){if("Object"!==u.Type(t))return!1;var e={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var r in t)if(n(t,r)&&!e[r])return!1;if(u.IsDataDescriptor(t)&&u.IsAccessorDescriptor(t))throw new o("Property Descriptors may not be both accessor and data descriptors");return!0}},959:function(u){"use strict";u.exports=function(u){return"number"==typeof u&&u>=56320&&u<=57343}},5674:function(u){"use strict";u.exports=Number.MAX_SAFE_INTEGER||9007199254740991}},t={};function e(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return u[r](o,o.exports,e),o.exports}e.n=function(u){var t=u&&u.__esModule?function(){return u.default}:function(){return u};return e.d(t,{a:t}),t},e.d=function(u,t){for(var r in t)e.o(t,r)&&!e.o(u,r)&&Object.defineProperty(u,r,{enumerable:!0,get:t[r]})},e.o=function(u,t){return Object.prototype.hasOwnProperty.call(u,t)},function(){"use strict";var u=e(1844);function t(t,e,r){for(var n=0,o=[];-1!==n;)-1!==(n=t.indexOf(e,n))&&(o.push({start:n,end:n+e.length,errors:0}),n+=1);return o.length>0?o:(0,u.Z)(t,e,r)}function r(u,e){return 0===e.length||0===u.length?0:1-t(u,e,e.length)[0].errors/e.length}function n(u){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(u){return typeof u}:function(u){return u&&"function"==typeof Symbol&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},n(u)}function o(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1?t-1:0),r=1;ro?(i.push({node:n,offset:o-c}),o=e.shift()):(a=D.nextNode(),c+=n.data.length);for(;void 0!==o&&n&&c===o;)i.push({node:n,offset:n.data.length}),o=e.shift();if(void 0!==o)throw new RangeError("Offset exceeds text length");return i}var f=function(){function u(t,e){if(D(this,u),e<0)throw new Error("Offset is invalid");this.element=t,this.offset=e}return a(u,[{key:"relativeTo",value:function(t){if(!t.contains(this.element))throw new Error("Parent is not an ancestor of current element");for(var e=this.element,r=this.offset;e!==t;)r+=F(e),e=e.parentElement;return new u(e,r)}},{key:"resolve",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{return l(this.element,this.offset)[0]}catch(n){if(0===this.offset&&void 0!==u.direction){var t=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);t.currentNode=this.element;var e=1===u.direction,r=e?t.nextNode():t.previousNode();if(!r)throw n;return{node:r,offset:e?0:r.data.length}}throw n}}}],[{key:"fromCharOffset",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:return u.fromPoint(t,e);case Node.ELEMENT_NODE:return new u(t,e);default:throw new Error("Node is not an element or text node")}}},{key:"fromPoint",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:if(e<0||e>t.data.length)throw new Error("Text node offset is out of range");if(!t.parentElement)throw new Error("Text node has no parent");var r=F(t)+e;return new u(t.parentElement,r);case Node.ELEMENT_NODE:if(e<0||e>t.childNodes.length)throw new Error("Child node offset is out of range");for(var n=0,o=0;o2&&void 0!==arguments[2]?arguments[2]:{};C(this,u),this.root=t,this.exact=e,this.context=r}return d(u,[{key:"toSelector",value:function(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}},{key:"toRange",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.toPositionAnchor(u).toRange()}},{key:"toPositionAnchor",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=function(u,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(0===e.length)return null;var o=Math.min(256,e.length/2),D=t(u,e,o);if(0===D.length)return null;var i=function(t){var o=1-t.errors/e.length,D=n.prefix?r(u.slice(Math.max(0,t.start-n.prefix.length),t.start),n.prefix):1,i=n.suffix?r(u.slice(t.end,t.end+n.suffix.length),n.suffix):1,a=1;return"number"==typeof n.hint&&(a=1-Math.abs(t.start-n.hint)/u.length),(50*o+20*D+20*i+2*a)/92},a=D.map((function(u){return{start:u.start,end:u.end,score:i(u)}}));return a.sort((function(u,t){return t.score-u.score})),a[0]}(this.root.textContent,this.exact,E(E({},this.context),{},{hint:u.hint}));if(!e)throw new Error("Quote not found");return new B(this.root,e.start,e.end)}}],[{key:"fromRange",value:function(t,e){var r=t.textContent,n=s.fromRange(e).relativeTo(t),o=n.start.offset,D=n.end.offset;return new u(t,r.slice(o,D),{prefix:r.slice(Math.max(0,o-32),o),suffix:r.slice(D,Math.min(r.length,D+32))})}},{key:"fromSelector",value:function(t,e){var r=e.prefix,n=e.suffix;return new u(t,e.exact,{prefix:r,suffix:n})}}]),u}();function m(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e.1&&(t?t.remove():((t=document.createElement("div")).setAttribute("id",u),t.style.breakBefore="column",t.innerHTML="",document.body.appendChild(t)))}}(),P()}))})).observe(document.body)}),!1);var b=1;function v(){var u=document.documentElement.style;return"readium-scroll-on"==u.getPropertyValue("--USER__view").trim()||"readium-scroll-on"==u.getPropertyValue("--USER__scroll").trim()}function w(){return"rtl"==document.body.dir.toLowerCase()}function x(){return window.getComputedStyle(document.documentElement).getPropertyValue("writing-mode").startsWith("vertical")}function S(u){return v()?document.scrollingElement.scrollTop=u.top+window.scrollY:document.scrollingElement.scrollLeft=j(u.left+window.scrollX),!0}function O(u){if(v())throw"Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";var t=window.scrollX;return document.scrollingElement.scrollLeft=j(u),Math.abs(t-u)/b>.01}function j(u){var t=u+(w()?-1:1);return t-t%b}function P(){if(!v()){var u=window.scrollX,t=(w()?-1:1)*(b/2);document.scrollingElement.scrollLeft=j(u+t)}}function T(u){try{var t,e=u.locations,r=u.text;if(r&&r.highlight)return e&&e.cssSelector&&(t=document.querySelector(e.cssSelector)),t||(t=document.body),new g(t,r.highlight,{prefix:r.before,suffix:r.after}).toRange();if(e){var n=null;if(!n&&e.cssSelector&&(n=document.querySelector(e.cssSelector)),!n&&e.fragments){var o,D=function(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return m(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?m(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}(e.fragments);try{for(D.s();!(o=D.n()).done;){var i=o.value;if(n=document.getElementById(i))break}}catch(u){D.e(u)}finally{D.f()}}if(n){var a=document.createRange();return a.setStartBefore(n),a.setEndAfter(n),a}}}catch(u){M(u)}return null}function I(u,t){null===t||""===t?R(u):document.documentElement.style.setProperty(u,t,"important")}function R(u){document.documentElement.style.removeProperty(u)}function N(){var u=Array.prototype.slice.call(arguments).join(" ");Android.log(u)}function M(u){Android.logError(u,"",0)}function k(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return L(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?L(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function L(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1&&o.height>1){var D,i=k(u);try{for(i.s();!(D=i.n()).done;){var a=D.value;if(o!==a&&r.has(a)&&V(a,o,1)){J("CLIENT RECT: remove contained"),r.delete(o);break}}}catch(u){i.e(u)}finally{i.f()}}else J("CLIENT RECT: remove tiny"),r.delete(o)}}catch(u){n.e(u)}finally{n.f()}return Array.from(r)}(W(r,1,t)),i=q(D),a=i.length-1;a>=0;a--){var c=i[a];if(!(c.width*c.height>4)){if(!(i.length>1)){J("CLIENT RECT: remove small, but keep otherwise empty!");break}J("CLIENT RECT: remove small"),i.splice(a,1)}}return J("CLIENT RECT: reduced ".concat(r.length," --\x3e ").concat(i.length)),i}function W(u,t,e){for(var r=0;rt||z(u.right,t,r))&&(u.tope||z(u.bottom,e,r))}function q(u){for(var t=0;t=0&&z(u.left,t.right,e))&&(t.left=0&&z(t.left,u.right,e))&&(u.top=0&&z(u.top,t.bottom,e))&&(t.top=0&&z(t.top,u.bottom,e))}function z(u,t,e){return Math.abs(u-t)<=e}function J(){$&&N.apply(null,arguments)}function K(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=Q(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function Z(u,t){return function(u){if(Array.isArray(u))return u}(u)||function(u,t){var e=null==u?null:"undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(null!=e){var r,n,o,D,i=[],a=!0,c=!1;try{if(o=(e=e.call(u)).next,0===t){if(Object(e)!==e)return;a=!1}else for(;!(a=(r=o.call(e)).done)&&(i.push(r.value),i.length!==t);a=!0);}catch(u){c=!0,n=u}finally{try{if(!a&&null!=e.return&&(D=e.return(),Object(D)!==D))return}finally{if(c)throw n}}return i}}(u,t)||Q(u,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(u,t){if(u){if("string"==typeof u)return uu(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?uu(u,t):void 0}}function uu(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e "},Du={id:"id",class:"class",tag:"tag",attribute:"attribute",nthchild:"nthchild",nthoftype:"nthoftype"},iu="CssSelectorGenerator";function au(u="unknown problem",...t){console.warn(`${iu}: ${u}`,...t)}const cu={selectors:[Du.id,Du.class,Du.tag,Du.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function Fu(u){return u instanceof RegExp}function lu(u){return["string","function"].includes(typeof u)||Fu(u)}function fu(u){return Array.isArray(u)?u.filter(lu):[]}function su(u){const t=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(u){return u instanceof Node}(u)&&t.includes(u.nodeType)}function pu(u,t){if(su(u))return u.contains(t)||au("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element's real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),u;const e=t.getRootNode({composed:!1});return su(e)?(e!==document&&au("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),e):t.ownerDocument.querySelector(":root")}function Au(u){return"number"==typeof u?u:Number.POSITIVE_INFINITY}function Eu(u=[]){const[t=[],...e]=u;return 0===e.length?t:e.reduce(((u,t)=>u.filter((u=>t.includes(u)))),t)}function Cu(u){return[].concat(...u)}function yu(u){const t=u.map((u=>{if(Fu(u))return t=>u.test(t);if("function"==typeof u)return t=>{const e=u(t);return"boolean"!=typeof e?(au("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",u),!1):e};if("string"==typeof u){const t=new RegExp("^"+u.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")+"$");return u=>t.test(u)}return au("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",u),()=>!1}));return u=>t.some((t=>t(u)))}function du(u,t,e){const r=Array.from(pu(e,u[0]).querySelectorAll(t));return r.length===u.length&&u.every((u=>r.includes(u)))}function hu(u,t){t=null!=t?t:function(u){return u.ownerDocument.querySelector(":root")}(u);const e=[];let r=u;for(;nu(r)&&r!==t;)e.push(r),r=r.parentElement;return e}function Bu(u,t){return Eu(u.map((u=>hu(u,t))))}const gu=new RegExp(["^$","\\s"].join("|")),mu=new RegExp(["^$"].join("|")),bu=[Du.nthoftype,Du.tag,Du.id,Du.class,Du.attribute,Du.nthchild],vu=yu(["class","id","ng-*"]);function wu({name:u}){return`[${u}]`}function xu({name:u,value:t}){return`[${u}='${t}']`}function Su({nodeName:u,nodeValue:t}){return{name:(e=u,e.replace(/:/g,"\\:")),value:Uu(t)};var e}function Ou(u){const t=Array.from(u.attributes).filter((t=>function({nodeName:u},t){const e=t.tagName.toLowerCase();return!(["input","option"].includes(e)&&"value"===u||vu(u))}(t,u))).map(Su);return[...t.map(wu),...t.map(xu)]}function ju(u){return(u.getAttribute("class")||"").trim().split(/\s+/).filter((u=>!mu.test(u))).map((u=>`.${Uu(u)}`))}function Pu(u){const t=u.getAttribute("id")||"",e=`#${Uu(t)}`,r=u.getRootNode({composed:!1});return!gu.test(t)&&du([u],e,r)?[e]:[]}function Tu(u){const t=u.parentNode;if(t){const e=Array.from(t.childNodes).filter(nu).indexOf(u);if(e>-1)return[`:nth-child(${e+1})`]}return[]}function Iu(u){return[Uu(u.tagName.toLowerCase())]}function Ru(u){const t=[...new Set(Cu(u.map(Iu)))];return 0===t.length||t.length>1?[]:[t[0]]}function Nu(u){const t=Ru([u])[0],e=u.parentElement;if(e){const r=Array.from(e.children).filter((u=>u.tagName.toLowerCase()===t)),n=r.indexOf(u);if(n>-1)return[`${t}:nth-of-type(${n+1})`]}return[]}function Mu(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){return Array.from(function*(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){let e=0,r=Lu(1);for(;r.length<=u.length&&eu[t]));yield t,r=ku(r,u.length-1)}}(u,{maxResults:t}))}function ku(u=[],t=0){const e=u.length;if(0===e)return[];const r=[...u];r[e-1]+=1;for(let u=e-1;u>=0;u--)if(r[u]>t){if(0===u)return Lu(e+1);r[u-1]++,r[u]=r[u-1]+1}return r[e-1]>t?Lu(e+1):r}function Lu(u=1){return Array.from(Array(u).keys())}const $u=":".charCodeAt(0).toString(16).toUpperCase(),_u=/[ !"#$%&'()\[\]{|}<>*+,./;=?@^`~\\]/;function Uu(u=""){var t,e;return null!==(e=null===(t=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===t?void 0:t.call(CSS,u))&&void 0!==e?e:function(u=""){return u.split("").map((u=>":"===u?`\\${$u} `:_u.test(u)?`\\${u}`:escape(u).replace(/%/g,"\\"))).join("")}(u)}const Wu={tag:Ru,id:function(u){return 0===u.length||u.length>1?[]:Pu(u[0])},class:function(u){return Eu(u.map(ju))},attribute:function(u){return Eu(u.map(Ou))},nthchild:function(u){return Eu(u.map(Tu))},nthoftype:function(u){return Eu(u.map(Nu))}},Gu={tag:Iu,id:Pu,class:ju,attribute:Ou,nthchild:Tu,nthoftype:Nu};function Vu(u){return u.includes(Du.tag)||u.includes(Du.nthoftype)?[...u]:[...u,Du.tag]}function Hu(u={}){const t=[...bu];return u[Du.tag]&&u[Du.nthoftype]&&t.splice(t.indexOf(Du.tag),1),t.map((t=>{return(r=u)[e=t]?r[e].join(""):"";var e,r})).join("")}function qu(u,t,e="",r){const n=function(u,t){return""===t?u:function(u,t){return[...u.map((u=>t+ou.DESCENDANT+u)),...u.map((u=>t+ou.CHILD+u))]}(u,t)}(function(u,t,e){const r=function(u,t){const{blacklist:e,whitelist:r,combineWithinSelector:n,maxCombinations:o}=t,D=yu(e),i=yu(r);return function(u){const{selectors:t,includeTag:e}=u,r=[].concat(t);return e&&!r.includes("tag")&&r.push("tag"),r}(t).reduce(((t,e)=>{const r=function(u,t){var e;return(null!==(e=Wu[t])&&void 0!==e?e:()=>[])(u)}(u,e),a=function(u=[],t,e){return u.filter((u=>e(u)||!t(u)))}(r,D,i),c=function(u=[],t){return u.sort(((u,e)=>{const r=t(u),n=t(e);return r&&!n?-1:!r&&n?1:0}))}(a,i);return t[e]=n?Mu(c,{maxResults:o}):c.map((u=>[u])),t}),{})}(u,e),n=function(u,t){return function(u){const{selectors:t,combineBetweenSelectors:e,includeTag:r,maxCandidates:n}=u,o=e?Mu(t,{maxResults:n}):t.map((u=>[u]));return r?o.map(Vu):o}(t).map((t=>function(u,t){const e={};return u.forEach((u=>{const r=t[u];r.length>0&&(e[u]=r)})),function(u={}){let t=[];return Object.entries(u).forEach((([u,e])=>{t=e.flatMap((e=>0===t.length?[{[u]:e}]:t.map((t=>Object.assign(Object.assign({},t),{[u]:e})))))})),t}(e).map(Hu)}(t,u))).filter((u=>u.length>0))}(r,e),o=Cu(n);return[...new Set(o)]}(u,r.root,r),e);for(const t of n)if(du(u,t,r.root))return t;return null}function Xu(u){return{value:u,include:!1}}function Yu({selectors:u,operator:t}){let e=[...bu];u[Du.tag]&&u[Du.nthoftype]&&(e=e.filter((u=>u!==Du.tag)));let r="";return e.forEach((t=>{(u[t]||[]).forEach((({value:u,include:t})=>{t&&(r+=u)}))})),t+r}function zu(u){return[":root",...hu(u).reverse().map((u=>{const t=function(u,t,e=ou.NONE){const r={};return t.forEach((t=>{Reflect.set(r,t,function(u,t){return Gu[t](u)}(u,t).map(Xu))})),{element:u,operator:e,selectors:r}}(u,[Du.nthchild],ou.CHILD);return t.selectors.nthchild.forEach((u=>{u.include=!0})),t})).map(Yu)].join("")}function Ju(u,t={}){const e=function(u){(u instanceof NodeList||u instanceof HTMLCollection)&&(u=Array.from(u));const t=(Array.isArray(u)?u:[u]).filter(nu);return[...new Set(t)]}(u),r=function(u,t={}){const e=Object.assign(Object.assign({},cu),t);return{selectors:(r=e.selectors,Array.isArray(r)?r.filter((u=>{return t=Du,e=u,Object.values(t).includes(e);var t,e})):[]),whitelist:fu(e.whitelist),blacklist:fu(e.blacklist),root:pu(e.root,u),combineWithinSelector:!!e.combineWithinSelector,combineBetweenSelectors:!!e.combineBetweenSelectors,includeTag:!!e.includeTag,maxCombinations:Au(e.maxCombinations),maxCandidates:Au(e.maxCandidates)};var r}(e[0],t);let n="",o=r.root;function D(){return function(u,t,e="",r){if(0===u.length)return null;const n=[u.length>1?u:[],...Bu(u,t).map((u=>[u]))];for(const u of n){const t=qu(u,0,e,r);if(t)return{foundElements:u,selector:t}}return null}(e,o,n,r)}let i=D();for(;i;){const{foundElements:u,selector:t}=i;if(du(e,t,r.root))return t;o=u[0],n=t,i=D()}return e.length>1?e.map((u=>Ju(u,r))).join(", "):function(u){return u.map(zu).join(", ")}(e)}function Ku(u){return null==u?null:-1!=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"].indexOf(u.nodeName.toLowerCase())||u.hasAttribute("contenteditable")&&"false"!=u.getAttribute("contenteditable").toLowerCase()?u.outerHTML:u.parentElement?Ku(u.parentElement):null}function Zu(u){for(var t=0;t0&&t.top0&&t.left=6||Math.abs(t.offsetY)>=6)&&(e=!1,n=Android.onDragStart(JSON.stringify(t))):n=Android.onDragMove(JSON.stringify(t)),n&&(u.stopPropagation(),u.preventDefault())}}),{passive:!1});var t=void 0,e=!1,r=window.devicePixelRatio}(document)})),window.addEventListener("keydown",(function(u){et(u)||(rt(u),nt(u,"down"))})),window.addEventListener("keyup",(function(u){et(u)||(rt(u),nt(u,"up"))}));var ot=e(5155);e.n(ot)().shim();var Dt=!0;function it(){Dt&&N.apply(null,arguments)}window.addEventListener("load",(function(){var u=!1;document.addEventListener("selectionchange",(function(){var t=window.getSelection().isCollapsed;t&&u?(u=!1,Android.onSelectionEnd(),P()):t||u||(u=!0,Android.onSelectionStart())}))}),!1),window.readium={scrollToId:function(u){var t=document.getElementById(u);return!!t&&S(t.getBoundingClientRect())},scrollToPosition:function(u){if(u<0||u>1)throw"scrollToPosition() must be given a position from 0.0 to 1.0";var t;v()?x()?(t=document.scrollingElement.scrollWidth*u,document.scrollingElement.scrollLeft=-t):(t=document.scrollingElement.scrollHeight*u,document.scrollingElement.scrollTop=t):(t=document.scrollingElement.scrollWidth*u*(w()?-1:1),document.scrollingElement.scrollLeft=j(t))},scrollToLocator:function(u){var t=T(u);return!!t&&function(u){return S(u.getBoundingClientRect())}(t)},scrollLeft:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX-b,e=w()?-(u-b):0;return O(Math.max(t,e))},scrollRight:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX+b,e=w()?0:u-b;return O(Math.min(t,e))},scrollToStart:function(){v()&&!x()?document.scrollingElement.scrollTop=0:document.scrollingElement.scrollLeft=0},scrollToEnd:function(){var u=document.scrollingElement;if(v())x()?u.scrollLeft=-document.scrollingElement.scrollWidth:u.scrollTop=document.body.scrollHeight;else{var t=w()?-1:1;u.scrollLeft=j(u.scrollWidth*t)}},setCSSProperties:function(u){for(var t in u)I(t,u[t])},setProperty:I,removeProperty:R,getCurrentSelection:function(){var u=function(){var u=window.getSelection();if(u&&!u.isCollapsed){var t=u.toString();if(0!==t.trim().replace(/\n/g," ").replace(/\s\s+/g," ").length&&u.anchorNode&&u.focusNode){var e=1===u.rangeCount?u.getRangeAt(0):function(u,t,e,r){var n=new Range;if(n.setStart(u,t),n.setEnd(e,r),!n.collapsed)return n;it(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");var o=new Range;if(o.setStart(e,r),o.setEnd(u,t),!o.collapsed)return it(">>> createOrderedRange RANGE REVERSE OK."),n;it(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!")}(u.anchorNode,u.anchorOffset,u.focusNode,u.focusOffset);if(e&&!e.collapsed){var r=document.body.textContent,n=s.fromRange(e).relativeTo(document.body),o=n.start.offset,D=n.end.offset,i=r.slice(Math.max(0,o-200),o),a=i.search(/(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/g);-1!==a&&(i=i.slice(a+1));var c=r.slice(D,Math.min(r.length,D+200)),F=Array.from(c.matchAll(/(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g)).pop();return void 0!==F&&F.index>1&&(c=c.slice(0,F.index+1)),{highlight:t,before:i,after:c}}it("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!")}}}();return u?{text:u,rect:function(){try{var u=window.getSelection();if(!u)return;return _(u.getRangeAt(0).getBoundingClientRect())}catch(u){return M(u),null}}()}:null},registerDecorationTemplates:function(u){for(var t="",e=0,r=Object.entries(u);e>31&1}function n(u,t,e,n){var o=u.P[e],D=u.M[e],i=n>>>31,a=t[e]|i,c=a|D,F=(a&o)+o^o|a,l=D|~(F|o),f=o&F,s=r(l&u.lastRowMask[e])-r(f&u.lastRowMask[e]);return l<<=1,f<<=1,o=(f|=i)|~(c|(l|=r(n)-i)),D=l&c,u.P[e]=o,u.M[e]=D,s}function o(u,t,e){if(0===t.length)return[];e=Math.min(e,t.length);var r=[],o=32,D=Math.ceil(t.length/o)-1,i={P:new Uint32Array(D+1),M:new Uint32Array(D+1),lastRowMask:new Uint32Array(D+1)};i.lastRowMask.fill(1<<31),i.lastRowMask[D]=1<<(t.length-1)%o;for(var a=new Uint32Array(D+1),c=new Map,F=[],l=0;l<256;l++)F.push(a);for(var f=0;f=t.length||t.charCodeAt(C)===s&&(p[A]|=1<0&&d[y]>=e+o;)y-=1;y===D&&d[y]<=e&&(d[y]-1?n(e):e}},2755:function(u,t,e){"use strict";var r=e(3569),n=e(2870),o=n("%Function.prototype.apply%"),D=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||r.call(D,o),a=n("%Object.getOwnPropertyDescriptor%",!0),c=n("%Object.defineProperty%",!0),F=n("%Math.max%");if(c)try{c({},"a",{value:1})}catch(u){c=null}u.exports=function(u){var t=i(r,D,arguments);return a&&c&&a(t,"length").configurable&&c(t,"length",{value:1+F(0,u.length-(arguments.length-1))}),t};var l=function(){return i(r,o,arguments)};c?c(u.exports,"apply",{value:l}):u.exports.apply=l},6663:function(u,t,e){"use strict";var r=e(229)(),n=e(2870),o=r&&n("%Object.defineProperty%",!0),D=n("%SyntaxError%"),i=n("%TypeError%"),a=e(658);u.exports=function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new i("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new i("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new i("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new i("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new i("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new i("`loose`, if provided, must be a boolean");var r=arguments.length>3?arguments[3]:null,n=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,F=arguments.length>6&&arguments[6],l=!!a&&a(u,t);if(o)o(u,t,{configurable:null===c&&l?l.configurable:!c,enumerable:null===r&&l?l.enumerable:!r,value:e,writable:null===n&&l?l.writable:!n});else{if(!F&&(r||n||c))throw new D("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");u[t]=e}}},9722:function(u,t,e){"use strict";var r=e(2051),n="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),o=Object.prototype.toString,D=Array.prototype.concat,i=e(6663),a=e(229)(),c=function(u,t,e,r){if(t in u)if(!0===r){if(u[t]===e)return}else if("function"!=typeof(n=r)||"[object Function]"!==o.call(n)||!r())return;var n;a?i(u,t,e,!0):i(u,t,e)},F=function(u,t){var e=arguments.length>2?arguments[2]:{},o=r(t);n&&(o=D.call(o,Object.getOwnPropertySymbols(t)));for(var i=0;i2&&arguments[2]&&arguments[2].force;!D||!e&&o(u,D)||(r?r(u,D,{configurable:!0,enumerable:!1,value:t,writable:!1}):u[D]=t)}},7358:function(u,t,e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator,n=e(7959),o=e(3655),D=e(455),i=e(8760);u.exports=function(u){if(n(u))return u;var t,e="default";if(arguments.length>1&&(arguments[1]===String?e="string":arguments[1]===Number&&(e="number")),r&&(Symbol.toPrimitive?t=function(u,t){var e=u[t];if(null!=e){if(!o(e))throw new TypeError(e+" returned for property "+t+" of object "+u+" is not a function");return e}}(u,Symbol.toPrimitive):i(u)&&(t=Symbol.prototype.valueOf)),void 0!==t){var a=t.call(u,e);if(n(a))return a;throw new TypeError("unable to convert exotic object to primitive")}return"default"===e&&(D(u)||i(u))&&(e="string"),function(u,t){if(null==u)throw new TypeError("Cannot call method on "+u);if("string"!=typeof t||"number"!==t&&"string"!==t)throw new TypeError('hint must be "string" or "number"');var e,r,D,i="string"===t?["toString","valueOf"]:["valueOf","toString"];for(D=0;D1&&"boolean"!=typeof t)throw new D('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,u))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var e=function(u){var t=v(u,0,1),e=v(u,-1);if("%"===t&&"%"!==e)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===e&&"%"!==t)throw new n("invalid intrinsic syntax, expected opening `%`");var r=[];return b(u,x,(function(u,t,e,n){r[r.length]=e?b(n,S,"$1"):t||u})),r}(u),r=e.length>0?e[0]:"",o=O("%"+r+"%",t),i=o.name,c=o.value,F=!1,l=o.alias;l&&(r=l[0],m(e,g([0,1],l)));for(var f=1,s=!0;f=e.length){var y=a(c,p);c=(s=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:c[p]}else s=B(c,p),c=c[p];s&&!F&&(E[i]=c)}}return c}},658:function(u,t,e){"use strict";var r=e(2870)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(u){r=null}u.exports=r},229:function(u,t,e){"use strict";var r=e(2870)("%Object.defineProperty%",!0),n=function(){if(r)try{return r({},"a",{value:1}),!0}catch(u){return!1}return!1};n.hasArrayLengthDefineBug=function(){if(!n())return null;try{return 1!==r([],"length",{value:1}).length}catch(u){return!0}},u.exports=n},3413:function(u){"use strict";var t={foo:{}},e=Object;u.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof e)}},1143:function(u,t,e){"use strict";var r="undefined"!=typeof Symbol&&Symbol,n=e(9985);u.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&n()}},9985:function(u){"use strict";u.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var u={},t=Symbol("test"),e=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;for(t in u[t]=42,u)return!1;if("function"==typeof Object.keys&&0!==Object.keys(u).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(u).length)return!1;var r=Object.getOwnPropertySymbols(u);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(u,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var n=Object.getOwnPropertyDescriptor(u,t);if(42!==n.value||!0!==n.enumerable)return!1}return!0}},3060:function(u,t,e){"use strict";var r=e(9985);u.exports=function(){return r()&&!!Symbol.toStringTag}},9545:function(u){"use strict";var t={}.hasOwnProperty,e=Function.prototype.call;u.exports=e.bind?e.bind(t):function(u,r){return e.call(t,u,r)}},7284:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=e(5714)(),D=r("%TypeError%"),i={assert:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");if(o.assert(u),!i.has(u,t))throw new D("`"+t+"` is not present on `O`")},get:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return e&&e["$"+t]},has:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return!!e&&n(e,"$"+t)},set:function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var r=o.get(u);r||(r={},o.set(u,r)),r["$"+t]=e}};Object.freeze&&Object.freeze(i),u.exports=i},3655:function(u){"use strict";var t,e,r=Function.prototype.toString,n="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof n&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw e}}),e={},n((function(){throw 42}),null,t)}catch(u){u!==e&&(n=null)}else n=null;var o=/^\s*class\b/,D=function(u){try{var t=r.call(u);return o.test(t)}catch(u){return!1}},i=function(u){try{return!D(u)&&(r.call(u),!0)}catch(u){return!1}},a=Object.prototype.toString,c="function"==typeof Symbol&&!!Symbol.toStringTag,F=!(0 in[,]),l=function(){return!1};if("object"==typeof document){var f=document.all;a.call(f)===a.call(document.all)&&(l=function(u){if((F||!u)&&(void 0===u||"object"==typeof u))try{var t=a.call(u);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==u("")}catch(u){}return!1})}u.exports=n?function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;try{n(u,null,t)}catch(u){if(u!==e)return!1}return!D(u)&&i(u)}:function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;if(c)return i(u);if(D(u))return!1;var t=a.call(u);return!("[object Function]"!==t&&"[object GeneratorFunction]"!==t&&!/^\[object HTML/.test(t))&&i(u)}},455:function(u,t,e){"use strict";var r=Date.prototype.getDay,n=Object.prototype.toString,o=e(3060)();u.exports=function(u){return"object"==typeof u&&null!==u&&(o?function(u){try{return r.call(u),!0}catch(u){return!1}}(u):"[object Date]"===n.call(u))}},5494:function(u,t,e){"use strict";var r,n,o,D,i=e(3099),a=e(3060)();if(a){r=i("Object.prototype.hasOwnProperty"),n=i("RegExp.prototype.exec"),o={};var c=function(){throw o};D={toString:c,valueOf:c},"symbol"==typeof Symbol.toPrimitive&&(D[Symbol.toPrimitive]=c)}var F=i("Object.prototype.toString"),l=Object.getOwnPropertyDescriptor;u.exports=a?function(u){if(!u||"object"!=typeof u)return!1;var t=l(u,"lastIndex");if(!t||!r(t,"value"))return!1;try{n(u,D)}catch(u){return u===o}}:function(u){return!(!u||"object"!=typeof u&&"function"!=typeof u)&&"[object RegExp]"===F(u)}},8760:function(u,t,e){"use strict";var r=Object.prototype.toString;if(e(1143)()){var n=Symbol.prototype.toString,o=/^Symbol\(.*\)$/;u.exports=function(u){if("symbol"==typeof u)return!0;if("[object Symbol]"!==r.call(u))return!1;try{return function(u){return"symbol"==typeof u.valueOf()&&o.test(n.call(u))}(u)}catch(u){return!1}}}else u.exports=function(u){return!1}},4538:function(u,t,e){var r="function"==typeof Map&&Map.prototype,n=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,o=r&&n&&"function"==typeof n.get?n.get:null,D=r&&Map.prototype.forEach,i="function"==typeof Set&&Set.prototype,a=Object.getOwnPropertyDescriptor&&i?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=i&&a&&"function"==typeof a.get?a.get:null,F=i&&Set.prototype.forEach,l="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,f="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,s="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,p=Boolean.prototype.valueOf,A=Object.prototype.toString,E=Function.prototype.toString,C=String.prototype.match,y=String.prototype.slice,d=String.prototype.replace,h=String.prototype.toUpperCase,B=String.prototype.toLowerCase,g=RegExp.prototype.test,m=Array.prototype.concat,b=Array.prototype.join,v=Array.prototype.slice,w=Math.floor,x="function"==typeof BigInt?BigInt.prototype.valueOf:null,S=Object.getOwnPropertySymbols,O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,j="function"==typeof Symbol&&"object"==typeof Symbol.iterator,P="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol.toStringTag,1)?Symbol.toStringTag:null,T=Object.prototype.propertyIsEnumerable,I=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(u){return u.__proto__}:null);function R(u,t){if(u===1/0||u===-1/0||u!=u||u&&u>-1e3&&u<1e3||g.call(/e/,t))return t;var e=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof u){var r=u<0?-w(-u):w(u);if(r!==u){var n=String(r),o=y.call(t,n.length+1);return d.call(n,e,"$&_")+"."+d.call(d.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return d.call(t,e,"$&_")}var N=e(7002),M=N.custom,k=W(M)?M:null;function L(u,t,e){var r="double"===(e.quoteStyle||t)?'"':"'";return r+u+r}function $(u){return d.call(String(u),/"/g,""")}function _(u){return!("[object Array]"!==H(u)||P&&"object"==typeof u&&P in u)}function U(u){return!("[object RegExp]"!==H(u)||P&&"object"==typeof u&&P in u)}function W(u){if(j)return u&&"object"==typeof u&&u instanceof Symbol;if("symbol"==typeof u)return!0;if(!u||"object"!=typeof u||!O)return!1;try{return O.call(u),!0}catch(u){}return!1}u.exports=function u(t,e,r,n){var i=e||{};if(V(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!V(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var A=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return X(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var h=String(t);return A?R(t,h):h}if("bigint"==typeof t){var g=String(t)+"n";return A?R(t,g):g}var w=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=w&&w>0&&"object"==typeof t)return _(t)?"[Array]":"[Object]";var S,M=function(u,t){var e;if("\t"===u.indent)e="\t";else{if(!("number"==typeof u.indent&&u.indent>0))return null;e=b.call(Array(u.indent+1)," ")}return{base:e,prev:b.call(Array(t+1),e)}}(i,r);if(void 0===n)n=[];else if(q(n,t)>=0)return"[Circular]";function G(t,e,o){if(e&&(n=v.call(n)).push(e),o){var D={depth:i.depth};return V(i,"quoteStyle")&&(D.quoteStyle=i.quoteStyle),u(t,D,r+1,n)}return u(t,i,r+1,n)}if("function"==typeof t&&!U(t)){var Y=function(u){if(u.name)return u.name;var t=C.call(E.call(u),/^function\s*([\w$]+)/);return t?t[1]:null}(t),uu=Q(t,G);return"[Function"+(Y?": "+Y:" (anonymous)")+"]"+(uu.length>0?" { "+b.call(uu,", ")+" }":"")}if(W(t)){var tu=j?d.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):O.call(t);return"object"!=typeof t||j?tu:z(tu)}if((S=t)&&"object"==typeof S&&("undefined"!=typeof HTMLElement&&S instanceof HTMLElement||"string"==typeof S.nodeName&&"function"==typeof S.getAttribute)){for(var eu="<"+B.call(String(t.nodeName)),ru=t.attributes||[],nu=0;nu",t.childNodes&&t.childNodes.length&&(eu+="..."),eu+""+B.call(String(t.nodeName))+">"}if(_(t)){if(0===t.length)return"[]";var ou=Q(t,G);return M&&!function(u){for(var t=0;t=0)return!1;return!0}(ou)?"["+Z(ou,M)+"]":"[ "+b.call(ou,", ")+" ]"}if(function(u){return!("[object Error]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)){var Du=Q(t,G);return"cause"in Error.prototype||!("cause"in t)||T.call(t,"cause")?0===Du.length?"["+String(t)+"]":"{ ["+String(t)+"] "+b.call(Du,", ")+" }":"{ ["+String(t)+"] "+b.call(m.call("[cause]: "+G(t.cause),Du),", ")+" }"}if("object"==typeof t&&a){if(k&&"function"==typeof t[k]&&N)return N(t,{depth:w-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(u){if(!o||!u||"object"!=typeof u)return!1;try{o.call(u);try{c.call(u)}catch(u){return!0}return u instanceof Map}catch(u){}return!1}(t)){var iu=[];return D&&D.call(t,(function(u,e){iu.push(G(e,t,!0)+" => "+G(u,t))})),K("Map",o.call(t),iu,M)}if(function(u){if(!c||!u||"object"!=typeof u)return!1;try{c.call(u);try{o.call(u)}catch(u){return!0}return u instanceof Set}catch(u){}return!1}(t)){var au=[];return F&&F.call(t,(function(u){au.push(G(u,t))})),K("Set",c.call(t),au,M)}if(function(u){if(!l||!u||"object"!=typeof u)return!1;try{l.call(u,l);try{f.call(u,f)}catch(u){return!0}return u instanceof WeakMap}catch(u){}return!1}(t))return J("WeakMap");if(function(u){if(!f||!u||"object"!=typeof u)return!1;try{f.call(u,f);try{l.call(u,l)}catch(u){return!0}return u instanceof WeakSet}catch(u){}return!1}(t))return J("WeakSet");if(function(u){if(!s||!u||"object"!=typeof u)return!1;try{return s.call(u),!0}catch(u){}return!1}(t))return J("WeakRef");if(function(u){return!("[object Number]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(Number(t)));if(function(u){if(!u||"object"!=typeof u||!x)return!1;try{return x.call(u),!0}catch(u){}return!1}(t))return z(G(x.call(t)));if(function(u){return!("[object Boolean]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(p.call(t));if(function(u){return!("[object String]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(String(t)));if(!function(u){return!("[object Date]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)&&!U(t)){var cu=Q(t,G),Fu=I?I(t)===Object.prototype:t instanceof Object||t.constructor===Object,lu=t instanceof Object?"":"null prototype",fu=!Fu&&P&&Object(t)===t&&P in t?y.call(H(t),8,-1):lu?"Object":"",su=(Fu||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(fu||lu?"["+b.call(m.call([],fu||[],lu||[]),": ")+"] ":"");return 0===cu.length?su+"{}":M?su+"{"+Z(cu,M)+"}":su+"{ "+b.call(cu,", ")+" }"}return String(t)};var G=Object.prototype.hasOwnProperty||function(u){return u in this};function V(u,t){return G.call(u,t)}function H(u){return A.call(u)}function q(u,t){if(u.indexOf)return u.indexOf(t);for(var e=0,r=u.length;et.maxStringLength){var e=u.length-t.maxStringLength,r="... "+e+" more character"+(e>1?"s":"");return X(y.call(u,0,t.maxStringLength),t)+r}return L(d.call(d.call(u,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Y),"single",t)}function Y(u){var t=u.charCodeAt(0),e={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return e?"\\"+e:"\\x"+(t<16?"0":"")+h.call(t.toString(16))}function z(u){return"Object("+u+")"}function J(u){return u+" { ? }"}function K(u,t,e,r){return u+" ("+t+") {"+(r?Z(e,r):b.call(e,", "))+"}"}function Z(u,t){if(0===u.length)return"";var e="\n"+t.prev+t.base;return e+b.call(u,","+e)+"\n"+t.prev}function Q(u,t){var e=_(u),r=[];if(e){r.length=u.length;for(var n=0;n0&&!n.call(u,0))for(var A=0;A0)for(var E=0;E=0&&"[object Function]"===t.call(u.callee)),r}},9766:function(u,t,e){"use strict";var r=e(8921),n=Object,o=TypeError;u.exports=r((function(){if(null!=this&&this!==n(this))throw new o("RegExp.prototype.flags getter called on non-object");var u="";return this.hasIndices&&(u+="d"),this.global&&(u+="g"),this.ignoreCase&&(u+="i"),this.multiline&&(u+="m"),this.dotAll&&(u+="s"),this.unicode&&(u+="u"),this.unicodeSets&&(u+="v"),this.sticky&&(u+="y"),u}),"get flags",!0)},483:function(u,t,e){"use strict";var r=e(9722),n=e(2755),o=e(9766),D=e(5113),i=e(7299),a=n(D());r(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},5113:function(u,t,e){"use strict";var r=e(9766),n=e(9722).supportsDescriptors,o=Object.getOwnPropertyDescriptor;u.exports=function(){if(n&&"gim"===/a/gim.flags){var u=o(RegExp.prototype,"flags");if(u&&"function"==typeof u.get&&"boolean"==typeof RegExp.prototype.dotAll&&"boolean"==typeof RegExp.prototype.hasIndices){var t="",e={};if(Object.defineProperty(e,"hasIndices",{get:function(){t+="d"}}),Object.defineProperty(e,"sticky",{get:function(){t+="y"}}),"dy"===t)return u.get}}return r}},7299:function(u,t,e){"use strict";var r=e(9722).supportsDescriptors,n=e(5113),o=Object.getOwnPropertyDescriptor,D=Object.defineProperty,i=TypeError,a=Object.getPrototypeOf,c=/a/;u.exports=function(){if(!r||!a)throw new i("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var u=n(),t=a(c),e=o(t,"flags");return e&&e.get===u||D(t,"flags",{configurable:!0,enumerable:!1,get:u}),u}},7582:function(u,t,e){"use strict";var r=e(3099),n=e(2870),o=e(5494),D=r("RegExp.prototype.exec"),i=n("%TypeError%");u.exports=function(u){if(!o(u))throw new i("`regex` must be a RegExp");return function(t){return null!==D(u,t)}}},8921:function(u,t,e){"use strict";var r=e(6663),n=e(229)(),o=e(5610).functionsHaveConfigurableNames(),D=TypeError;u.exports=function(u,t){if("function"!=typeof u)throw new D("`fn` is not a function");return arguments.length>2&&!!arguments[2]&&!o||(n?r(u,"name",t,!0,!0):r(u,"name",t)),u}},5714:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=e(4538),D=r("%TypeError%"),i=r("%WeakMap%",!0),a=r("%Map%",!0),c=n("WeakMap.prototype.get",!0),F=n("WeakMap.prototype.set",!0),l=n("WeakMap.prototype.has",!0),f=n("Map.prototype.get",!0),s=n("Map.prototype.set",!0),p=n("Map.prototype.has",!0),A=function(u,t){for(var e,r=u;null!==(e=r.next);r=e)if(e.key===t)return r.next=e.next,e.next=u.next,u.next=e,e};u.exports=function(){var u,t,e,r={assert:function(u){if(!r.has(u))throw new D("Side channel does not contain "+o(u))},get:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return c(u,r)}else if(a){if(t)return f(t,r)}else if(e)return function(u,t){var e=A(u,t);return e&&e.value}(e,r)},has:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return l(u,r)}else if(a){if(t)return p(t,r)}else if(e)return function(u,t){return!!A(u,t)}(e,r);return!1},set:function(r,n){i&&r&&("object"==typeof r||"function"==typeof r)?(u||(u=new i),F(u,r,n)):a?(t||(t=new a),s(t,r,n)):(e||(e={key:{},next:null}),function(u,t,e){var r=A(u,t);r?r.value=e:u.next={key:t,next:u.next,value:e}}(e,r,n))}};return r}},3073:function(u,t,e){"use strict";var r=e(7113),n=e(151),o=e(1959),D=e(9497),i=e(5128),a=e(6751),c=e(3099),F=e(1143)(),l=e(483),f=c("String.prototype.indexOf"),s=e(2009),p=function(u){var t=s();if(F&&"symbol"==typeof Symbol.matchAll){var e=o(u,Symbol.matchAll);return e===RegExp.prototype[Symbol.matchAll]&&e!==t?t:e}if(D(u))return t};u.exports=function(u){var t=a(this);if(null!=u){if(D(u)){var e="flags"in u?n(u,"flags"):l(u);if(a(e),f(i(e),"g")<0)throw new TypeError("matchAll requires a global regular expression")}var o=p(u);if(void 0!==o)return r(o,u,[t])}var c=i(t),F=new RegExp(u,"g");return r(p(F),F,[c])}},5155:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(3073),D=e(1794),i=e(3911),a=r(o);n(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},2009:function(u,t,e){"use strict";var r=e(1143)(),n=e(8012);u.exports=function(){return r&&"symbol"==typeof Symbol.matchAll&&"function"==typeof RegExp.prototype[Symbol.matchAll]?RegExp.prototype[Symbol.matchAll]:n}},1794:function(u,t,e){"use strict";var r=e(3073);u.exports=function(){if(String.prototype.matchAll)try{"".matchAll(RegExp.prototype)}catch(u){return String.prototype.matchAll}return r}},8012:function(u,t,e){"use strict";var r=e(1398),n=e(151),o=e(8322),D=e(2449),i=e(3995),a=e(5128),c=e(1874),F=e(483),l=e(8921),f=e(3099)("String.prototype.indexOf"),s=RegExp,p="flags"in RegExp.prototype,A=l((function(u){var t=this;if("Object"!==c(t))throw new TypeError('"this" value must be an Object');var e=a(u),l=function(u,t){var e="flags"in t?n(t,"flags"):a(F(t));return{flags:e,matcher:new u(p&&"string"==typeof e?t:u===s?t.source:t,e)}}(D(t,s),t),A=l.flags,E=l.matcher,C=i(n(t,"lastIndex"));o(E,"lastIndex",C,!0);var y=f(A,"g")>-1,d=f(A,"u")>-1;return r(E,e,y,d)}),"[Symbol.matchAll]",!0);u.exports=A},3911:function(u,t,e){"use strict";var r=e(9722),n=e(1143)(),o=e(1794),D=e(2009),i=Object.defineProperty,a=Object.getOwnPropertyDescriptor;u.exports=function(){var u=o();if(r(String.prototype,{matchAll:u},{matchAll:function(){return String.prototype.matchAll!==u}}),n){var t=Symbol.matchAll||(Symbol.for?Symbol.for("Symbol.matchAll"):Symbol("Symbol.matchAll"));if(r(Symbol,{matchAll:t},{matchAll:function(){return Symbol.matchAll!==t}}),i&&a){var e=a(Symbol,t);e&&!e.configurable||i(Symbol,t,{configurable:!1,enumerable:!1,value:t,writable:!1})}var c=D(),F={};F[t]=c;var l={};l[t]=function(){return RegExp.prototype[t]!==c},r(RegExp.prototype,F,l)}return u}},8125:function(u,t,e){"use strict";var r=e(6751),n=e(5128),o=e(3099)("String.prototype.replace"),D=/^\s$/.test(""),i=D?/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/:/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,a=D?/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/:/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;u.exports=function(){var u=n(r(this));return o(o(u,i,""),a,"")}},9434:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(6751),D=e(8125),i=e(3228),a=e(818),c=r(i()),F=function(u){return o(u),c(u)};n(F,{getPolyfill:i,implementation:D,shim:a}),u.exports=F},3228:function(u,t,e){"use strict";var r=e(8125);u.exports=function(){return String.prototype.trim&&""==="".trim()&&""==="".trim()&&"_"==="_".trim()&&"_"==="_".trim()?String.prototype.trim:r}},818:function(u,t,e){"use strict";var r=e(9722),n=e(3228);u.exports=function(){var u=n();return r(String.prototype,{trim:u},{trim:function(){return String.prototype.trim!==u}}),u}},7002:function(){},1510:function(u,t,e){"use strict";var r=e(2870),n=e(6318),o=e(1874),D=e(2990),i=e(5674),a=r("%TypeError%");u.exports=function(u,t,e){if("String"!==o(u))throw new a("Assertion failed: `S` must be a String");if(!D(t)||t<0||t>i)throw new a("Assertion failed: `length` must be an integer >= 0 and <= 2**53");if("Boolean"!==o(e))throw new a("Assertion failed: `unicode` must be a Boolean");return e?t+1>=u.length?t+1:t+n(u,t)["[[CodeUnitCount]]"]:t+1}},7113:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=r("%TypeError%"),D=e(6287),i=r("%Reflect.apply%",!0)||n("Function.prototype.apply");u.exports=function(u,t){var e=arguments.length>2?arguments[2]:[];if(!D(e))throw new o("Assertion failed: optional `argumentsList`, if provided, must be a List");return i(u,t,e)}},6318:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099),o=e(5541),D=e(959),i=e(1874),a=e(1751),c=n("String.prototype.charAt"),F=n("String.prototype.charCodeAt");u.exports=function(u,t){if("String"!==i(u))throw new r("Assertion failed: `string` must be a String");var e=u.length;if(t<0||t>=e)throw new r("Assertion failed: `position` must be >= 0, and < the length of `string`");var n=F(u,t),l=c(u,t),f=o(n),s=D(n);if(!f&&!s)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!1};if(s||t+1===e)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0};var p=F(u,t+1);return D(p)?{"[[CodePoint]]":a(n,p),"[[CodeUnitCount]]":2,"[[IsUnpairedSurrogate]]":!1}:{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0}}},5702:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(1874);u.exports=function(u,t){if("Boolean"!==n(t))throw new r("Assertion failed: Type(done) is not Boolean");return{value:u,done:t}}},6782:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(2860),o=e(8357),D=e(3301),i=e(6284),a=e(8277),c=e(1874);u.exports=function(u,t,e){if("Object"!==c(u))throw new r("Assertion failed: Type(O) is not Object");if(!i(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");return n(D,a,o,u,t,{"[[Configurable]]":!0,"[[Enumerable]]":!1,"[[Value]]":e,"[[Writable]]":!0})}},1398:function(u,t,e){"use strict";var r=e(2870),n=e(1143)(),o=r("%TypeError%"),D=r("%IteratorPrototype%",!0),i=e(1510),a=e(5702),c=e(6782),F=e(151),l=e(5716),f=e(3500),s=e(8322),p=e(3995),A=e(5128),E=e(1874),C=e(7284),y=e(2263),d=function(u,t,e,r){if("String"!==E(t))throw new o("`S` must be a string");if("Boolean"!==E(e))throw new o("`global` must be a boolean");if("Boolean"!==E(r))throw new o("`fullUnicode` must be a boolean");C.set(this,"[[IteratingRegExp]]",u),C.set(this,"[[IteratedString]]",t),C.set(this,"[[Global]]",e),C.set(this,"[[Unicode]]",r),C.set(this,"[[Done]]",!1)};D&&(d.prototype=l(D)),c(d.prototype,"next",(function(){var u=this;if("Object"!==E(u))throw new o("receiver must be an object");if(!(u instanceof d&&C.has(u,"[[IteratingRegExp]]")&&C.has(u,"[[IteratedString]]")&&C.has(u,"[[Global]]")&&C.has(u,"[[Unicode]]")&&C.has(u,"[[Done]]")))throw new o('"this" value must be a RegExpStringIterator instance');if(C.get(u,"[[Done]]"))return a(void 0,!0);var t=C.get(u,"[[IteratingRegExp]]"),e=C.get(u,"[[IteratedString]]"),r=C.get(u,"[[Global]]"),n=C.get(u,"[[Unicode]]"),D=f(t,e);if(null===D)return C.set(u,"[[Done]]",!0),a(void 0,!0);if(r){if(""===A(F(D,"0"))){var c=p(F(t,"lastIndex")),l=i(e,c,n);s(t,"lastIndex",l,!0)}return a(D,!1)}return C.set(u,"[[Done]]",!0),a(D,!1)})),n&&(y(d.prototype,"RegExp String Iterator"),Symbol.iterator&&"function"!=typeof d.prototype[Symbol.iterator])&&c(d.prototype,Symbol.iterator,(function(){return this})),u.exports=function(u,t,e,r){return new d(u,t,e,r)}},3645:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(7999),o=e(2860),D=e(8357),i=e(8355),a=e(3301),c=e(6284),F=e(8277),l=e(7628),f=e(1874);u.exports=function(u,t,e){if("Object"!==f(u))throw new r("Assertion failed: Type(O) is not Object");if(!c(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var s=n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},e)?e:l(e);if(!n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},s))throw new r("Assertion failed: Desc is not a valid Property Descriptor");return o(a,F,D,u,t,s)}},8357:function(u,t,e){"use strict";var r=e(1489),n=e(1598),o=e(1874);u.exports=function(u){return void 0!==u&&r(o,"Property Descriptor","Desc",u),n(u)}},151:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284),D=e(1874);u.exports=function(u,t){if("Object"!==D(u))throw new r("Assertion failed: Type(O) is not Object");if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},1959:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(9374),o=e(7304),D=e(6284),i=e(4538);u.exports=function(u,t){if(!D(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var e=n(u,t);if(null!=e){if(!o(e))throw new r(i(t)+" is not a function: "+i(e));return e}}},9374:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284);u.exports=function(u,t){if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},8355:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Get]]")&&!r(u,"[[Set]]")))}},6287:function(u,t,e){"use strict";u.exports=e(2403)},7304:function(u,t,e){"use strict";u.exports=e(3655)},4791:function(u,t,e){"use strict";var r=e(6740)("%Reflect.construct%",!0),n=e(3645);try{n({},"",{"[[Get]]":function(){}})}catch(u){n=null}if(n&&r){var o={},D={};n(D,"length",{"[[Get]]":function(){throw o},"[[Enumerable]]":!0}),u.exports=function(u){try{r(u,D)}catch(u){return u===o}}}else u.exports=function(u){return"function"==typeof u&&!!u.prototype}},3301:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Value]]")&&!r(u,"[[Writable]]")))}},6284:function(u){"use strict";u.exports=function(u){return"string"==typeof u||"symbol"==typeof u}},9497:function(u,t,e){"use strict";var r=e(2870)("%Symbol.match%",!0),n=e(5494),o=e(5695);u.exports=function(u){if(!u||"object"!=typeof u)return!1;if(r){var t=u[r];if(void 0!==t)return o(t)}return n(u)}},5716:function(u,t,e){"use strict";var r=e(2870),n=r("%Object.create%",!0),o=r("%TypeError%"),D=r("%SyntaxError%"),i=e(6287),a=e(1874),c=e(7735),F=e(7284),l=e(3413)();u.exports=function(u){if(null!==u&&"Object"!==a(u))throw new o("Assertion failed: `proto` must be null or an object");var t,e=arguments.length<2?[]:arguments[1];if(!i(e))throw new o("Assertion failed: `additionalInternalSlotsList` must be an Array");if(n)t=n(u);else if(l)t={__proto__:u};else{if(null===u)throw new D("native Object.create support is required to create null objects");var r=function(){};r.prototype=u,t=new r}return e.length>0&&c(e,(function(u){F.set(t,u,void 0)})),t}},3500:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099)("RegExp.prototype.exec"),o=e(7113),D=e(151),i=e(7304),a=e(1874);u.exports=function(u,t){if("Object"!==a(u))throw new r("Assertion failed: `R` must be an Object");if("String"!==a(t))throw new r("Assertion failed: `S` must be a String");var e=D(u,"exec");if(i(e)){var c=o(e,u,[t]);if(null===c||"Object"===a(c))return c;throw new r('"exec" method must return `null` or an Object')}return n(u,t)}},6751:function(u,t,e){"use strict";u.exports=e(9572)},8277:function(u,t,e){"use strict";var r=e(159);u.exports=function(u,t){return u===t?0!==u||1/u==1/t:r(u)&&r(t)}},8322:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(6284),o=e(8277),D=e(1874),i=function(){try{return delete[].length,!0}catch(u){return!1}}();u.exports=function(u,t,e,a){if("Object"!==D(u))throw new r("Assertion failed: `O` must be an Object");if(!n(t))throw new r("Assertion failed: `P` must be a Property Key");if("Boolean"!==D(a))throw new r("Assertion failed: `Throw` must be a Boolean");if(a){if(u[t]=e,i&&!o(u[t],e))throw new r("Attempted to assign to readonly property.");return!0}try{return u[t]=e,!i||o(u[t],e)}catch(u){return!1}}},2449:function(u,t,e){"use strict";var r=e(2870),n=r("%Symbol.species%",!0),o=r("%TypeError%"),D=e(4791),i=e(1874);u.exports=function(u,t){if("Object"!==i(u))throw new o("Assertion failed: Type(O) is not Object");var e=u.constructor;if(void 0===e)return t;if("Object"!==i(e))throw new o("O.constructor is not an Object");var r=n?e[n]:void 0;if(null==r)return t;if(D(r))return r;throw new o("no constructor found")}},6207:function(u,t,e){"use strict";var r=e(2870),n=r("%Number%"),o=r("%RegExp%"),D=r("%TypeError%"),i=r("%parseInt%"),a=e(3099),c=e(7582),F=a("String.prototype.slice"),l=c(/^0b[01]+$/i),f=c(/^0o[0-7]+$/i),s=c(/^[-+]0x[0-9a-f]+$/i),p=c(new o("["+["
","",""].join("")+"]","g")),A=e(9434),E=e(1874);u.exports=function u(t){if("String"!==E(t))throw new D("Assertion failed: `argument` is not a String");if(l(t))return n(i(F(t,2),2));if(f(t))return n(i(F(t,2),8));if(p(t)||s(t))return NaN;var e=A(t);return e!==t?u(e):n(t)}},5695:function(u){"use strict";u.exports=function(u){return!!u}},1200:function(u,t,e){"use strict";var r=e(6542),n=e(5693),o=e(159),D=e(1117);u.exports=function(u){var t=r(u);return o(t)||0===t?0:D(t)?n(t):t}},3995:function(u,t,e){"use strict";var r=e(5674),n=e(1200);u.exports=function(u){var t=n(u);return t<=0?0:t>r?r:t}},6542:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%Number%"),D=e(8606),i=e(703),a=e(6207);u.exports=function(u){var t=D(u)?u:i(u,o);if("symbol"==typeof t)throw new n("Cannot convert a Symbol value to a number");if("bigint"==typeof t)throw new n("Conversion from 'BigInt' to 'number' is not allowed.");return"string"==typeof t?a(t):o(t)}},703:function(u,t,e){"use strict";var r=e(7358);u.exports=function(u){return arguments.length>1?r(u,arguments[1]):r(u)}},7628:function(u,t,e){"use strict";var r=e(9545),n=e(2870)("%TypeError%"),o=e(1874),D=e(5695),i=e(7304);u.exports=function(u){if("Object"!==o(u))throw new n("ToPropertyDescriptor requires an object");var t={};if(r(u,"enumerable")&&(t["[[Enumerable]]"]=D(u.enumerable)),r(u,"configurable")&&(t["[[Configurable]]"]=D(u.configurable)),r(u,"value")&&(t["[[Value]]"]=u.value),r(u,"writable")&&(t["[[Writable]]"]=D(u.writable)),r(u,"get")){var e=u.get;if(void 0!==e&&!i(e))throw new n("getter must be a function");t["[[Get]]"]=e}if(r(u,"set")){var a=u.set;if(void 0!==a&&!i(a))throw new n("setter must be a function");t["[[Set]]"]=a}if((r(t,"[[Get]]")||r(t,"[[Set]]"))&&(r(t,"[[Value]]")||r(t,"[[Writable]]")))throw new n("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return t}},5128:function(u,t,e){"use strict";var r=e(2870),n=r("%String%"),o=r("%TypeError%");u.exports=function(u){if("symbol"==typeof u)throw new o("Cannot convert a Symbol value to a string");return n(u)}},1874:function(u,t,e){"use strict";var r=e(6101);u.exports=function(u){return"symbol"==typeof u?"Symbol":"bigint"==typeof u?"BigInt":r(u)}},1751:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%String.fromCharCode%"),D=e(5541),i=e(959);u.exports=function(u,t){if(!D(u)||!i(t))throw new n("Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code");return o(u)+o(t)}},3567:function(u,t,e){"use strict";var r=e(1874),n=Math.floor;u.exports=function(u){return"BigInt"===r(u)?u:n(u)}},5693:function(u,t,e){"use strict";var r=e(2870),n=e(3567),o=r("%TypeError%");u.exports=function(u){if("number"!=typeof u&&"bigint"!=typeof u)throw new o("argument must be a Number or a BigInt");var t=u<0?-n(-u):n(u);return 0===t?0:t}},9572:function(u,t,e){"use strict";var r=e(2870)("%TypeError%");u.exports=function(u,t){if(null==u)throw new r(t||"Cannot call method on "+u);return u}},6101:function(u){"use strict";u.exports=function(u){return null===u?"Null":void 0===u?"Undefined":"function"==typeof u||"object"==typeof u?"Object":"number"==typeof u?"Number":"boolean"==typeof u?"Boolean":"string"==typeof u?"String":void 0}},6740:function(u,t,e){"use strict";u.exports=e(2870)},2860:function(u,t,e){"use strict";var r=e(229),n=e(2870),o=r()&&n("%Object.defineProperty%",!0),D=r.hasArrayLengthDefineBug(),i=D&&e(2403),a=e(3099)("Object.prototype.propertyIsEnumerable");u.exports=function(u,t,e,r,n,c){if(!o){if(!u(c))return!1;if(!c["[[Configurable]]"]||!c["[[Writable]]"])return!1;if(n in r&&a(r,n)!==!!c["[[Enumerable]]"])return!1;var F=c["[[Value]]"];return r[n]=F,t(r[n],F)}return D&&"length"===n&&"[[Value]]"in c&&i(r)&&r.length!==c["[[Value]]"]?(r.length=c["[[Value]]"],r.length===c["[[Value]]"]):(o(r,n,e(c)),!0)}},2403:function(u,t,e){"use strict";var r=e(2870)("%Array%"),n=!r.isArray&&e(3099)("Object.prototype.toString");u.exports=r.isArray||function(u){return"[object Array]"===n(u)}},1489:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%SyntaxError%"),D=e(9545),i=e(2990),a={"Property Descriptor":function(u){var t={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};if(!u)return!1;for(var e in u)if(D(u,e)&&!t[e])return!1;var r=D(u,"[[Value]]"),o=D(u,"[[Get]]")||D(u,"[[Set]]");if(r&&o)throw new n("Property Descriptors may not be both accessor and data descriptors");return!0},"Match Record":e(900),"Iterator Record":function(u){return D(u,"[[Iterator]]")&&D(u,"[[NextMethod]]")&&D(u,"[[Done]]")},"PromiseCapability Record":function(u){return!!u&&D(u,"[[Resolve]]")&&"function"==typeof u["[[Resolve]]"]&&D(u,"[[Reject]]")&&"function"==typeof u["[[Reject]]"]&&D(u,"[[Promise]]")&&u["[[Promise]]"]&&"function"==typeof u["[[Promise]]"].then},"AsyncGeneratorRequest Record":function(u){return!!u&&D(u,"[[Completion]]")&&D(u,"[[Capability]]")&&a["PromiseCapability Record"](u["[[Capability]]"])},"RegExp Record":function(u){return u&&D(u,"[[IgnoreCase]]")&&"boolean"==typeof u["[[IgnoreCase]]"]&&D(u,"[[Multiline]]")&&"boolean"==typeof u["[[Multiline]]"]&&D(u,"[[DotAll]]")&&"boolean"==typeof u["[[DotAll]]"]&&D(u,"[[Unicode]]")&&"boolean"==typeof u["[[Unicode]]"]&&D(u,"[[CapturingGroupsCount]]")&&"number"==typeof u["[[CapturingGroupsCount]]"]&&i(u["[[CapturingGroupsCount]]"])&&u["[[CapturingGroupsCount]]"]>=0}};u.exports=function(u,t,e,r){var D=a[t];if("function"!=typeof D)throw new o("unknown record type: "+t);if("Object"!==u(r)||!D(r))throw new n(e+" must be a "+t)}},7735:function(u){"use strict";u.exports=function(u,t){for(var e=0;e=55296&&u<=56319}},900:function(u,t,e){"use strict";var r=e(9545);u.exports=function(u){return r(u,"[[StartIndex]]")&&r(u,"[[EndIndex]]")&&u["[[StartIndex]]"]>=0&&u["[[EndIndex]]"]>=u["[[StartIndex]]"]&&String(parseInt(u["[[StartIndex]]"],10))===String(u["[[StartIndex]]"])&&String(parseInt(u["[[EndIndex]]"],10))===String(u["[[EndIndex]]"])}},159:function(u){"use strict";u.exports=Number.isNaN||function(u){return u!=u}},8606:function(u){"use strict";u.exports=function(u){return null===u||"function"!=typeof u&&"object"!=typeof u}},7999:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=r("%TypeError%");u.exports=function(u,t){if("Object"!==u.Type(t))return!1;var e={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var r in t)if(n(t,r)&&!e[r])return!1;if(u.IsDataDescriptor(t)&&u.IsAccessorDescriptor(t))throw new o("Property Descriptors may not be both accessor and data descriptors");return!0}},959:function(u){"use strict";u.exports=function(u){return"number"==typeof u&&u>=56320&&u<=57343}},5674:function(u){"use strict";u.exports=Number.MAX_SAFE_INTEGER||9007199254740991}},t={};function e(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return u[r](o,o.exports,e),o.exports}e.n=function(u){var t=u&&u.__esModule?function(){return u.default}:function(){return u};return e.d(t,{a:t}),t},e.d=function(u,t){for(var r in t)e.o(t,r)&&!e.o(u,r)&&Object.defineProperty(u,r,{enumerable:!0,get:t[r]})},e.o=function(u,t){return Object.prototype.hasOwnProperty.call(u,t)},function(){"use strict";var u=e(1844);function t(t,e,r){for(var n=0,o=[];-1!==n;)-1!==(n=t.indexOf(e,n))&&(o.push({start:n,end:n+e.length,errors:0}),n+=1);return o.length>0?o:(0,u.Z)(t,e,r)}function r(u,e){return 0===e.length||0===u.length?0:1-t(u,e,e.length)[0].errors/e.length}function n(u){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(u){return typeof u}:function(u){return u&&"function"==typeof Symbol&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},n(u)}function o(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1?t-1:0),r=1;ro?(i.push({node:n,offset:o-c}),o=e.shift()):(a=D.nextNode(),c+=n.data.length);for(;void 0!==o&&n&&c===o;)i.push({node:n,offset:n.data.length}),o=e.shift();if(void 0!==o)throw new RangeError("Offset exceeds text length");return i}var f=function(){function u(t,e){if(D(this,u),e<0)throw new Error("Offset is invalid");this.element=t,this.offset=e}return a(u,[{key:"relativeTo",value:function(t){if(!t.contains(this.element))throw new Error("Parent is not an ancestor of current element");for(var e=this.element,r=this.offset;e!==t;)r+=F(e),e=e.parentElement;return new u(e,r)}},{key:"resolve",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{return l(this.element,this.offset)[0]}catch(n){if(0===this.offset&&void 0!==u.direction){var t=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);t.currentNode=this.element;var e=1===u.direction,r=e?t.nextNode():t.previousNode();if(!r)throw n;return{node:r,offset:e?0:r.data.length}}throw n}}}],[{key:"fromCharOffset",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:return u.fromPoint(t,e);case Node.ELEMENT_NODE:return new u(t,e);default:throw new Error("Node is not an element or text node")}}},{key:"fromPoint",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:if(e<0||e>t.data.length)throw new Error("Text node offset is out of range");if(!t.parentElement)throw new Error("Text node has no parent");var r=F(t)+e;return new u(t.parentElement,r);case Node.ELEMENT_NODE:if(e<0||e>t.childNodes.length)throw new Error("Child node offset is out of range");for(var n=0,o=0;o2&&void 0!==arguments[2]?arguments[2]:{};C(this,u),this.root=t,this.exact=e,this.context=r}return d(u,[{key:"toSelector",value:function(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}},{key:"toRange",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.toPositionAnchor(u).toRange()}},{key:"toPositionAnchor",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=function(u,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(0===e.length)return null;var o=Math.min(256,e.length/2),D=t(u,e,o);if(0===D.length)return null;var i=function(t){var o=1-t.errors/e.length,D=n.prefix?r(u.slice(Math.max(0,t.start-n.prefix.length),t.start),n.prefix):1,i=n.suffix?r(u.slice(t.end,t.end+n.suffix.length),n.suffix):1,a=1;return"number"==typeof n.hint&&(a=1-Math.abs(t.start-n.hint)/u.length),(50*o+20*D+20*i+2*a)/92},a=D.map((function(u){return{start:u.start,end:u.end,score:i(u)}}));return a.sort((function(u,t){return t.score-u.score})),a[0]}(this.root.textContent,this.exact,E(E({},this.context),{},{hint:u.hint}));if(!e)throw new Error("Quote not found");return new B(this.root,e.start,e.end)}}],[{key:"fromRange",value:function(t,e){var r=t.textContent,n=s.fromRange(e).relativeTo(t),o=n.start.offset,D=n.end.offset;return new u(t,r.slice(o,D),{prefix:r.slice(Math.max(0,o-32),o),suffix:r.slice(D,Math.min(r.length,D+32))})}},{key:"fromSelector",value:function(t,e){var r=e.prefix,n=e.suffix;return new u(t,e.exact,{prefix:r,suffix:n})}}]),u}();function m(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e.1&&(t?t.remove():((t=document.createElement("div")).setAttribute("id",u),t.style.breakBefore="column",t.innerHTML="",document.body.appendChild(t)))}}(),P()}))})).observe(document.body)}),!1);var b=1;function v(){var u=document.documentElement.style;return"readium-scroll-on"==u.getPropertyValue("--USER__view").trim()||"readium-scroll-on"==u.getPropertyValue("--USER__scroll").trim()}function w(){return"rtl"==document.body.dir.toLowerCase()}function x(){return window.getComputedStyle(document.documentElement).getPropertyValue("writing-mode").startsWith("vertical")}function S(u){return v()?document.scrollingElement.scrollTop=u.top+window.scrollY:document.scrollingElement.scrollLeft=j(u.left+window.scrollX),!0}function O(u){if(v())throw"Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";var t=window.scrollX;return document.scrollingElement.scrollLeft=j(u),Math.abs(t-u)/b>.01}function j(u){var t=u+(w()?-1:1);return t-t%b}function P(){if(!v()){var u=window.scrollX,t=(w()?-1:1)*(b/2);document.scrollingElement.scrollLeft=j(u+t)}}function T(u){try{var t,e=u.locations,r=u.text;if(r&&r.highlight)return e&&e.cssSelector&&(t=document.querySelector(e.cssSelector)),t||(t=document.body),new g(t,r.highlight,{prefix:r.before,suffix:r.after}).toRange();if(e){var n=null;if(!n&&e.cssSelector&&(n=document.querySelector(e.cssSelector)),!n&&e.fragments){var o,D=function(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return m(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?m(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}(e.fragments);try{for(D.s();!(o=D.n()).done;){var i=o.value;if(n=document.getElementById(i))break}}catch(u){D.e(u)}finally{D.f()}}if(n){var a=document.createRange();return a.setStartBefore(n),a.setEndAfter(n),a}}}catch(u){M(u)}return null}function I(u,t){null===t||""===t?R(u):document.documentElement.style.setProperty(u,t,"important")}function R(u){document.documentElement.style.removeProperty(u)}function N(){var u=Array.prototype.slice.call(arguments).join(" ");Android.log(u)}function M(u){Android.logError(u,"",0)}function k(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return L(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?L(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function L(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1&&o.height>1){var D,i=k(u);try{for(i.s();!(D=i.n()).done;){var a=D.value;if(o!==a&&r.has(a)&&V(a,o,1)){J("CLIENT RECT: remove contained"),r.delete(o);break}}}catch(u){i.e(u)}finally{i.f()}}else J("CLIENT RECT: remove tiny"),r.delete(o)}}catch(u){n.e(u)}finally{n.f()}return Array.from(r)}(W(r,1,t)),i=q(D),a=i.length-1;a>=0;a--){var c=i[a];if(!(c.width*c.height>4)){if(!(i.length>1)){J("CLIENT RECT: remove small, but keep otherwise empty!");break}J("CLIENT RECT: remove small"),i.splice(a,1)}}return J("CLIENT RECT: reduced ".concat(r.length," --\x3e ").concat(i.length)),i}function W(u,t,e){for(var r=0;rt||z(u.right,t,r))&&(u.tope||z(u.bottom,e,r))}function q(u){for(var t=0;t=0&&z(u.left,t.right,e))&&(t.left=0&&z(t.left,u.right,e))&&(u.top=0&&z(u.top,t.bottom,e))&&(t.top=0&&z(t.top,u.bottom,e))}function z(u,t,e){return Math.abs(u-t)<=e}function J(){$&&N.apply(null,arguments)}function K(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=Q(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function Z(u,t){return function(u){if(Array.isArray(u))return u}(u)||function(u,t){var e=null==u?null:"undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(null!=e){var r,n,o,D,i=[],a=!0,c=!1;try{if(o=(e=e.call(u)).next,0===t){if(Object(e)!==e)return;a=!1}else for(;!(a=(r=o.call(e)).done)&&(i.push(r.value),i.length!==t);a=!0);}catch(u){c=!0,n=u}finally{try{if(!a&&null!=e.return&&(D=e.return(),Object(D)!==D))return}finally{if(c)throw n}}return i}}(u,t)||Q(u,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(u,t){if(u){if("string"==typeof u)return uu(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?uu(u,t):void 0}}function uu(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e "},Du={id:"id",class:"class",tag:"tag",attribute:"attribute",nthchild:"nthchild",nthoftype:"nthoftype"},iu="CssSelectorGenerator";function au(u="unknown problem",...t){console.warn(`${iu}: ${u}`,...t)}const cu={selectors:[Du.id,Du.class,Du.tag,Du.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function Fu(u){return u instanceof RegExp}function lu(u){return["string","function"].includes(typeof u)||Fu(u)}function fu(u){return Array.isArray(u)?u.filter(lu):[]}function su(u){const t=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(u){return u instanceof Node}(u)&&t.includes(u.nodeType)}function pu(u,t){if(su(u))return u.contains(t)||au("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element's real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),u;const e=t.getRootNode({composed:!1});return su(e)?(e!==document&&au("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),e):t.ownerDocument.querySelector(":root")}function Au(u){return"number"==typeof u?u:Number.POSITIVE_INFINITY}function Eu(u=[]){const[t=[],...e]=u;return 0===e.length?t:e.reduce(((u,t)=>u.filter((u=>t.includes(u)))),t)}function Cu(u){return[].concat(...u)}function yu(u){const t=u.map((u=>{if(Fu(u))return t=>u.test(t);if("function"==typeof u)return t=>{const e=u(t);return"boolean"!=typeof e?(au("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",u),!1):e};if("string"==typeof u){const t=new RegExp("^"+u.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")+"$");return u=>t.test(u)}return au("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",u),()=>!1}));return u=>t.some((t=>t(u)))}function du(u,t,e){const r=Array.from(pu(e,u[0]).querySelectorAll(t));return r.length===u.length&&u.every((u=>r.includes(u)))}function hu(u,t){t=null!=t?t:function(u){return u.ownerDocument.querySelector(":root")}(u);const e=[];let r=u;for(;nu(r)&&r!==t;)e.push(r),r=r.parentElement;return e}function Bu(u,t){return Eu(u.map((u=>hu(u,t))))}const gu=new RegExp(["^$","\\s"].join("|")),mu=new RegExp(["^$"].join("|")),bu=[Du.nthoftype,Du.tag,Du.id,Du.class,Du.attribute,Du.nthchild],vu=yu(["class","id","ng-*"]);function wu({name:u}){return`[${u}]`}function xu({name:u,value:t}){return`[${u}='${t}']`}function Su({nodeName:u,nodeValue:t}){return{name:(e=u,e.replace(/:/g,"\\:")),value:Uu(t)};var e}function Ou(u){const t=Array.from(u.attributes).filter((t=>function({nodeName:u},t){const e=t.tagName.toLowerCase();return!(["input","option"].includes(e)&&"value"===u||vu(u))}(t,u))).map(Su);return[...t.map(wu),...t.map(xu)]}function ju(u){return(u.getAttribute("class")||"").trim().split(/\s+/).filter((u=>!mu.test(u))).map((u=>`.${Uu(u)}`))}function Pu(u){const t=u.getAttribute("id")||"",e=`#${Uu(t)}`,r=u.getRootNode({composed:!1});return!gu.test(t)&&du([u],e,r)?[e]:[]}function Tu(u){const t=u.parentNode;if(t){const e=Array.from(t.childNodes).filter(nu).indexOf(u);if(e>-1)return[`:nth-child(${e+1})`]}return[]}function Iu(u){return[Uu(u.tagName.toLowerCase())]}function Ru(u){const t=[...new Set(Cu(u.map(Iu)))];return 0===t.length||t.length>1?[]:[t[0]]}function Nu(u){const t=Ru([u])[0],e=u.parentElement;if(e){const r=Array.from(e.children).filter((u=>u.tagName.toLowerCase()===t)),n=r.indexOf(u);if(n>-1)return[`${t}:nth-of-type(${n+1})`]}return[]}function Mu(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){return Array.from(function*(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){let e=0,r=Lu(1);for(;r.length<=u.length&&eu[t]));yield t,r=ku(r,u.length-1)}}(u,{maxResults:t}))}function ku(u=[],t=0){const e=u.length;if(0===e)return[];const r=[...u];r[e-1]+=1;for(let u=e-1;u>=0;u--)if(r[u]>t){if(0===u)return Lu(e+1);r[u-1]++,r[u]=r[u-1]+1}return r[e-1]>t?Lu(e+1):r}function Lu(u=1){return Array.from(Array(u).keys())}const $u=":".charCodeAt(0).toString(16).toUpperCase(),_u=/[ !"#$%&'()\[\]{|}<>*+,./;=?@^`~\\]/;function Uu(u=""){var t,e;return null!==(e=null===(t=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===t?void 0:t.call(CSS,u))&&void 0!==e?e:function(u=""){return u.split("").map((u=>":"===u?`\\${$u} `:_u.test(u)?`\\${u}`:escape(u).replace(/%/g,"\\"))).join("")}(u)}const Wu={tag:Ru,id:function(u){return 0===u.length||u.length>1?[]:Pu(u[0])},class:function(u){return Eu(u.map(ju))},attribute:function(u){return Eu(u.map(Ou))},nthchild:function(u){return Eu(u.map(Tu))},nthoftype:function(u){return Eu(u.map(Nu))}},Gu={tag:Iu,id:Pu,class:ju,attribute:Ou,nthchild:Tu,nthoftype:Nu};function Vu(u){return u.includes(Du.tag)||u.includes(Du.nthoftype)?[...u]:[...u,Du.tag]}function Hu(u={}){const t=[...bu];return u[Du.tag]&&u[Du.nthoftype]&&t.splice(t.indexOf(Du.tag),1),t.map((t=>{return(r=u)[e=t]?r[e].join(""):"";var e,r})).join("")}function qu(u,t,e="",r){const n=function(u,t){return""===t?u:function(u,t){return[...u.map((u=>t+ou.DESCENDANT+u)),...u.map((u=>t+ou.CHILD+u))]}(u,t)}(function(u,t,e){const r=function(u,t){const{blacklist:e,whitelist:r,combineWithinSelector:n,maxCombinations:o}=t,D=yu(e),i=yu(r);return function(u){const{selectors:t,includeTag:e}=u,r=[].concat(t);return e&&!r.includes("tag")&&r.push("tag"),r}(t).reduce(((t,e)=>{const r=function(u,t){var e;return(null!==(e=Wu[t])&&void 0!==e?e:()=>[])(u)}(u,e),a=function(u=[],t,e){return u.filter((u=>e(u)||!t(u)))}(r,D,i),c=function(u=[],t){return u.sort(((u,e)=>{const r=t(u),n=t(e);return r&&!n?-1:!r&&n?1:0}))}(a,i);return t[e]=n?Mu(c,{maxResults:o}):c.map((u=>[u])),t}),{})}(u,e),n=function(u,t){return function(u){const{selectors:t,combineBetweenSelectors:e,includeTag:r,maxCandidates:n}=u,o=e?Mu(t,{maxResults:n}):t.map((u=>[u]));return r?o.map(Vu):o}(t).map((t=>function(u,t){const e={};return u.forEach((u=>{const r=t[u];r.length>0&&(e[u]=r)})),function(u={}){let t=[];return Object.entries(u).forEach((([u,e])=>{t=e.flatMap((e=>0===t.length?[{[u]:e}]:t.map((t=>Object.assign(Object.assign({},t),{[u]:e})))))})),t}(e).map(Hu)}(t,u))).filter((u=>u.length>0))}(r,e),o=Cu(n);return[...new Set(o)]}(u,r.root,r),e);for(const t of n)if(du(u,t,r.root))return t;return null}function Xu(u){return{value:u,include:!1}}function Yu({selectors:u,operator:t}){let e=[...bu];u[Du.tag]&&u[Du.nthoftype]&&(e=e.filter((u=>u!==Du.tag)));let r="";return e.forEach((t=>{(u[t]||[]).forEach((({value:u,include:t})=>{t&&(r+=u)}))})),t+r}function zu(u){return[":root",...hu(u).reverse().map((u=>{const t=function(u,t,e=ou.NONE){const r={};return t.forEach((t=>{Reflect.set(r,t,function(u,t){return Gu[t](u)}(u,t).map(Xu))})),{element:u,operator:e,selectors:r}}(u,[Du.nthchild],ou.CHILD);return t.selectors.nthchild.forEach((u=>{u.include=!0})),t})).map(Yu)].join("")}function Ju(u,t={}){const e=function(u){(u instanceof NodeList||u instanceof HTMLCollection)&&(u=Array.from(u));const t=(Array.isArray(u)?u:[u]).filter(nu);return[...new Set(t)]}(u),r=function(u,t={}){const e=Object.assign(Object.assign({},cu),t);return{selectors:(r=e.selectors,Array.isArray(r)?r.filter((u=>{return t=Du,e=u,Object.values(t).includes(e);var t,e})):[]),whitelist:fu(e.whitelist),blacklist:fu(e.blacklist),root:pu(e.root,u),combineWithinSelector:!!e.combineWithinSelector,combineBetweenSelectors:!!e.combineBetweenSelectors,includeTag:!!e.includeTag,maxCombinations:Au(e.maxCombinations),maxCandidates:Au(e.maxCandidates)};var r}(e[0],t);let n="",o=r.root;function D(){return function(u,t,e="",r){if(0===u.length)return null;const n=[u.length>1?u:[],...Bu(u,t).map((u=>[u]))];for(const u of n){const t=qu(u,0,e,r);if(t)return{foundElements:u,selector:t}}return null}(e,o,n,r)}let i=D();for(;i;){const{foundElements:u,selector:t}=i;if(du(e,t,r.root))return t;o=u[0],n=t,i=D()}return e.length>1?e.map((u=>Ju(u,r))).join(", "):function(u){return u.map(zu).join(", ")}(e)}function Ku(u){return null==u?null:-1!=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"].indexOf(u.nodeName.toLowerCase())||u.hasAttribute("contenteditable")&&"false"!=u.getAttribute("contenteditable").toLowerCase()?u.outerHTML:u.parentElement?Ku(u.parentElement):null}function Zu(u){for(var t=0;t0&&t.top0&&t.left=6||Math.abs(t.offsetY)>=6)&&(e=!1,n=Android.onDragStart(JSON.stringify(t))):n=Android.onDragMove(JSON.stringify(t)),n&&(u.stopPropagation(),u.preventDefault())}}),{passive:!1});var t=void 0,e=!1,r=window.devicePixelRatio}(document)})),window.addEventListener("keydown",(function(u){et(u)||(rt(u),nt(u,"down"))})),window.addEventListener("keyup",(function(u){et(u)||(rt(u),nt(u,"up"))}));var ot=e(5155);e.n(ot)().shim();var Dt=!0;function it(){Dt&&N.apply(null,arguments)}window.addEventListener("load",(function(){var u=!1;document.addEventListener("selectionchange",(function(){var t=window.getSelection().isCollapsed;t&&u?(u=!1,Android.onSelectionEnd(),P()):t||u||(u=!0,Android.onSelectionStart())}))}),!1),window.readium={scrollToId:function(u){var t=document.getElementById(u);return!!t&&S(t.getBoundingClientRect())},scrollToPosition:function(u){if(u<0||u>1)throw"scrollToPosition() must be given a position from 0.0 to 1.0";var t;v()?x()?(t=document.scrollingElement.scrollWidth*u,document.scrollingElement.scrollLeft=-t):(t=document.scrollingElement.scrollHeight*u,document.scrollingElement.scrollTop=t):(t=document.scrollingElement.scrollWidth*u*(w()?-1:1),document.scrollingElement.scrollLeft=j(t))},scrollToLocator:function(u){var t=T(u);return!!t&&function(u){return S(u.getBoundingClientRect())}(t)},scrollLeft:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX-b,e=w()?-(u-b):0;return O(Math.max(t,e))},scrollRight:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX+b,e=w()?0:u-b;return O(Math.min(t,e))},scrollToStart:function(){v()&&!x()?document.scrollingElement.scrollTop=0:document.scrollingElement.scrollLeft=0},scrollToEnd:function(){var u=document.scrollingElement;if(v())x()?u.scrollLeft=-document.scrollingElement.scrollWidth:u.scrollTop=document.body.scrollHeight;else{var t=w()?-1:1;u.scrollLeft=j(u.scrollWidth*t)}},setCSSProperties:function(u){for(var t in u)I(t,u[t])},setProperty:I,removeProperty:R,getCurrentSelection:function(){var u=function(){var u=window.getSelection();if(u&&!u.isCollapsed){var t=u.toString();if(0!==t.trim().replace(/\n/g," ").replace(/\s\s+/g," ").length&&u.anchorNode&&u.focusNode){var e=1===u.rangeCount?u.getRangeAt(0):function(u,t,e,r){var n=new Range;if(n.setStart(u,t),n.setEnd(e,r),!n.collapsed)return n;it(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");var o=new Range;if(o.setStart(e,r),o.setEnd(u,t),!o.collapsed)return it(">>> createOrderedRange RANGE REVERSE OK."),n;it(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!")}(u.anchorNode,u.anchorOffset,u.focusNode,u.focusOffset);if(e&&!e.collapsed){var r=document.body.textContent,n=s.fromRange(e).relativeTo(document.body),o=n.start.offset,D=n.end.offset,i=r.slice(Math.max(0,o-200),o),a=i.search(/(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/g);-1!==a&&(i=i.slice(a+1));var c=r.slice(D,Math.min(r.length,D+200)),F=Array.from(c.matchAll(/(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g)).pop();return void 0!==F&&F.index>1&&(c=c.slice(0,F.index+1)),{highlight:t,before:i,after:c}}it("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!")}}}();return u?{text:u,rect:function(){try{var u=window.getSelection();if(!u)return;return _(u.getRangeAt(0).getBoundingClientRect())}catch(u){return M(u),null}}()}:null},registerDecorationTemplates:function(u){for(var t="",e=0,r=Object.entries(u);e>31&1}function n(u,t,e,n){var o=u.P[e],D=u.M[e],i=n>>>31,a=t[e]|i,c=a|D,F=(a&o)+o^o|a,l=D|~(F|o),f=o&F,s=r(l&u.lastRowMask[e])-r(f&u.lastRowMask[e]);return l<<=1,f<<=1,o=(f|=i)|~(c|(l|=r(n)-i)),D=l&c,u.P[e]=o,u.M[e]=D,s}function o(u,t,e){if(0===t.length)return[];e=Math.min(e,t.length);var r=[],o=32,D=Math.ceil(t.length/o)-1,i={P:new Uint32Array(D+1),M:new Uint32Array(D+1),lastRowMask:new Uint32Array(D+1)};i.lastRowMask.fill(1<<31),i.lastRowMask[D]=1<<(t.length-1)%o;for(var a=new Uint32Array(D+1),c=new Map,F=[],l=0;l<256;l++)F.push(a);for(var f=0;f=t.length||t.charCodeAt(C)===s&&(p[A]|=1<0&&d[y]>=e+o;)y-=1;y===D&&d[y]<=e&&(d[y]-1?n(e):e}},2755:function(u,t,e){"use strict";var r=e(3569),n=e(2870),o=n("%Function.prototype.apply%"),D=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||r.call(D,o),a=n("%Object.getOwnPropertyDescriptor%",!0),c=n("%Object.defineProperty%",!0),F=n("%Math.max%");if(c)try{c({},"a",{value:1})}catch(u){c=null}u.exports=function(u){var t=i(r,D,arguments);return a&&c&&a(t,"length").configurable&&c(t,"length",{value:1+F(0,u.length-(arguments.length-1))}),t};var l=function(){return i(r,o,arguments)};c?c(u.exports,"apply",{value:l}):u.exports.apply=l},6663:function(u,t,e){"use strict";var r=e(229)(),n=e(2870),o=r&&n("%Object.defineProperty%",!0),D=n("%SyntaxError%"),i=n("%TypeError%"),a=e(658);u.exports=function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new i("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new i("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new i("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new i("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new i("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new i("`loose`, if provided, must be a boolean");var r=arguments.length>3?arguments[3]:null,n=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,F=arguments.length>6&&arguments[6],l=!!a&&a(u,t);if(o)o(u,t,{configurable:null===c&&l?l.configurable:!c,enumerable:null===r&&l?l.enumerable:!r,value:e,writable:null===n&&l?l.writable:!n});else{if(!F&&(r||n||c))throw new D("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");u[t]=e}}},9722:function(u,t,e){"use strict";var r=e(2051),n="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),o=Object.prototype.toString,D=Array.prototype.concat,i=e(6663),a=e(229)(),c=function(u,t,e,r){if(t in u)if(!0===r){if(u[t]===e)return}else if("function"!=typeof(n=r)||"[object Function]"!==o.call(n)||!r())return;var n;a?i(u,t,e,!0):i(u,t,e)},F=function(u,t){var e=arguments.length>2?arguments[2]:{},o=r(t);n&&(o=D.call(o,Object.getOwnPropertySymbols(t)));for(var i=0;i2&&arguments[2]&&arguments[2].force;!D||!e&&o(u,D)||(r?r(u,D,{configurable:!0,enumerable:!1,value:t,writable:!1}):u[D]=t)}},7358:function(u,t,e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator,n=e(7959),o=e(3655),D=e(455),i=e(8760);u.exports=function(u){if(n(u))return u;var t,e="default";if(arguments.length>1&&(arguments[1]===String?e="string":arguments[1]===Number&&(e="number")),r&&(Symbol.toPrimitive?t=function(u,t){var e=u[t];if(null!=e){if(!o(e))throw new TypeError(e+" returned for property "+t+" of object "+u+" is not a function");return e}}(u,Symbol.toPrimitive):i(u)&&(t=Symbol.prototype.valueOf)),void 0!==t){var a=t.call(u,e);if(n(a))return a;throw new TypeError("unable to convert exotic object to primitive")}return"default"===e&&(D(u)||i(u))&&(e="string"),function(u,t){if(null==u)throw new TypeError("Cannot call method on "+u);if("string"!=typeof t||"number"!==t&&"string"!==t)throw new TypeError('hint must be "string" or "number"');var e,r,D,i="string"===t?["toString","valueOf"]:["valueOf","toString"];for(D=0;D1&&"boolean"!=typeof t)throw new D('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,u))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var e=function(u){var t=v(u,0,1),e=v(u,-1);if("%"===t&&"%"!==e)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===e&&"%"!==t)throw new n("invalid intrinsic syntax, expected opening `%`");var r=[];return b(u,x,(function(u,t,e,n){r[r.length]=e?b(n,S,"$1"):t||u})),r}(u),r=e.length>0?e[0]:"",o=O("%"+r+"%",t),i=o.name,c=o.value,F=!1,l=o.alias;l&&(r=l[0],m(e,g([0,1],l)));for(var f=1,s=!0;f=e.length){var y=a(c,p);c=(s=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:c[p]}else s=B(c,p),c=c[p];s&&!F&&(E[i]=c)}}return c}},658:function(u,t,e){"use strict";var r=e(2870)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(u){r=null}u.exports=r},229:function(u,t,e){"use strict";var r=e(2870)("%Object.defineProperty%",!0),n=function(){if(r)try{return r({},"a",{value:1}),!0}catch(u){return!1}return!1};n.hasArrayLengthDefineBug=function(){if(!n())return null;try{return 1!==r([],"length",{value:1}).length}catch(u){return!0}},u.exports=n},3413:function(u){"use strict";var t={foo:{}},e=Object;u.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof e)}},1143:function(u,t,e){"use strict";var r="undefined"!=typeof Symbol&&Symbol,n=e(9985);u.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&n()}},9985:function(u){"use strict";u.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var u={},t=Symbol("test"),e=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;for(t in u[t]=42,u)return!1;if("function"==typeof Object.keys&&0!==Object.keys(u).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(u).length)return!1;var r=Object.getOwnPropertySymbols(u);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(u,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var n=Object.getOwnPropertyDescriptor(u,t);if(42!==n.value||!0!==n.enumerable)return!1}return!0}},3060:function(u,t,e){"use strict";var r=e(9985);u.exports=function(){return r()&&!!Symbol.toStringTag}},9545:function(u){"use strict";var t={}.hasOwnProperty,e=Function.prototype.call;u.exports=e.bind?e.bind(t):function(u,r){return e.call(t,u,r)}},7284:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=e(5714)(),D=r("%TypeError%"),i={assert:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");if(o.assert(u),!i.has(u,t))throw new D("`"+t+"` is not present on `O`")},get:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return e&&e["$"+t]},has:function(u,t){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var e=o.get(u);return!!e&&n(e,"$"+t)},set:function(u,t,e){if(!u||"object"!=typeof u&&"function"!=typeof u)throw new D("`O` is not an object");if("string"!=typeof t)throw new D("`slot` must be a string");var r=o.get(u);r||(r={},o.set(u,r)),r["$"+t]=e}};Object.freeze&&Object.freeze(i),u.exports=i},3655:function(u){"use strict";var t,e,r=Function.prototype.toString,n="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof n&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw e}}),e={},n((function(){throw 42}),null,t)}catch(u){u!==e&&(n=null)}else n=null;var o=/^\s*class\b/,D=function(u){try{var t=r.call(u);return o.test(t)}catch(u){return!1}},i=function(u){try{return!D(u)&&(r.call(u),!0)}catch(u){return!1}},a=Object.prototype.toString,c="function"==typeof Symbol&&!!Symbol.toStringTag,F=!(0 in[,]),l=function(){return!1};if("object"==typeof document){var f=document.all;a.call(f)===a.call(document.all)&&(l=function(u){if((F||!u)&&(void 0===u||"object"==typeof u))try{var t=a.call(u);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==u("")}catch(u){}return!1})}u.exports=n?function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;try{n(u,null,t)}catch(u){if(u!==e)return!1}return!D(u)&&i(u)}:function(u){if(l(u))return!0;if(!u)return!1;if("function"!=typeof u&&"object"!=typeof u)return!1;if(c)return i(u);if(D(u))return!1;var t=a.call(u);return!("[object Function]"!==t&&"[object GeneratorFunction]"!==t&&!/^\[object HTML/.test(t))&&i(u)}},455:function(u,t,e){"use strict";var r=Date.prototype.getDay,n=Object.prototype.toString,o=e(3060)();u.exports=function(u){return"object"==typeof u&&null!==u&&(o?function(u){try{return r.call(u),!0}catch(u){return!1}}(u):"[object Date]"===n.call(u))}},5494:function(u,t,e){"use strict";var r,n,o,D,i=e(3099),a=e(3060)();if(a){r=i("Object.prototype.hasOwnProperty"),n=i("RegExp.prototype.exec"),o={};var c=function(){throw o};D={toString:c,valueOf:c},"symbol"==typeof Symbol.toPrimitive&&(D[Symbol.toPrimitive]=c)}var F=i("Object.prototype.toString"),l=Object.getOwnPropertyDescriptor;u.exports=a?function(u){if(!u||"object"!=typeof u)return!1;var t=l(u,"lastIndex");if(!t||!r(t,"value"))return!1;try{n(u,D)}catch(u){return u===o}}:function(u){return!(!u||"object"!=typeof u&&"function"!=typeof u)&&"[object RegExp]"===F(u)}},8760:function(u,t,e){"use strict";var r=Object.prototype.toString;if(e(1143)()){var n=Symbol.prototype.toString,o=/^Symbol\(.*\)$/;u.exports=function(u){if("symbol"==typeof u)return!0;if("[object Symbol]"!==r.call(u))return!1;try{return function(u){return"symbol"==typeof u.valueOf()&&o.test(n.call(u))}(u)}catch(u){return!1}}}else u.exports=function(u){return!1}},4538:function(u,t,e){var r="function"==typeof Map&&Map.prototype,n=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,o=r&&n&&"function"==typeof n.get?n.get:null,D=r&&Map.prototype.forEach,i="function"==typeof Set&&Set.prototype,a=Object.getOwnPropertyDescriptor&&i?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=i&&a&&"function"==typeof a.get?a.get:null,F=i&&Set.prototype.forEach,l="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,f="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,s="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,p=Boolean.prototype.valueOf,A=Object.prototype.toString,E=Function.prototype.toString,C=String.prototype.match,y=String.prototype.slice,d=String.prototype.replace,h=String.prototype.toUpperCase,B=String.prototype.toLowerCase,g=RegExp.prototype.test,m=Array.prototype.concat,b=Array.prototype.join,v=Array.prototype.slice,w=Math.floor,x="function"==typeof BigInt?BigInt.prototype.valueOf:null,S=Object.getOwnPropertySymbols,O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,j="function"==typeof Symbol&&"object"==typeof Symbol.iterator,P="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol.toStringTag,1)?Symbol.toStringTag:null,T=Object.prototype.propertyIsEnumerable,I=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(u){return u.__proto__}:null);function R(u,t){if(u===1/0||u===-1/0||u!=u||u&&u>-1e3&&u<1e3||g.call(/e/,t))return t;var e=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof u){var r=u<0?-w(-u):w(u);if(r!==u){var n=String(r),o=y.call(t,n.length+1);return d.call(n,e,"$&_")+"."+d.call(d.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return d.call(t,e,"$&_")}var N=e(7002),M=N.custom,k=W(M)?M:null;function L(u,t,e){var r="double"===(e.quoteStyle||t)?'"':"'";return r+u+r}function $(u){return d.call(String(u),/"/g,""")}function _(u){return!("[object Array]"!==H(u)||P&&"object"==typeof u&&P in u)}function U(u){return!("[object RegExp]"!==H(u)||P&&"object"==typeof u&&P in u)}function W(u){if(j)return u&&"object"==typeof u&&u instanceof Symbol;if("symbol"==typeof u)return!0;if(!u||"object"!=typeof u||!O)return!1;try{return O.call(u),!0}catch(u){}return!1}u.exports=function u(t,e,r,n){var i=e||{};if(V(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!V(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var A=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return X(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var h=String(t);return A?R(t,h):h}if("bigint"==typeof t){var g=String(t)+"n";return A?R(t,g):g}var w=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=w&&w>0&&"object"==typeof t)return _(t)?"[Array]":"[Object]";var S,M=function(u,t){var e;if("\t"===u.indent)e="\t";else{if(!("number"==typeof u.indent&&u.indent>0))return null;e=b.call(Array(u.indent+1)," ")}return{base:e,prev:b.call(Array(t+1),e)}}(i,r);if(void 0===n)n=[];else if(q(n,t)>=0)return"[Circular]";function G(t,e,o){if(e&&(n=v.call(n)).push(e),o){var D={depth:i.depth};return V(i,"quoteStyle")&&(D.quoteStyle=i.quoteStyle),u(t,D,r+1,n)}return u(t,i,r+1,n)}if("function"==typeof t&&!U(t)){var Y=function(u){if(u.name)return u.name;var t=C.call(E.call(u),/^function\s*([\w$]+)/);return t?t[1]:null}(t),uu=Q(t,G);return"[Function"+(Y?": "+Y:" (anonymous)")+"]"+(uu.length>0?" { "+b.call(uu,", ")+" }":"")}if(W(t)){var tu=j?d.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):O.call(t);return"object"!=typeof t||j?tu:z(tu)}if((S=t)&&"object"==typeof S&&("undefined"!=typeof HTMLElement&&S instanceof HTMLElement||"string"==typeof S.nodeName&&"function"==typeof S.getAttribute)){for(var eu="<"+B.call(String(t.nodeName)),ru=t.attributes||[],nu=0;nu",t.childNodes&&t.childNodes.length&&(eu+="..."),eu+""+B.call(String(t.nodeName))+">"}if(_(t)){if(0===t.length)return"[]";var ou=Q(t,G);return M&&!function(u){for(var t=0;t=0)return!1;return!0}(ou)?"["+Z(ou,M)+"]":"[ "+b.call(ou,", ")+" ]"}if(function(u){return!("[object Error]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)){var Du=Q(t,G);return"cause"in Error.prototype||!("cause"in t)||T.call(t,"cause")?0===Du.length?"["+String(t)+"]":"{ ["+String(t)+"] "+b.call(Du,", ")+" }":"{ ["+String(t)+"] "+b.call(m.call("[cause]: "+G(t.cause),Du),", ")+" }"}if("object"==typeof t&&a){if(k&&"function"==typeof t[k]&&N)return N(t,{depth:w-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(u){if(!o||!u||"object"!=typeof u)return!1;try{o.call(u);try{c.call(u)}catch(u){return!0}return u instanceof Map}catch(u){}return!1}(t)){var iu=[];return D&&D.call(t,(function(u,e){iu.push(G(e,t,!0)+" => "+G(u,t))})),K("Map",o.call(t),iu,M)}if(function(u){if(!c||!u||"object"!=typeof u)return!1;try{c.call(u);try{o.call(u)}catch(u){return!0}return u instanceof Set}catch(u){}return!1}(t)){var au=[];return F&&F.call(t,(function(u){au.push(G(u,t))})),K("Set",c.call(t),au,M)}if(function(u){if(!l||!u||"object"!=typeof u)return!1;try{l.call(u,l);try{f.call(u,f)}catch(u){return!0}return u instanceof WeakMap}catch(u){}return!1}(t))return J("WeakMap");if(function(u){if(!f||!u||"object"!=typeof u)return!1;try{f.call(u,f);try{l.call(u,l)}catch(u){return!0}return u instanceof WeakSet}catch(u){}return!1}(t))return J("WeakSet");if(function(u){if(!s||!u||"object"!=typeof u)return!1;try{return s.call(u),!0}catch(u){}return!1}(t))return J("WeakRef");if(function(u){return!("[object Number]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(Number(t)));if(function(u){if(!u||"object"!=typeof u||!x)return!1;try{return x.call(u),!0}catch(u){}return!1}(t))return z(G(x.call(t)));if(function(u){return!("[object Boolean]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(p.call(t));if(function(u){return!("[object String]"!==H(u)||P&&"object"==typeof u&&P in u)}(t))return z(G(String(t)));if(!function(u){return!("[object Date]"!==H(u)||P&&"object"==typeof u&&P in u)}(t)&&!U(t)){var cu=Q(t,G),Fu=I?I(t)===Object.prototype:t instanceof Object||t.constructor===Object,lu=t instanceof Object?"":"null prototype",fu=!Fu&&P&&Object(t)===t&&P in t?y.call(H(t),8,-1):lu?"Object":"",su=(Fu||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(fu||lu?"["+b.call(m.call([],fu||[],lu||[]),": ")+"] ":"");return 0===cu.length?su+"{}":M?su+"{"+Z(cu,M)+"}":su+"{ "+b.call(cu,", ")+" }"}return String(t)};var G=Object.prototype.hasOwnProperty||function(u){return u in this};function V(u,t){return G.call(u,t)}function H(u){return A.call(u)}function q(u,t){if(u.indexOf)return u.indexOf(t);for(var e=0,r=u.length;et.maxStringLength){var e=u.length-t.maxStringLength,r="... "+e+" more character"+(e>1?"s":"");return X(y.call(u,0,t.maxStringLength),t)+r}return L(d.call(d.call(u,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Y),"single",t)}function Y(u){var t=u.charCodeAt(0),e={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return e?"\\"+e:"\\x"+(t<16?"0":"")+h.call(t.toString(16))}function z(u){return"Object("+u+")"}function J(u){return u+" { ? }"}function K(u,t,e,r){return u+" ("+t+") {"+(r?Z(e,r):b.call(e,", "))+"}"}function Z(u,t){if(0===u.length)return"";var e="\n"+t.prev+t.base;return e+b.call(u,","+e)+"\n"+t.prev}function Q(u,t){var e=_(u),r=[];if(e){r.length=u.length;for(var n=0;n0&&!n.call(u,0))for(var A=0;A0)for(var E=0;E=0&&"[object Function]"===t.call(u.callee)),r}},9766:function(u,t,e){"use strict";var r=e(8921),n=Object,o=TypeError;u.exports=r((function(){if(null!=this&&this!==n(this))throw new o("RegExp.prototype.flags getter called on non-object");var u="";return this.hasIndices&&(u+="d"),this.global&&(u+="g"),this.ignoreCase&&(u+="i"),this.multiline&&(u+="m"),this.dotAll&&(u+="s"),this.unicode&&(u+="u"),this.unicodeSets&&(u+="v"),this.sticky&&(u+="y"),u}),"get flags",!0)},483:function(u,t,e){"use strict";var r=e(9722),n=e(2755),o=e(9766),D=e(5113),i=e(7299),a=n(D());r(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},5113:function(u,t,e){"use strict";var r=e(9766),n=e(9722).supportsDescriptors,o=Object.getOwnPropertyDescriptor;u.exports=function(){if(n&&"gim"===/a/gim.flags){var u=o(RegExp.prototype,"flags");if(u&&"function"==typeof u.get&&"boolean"==typeof RegExp.prototype.dotAll&&"boolean"==typeof RegExp.prototype.hasIndices){var t="",e={};if(Object.defineProperty(e,"hasIndices",{get:function(){t+="d"}}),Object.defineProperty(e,"sticky",{get:function(){t+="y"}}),"dy"===t)return u.get}}return r}},7299:function(u,t,e){"use strict";var r=e(9722).supportsDescriptors,n=e(5113),o=Object.getOwnPropertyDescriptor,D=Object.defineProperty,i=TypeError,a=Object.getPrototypeOf,c=/a/;u.exports=function(){if(!r||!a)throw new i("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var u=n(),t=a(c),e=o(t,"flags");return e&&e.get===u||D(t,"flags",{configurable:!0,enumerable:!1,get:u}),u}},7582:function(u,t,e){"use strict";var r=e(3099),n=e(2870),o=e(5494),D=r("RegExp.prototype.exec"),i=n("%TypeError%");u.exports=function(u){if(!o(u))throw new i("`regex` must be a RegExp");return function(t){return null!==D(u,t)}}},8921:function(u,t,e){"use strict";var r=e(6663),n=e(229)(),o=e(5610).functionsHaveConfigurableNames(),D=TypeError;u.exports=function(u,t){if("function"!=typeof u)throw new D("`fn` is not a function");return arguments.length>2&&!!arguments[2]&&!o||(n?r(u,"name",t,!0,!0):r(u,"name",t)),u}},5714:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=e(4538),D=r("%TypeError%"),i=r("%WeakMap%",!0),a=r("%Map%",!0),c=n("WeakMap.prototype.get",!0),F=n("WeakMap.prototype.set",!0),l=n("WeakMap.prototype.has",!0),f=n("Map.prototype.get",!0),s=n("Map.prototype.set",!0),p=n("Map.prototype.has",!0),A=function(u,t){for(var e,r=u;null!==(e=r.next);r=e)if(e.key===t)return r.next=e.next,e.next=u.next,u.next=e,e};u.exports=function(){var u,t,e,r={assert:function(u){if(!r.has(u))throw new D("Side channel does not contain "+o(u))},get:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return c(u,r)}else if(a){if(t)return f(t,r)}else if(e)return function(u,t){var e=A(u,t);return e&&e.value}(e,r)},has:function(r){if(i&&r&&("object"==typeof r||"function"==typeof r)){if(u)return l(u,r)}else if(a){if(t)return p(t,r)}else if(e)return function(u,t){return!!A(u,t)}(e,r);return!1},set:function(r,n){i&&r&&("object"==typeof r||"function"==typeof r)?(u||(u=new i),F(u,r,n)):a?(t||(t=new a),s(t,r,n)):(e||(e={key:{},next:null}),function(u,t,e){var r=A(u,t);r?r.value=e:u.next={key:t,next:u.next,value:e}}(e,r,n))}};return r}},3073:function(u,t,e){"use strict";var r=e(7113),n=e(151),o=e(1959),D=e(9497),i=e(5128),a=e(6751),c=e(3099),F=e(1143)(),l=e(483),f=c("String.prototype.indexOf"),s=e(2009),p=function(u){var t=s();if(F&&"symbol"==typeof Symbol.matchAll){var e=o(u,Symbol.matchAll);return e===RegExp.prototype[Symbol.matchAll]&&e!==t?t:e}if(D(u))return t};u.exports=function(u){var t=a(this);if(null!=u){if(D(u)){var e="flags"in u?n(u,"flags"):l(u);if(a(e),f(i(e),"g")<0)throw new TypeError("matchAll requires a global regular expression")}var o=p(u);if(void 0!==o)return r(o,u,[t])}var c=i(t),F=new RegExp(u,"g");return r(p(F),F,[c])}},5155:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(3073),D=e(1794),i=e(3911),a=r(o);n(a,{getPolyfill:D,implementation:o,shim:i}),u.exports=a},2009:function(u,t,e){"use strict";var r=e(1143)(),n=e(8012);u.exports=function(){return r&&"symbol"==typeof Symbol.matchAll&&"function"==typeof RegExp.prototype[Symbol.matchAll]?RegExp.prototype[Symbol.matchAll]:n}},1794:function(u,t,e){"use strict";var r=e(3073);u.exports=function(){if(String.prototype.matchAll)try{"".matchAll(RegExp.prototype)}catch(u){return String.prototype.matchAll}return r}},8012:function(u,t,e){"use strict";var r=e(1398),n=e(151),o=e(8322),D=e(2449),i=e(3995),a=e(5128),c=e(1874),F=e(483),l=e(8921),f=e(3099)("String.prototype.indexOf"),s=RegExp,p="flags"in RegExp.prototype,A=l((function(u){var t=this;if("Object"!==c(t))throw new TypeError('"this" value must be an Object');var e=a(u),l=function(u,t){var e="flags"in t?n(t,"flags"):a(F(t));return{flags:e,matcher:new u(p&&"string"==typeof e?t:u===s?t.source:t,e)}}(D(t,s),t),A=l.flags,E=l.matcher,C=i(n(t,"lastIndex"));o(E,"lastIndex",C,!0);var y=f(A,"g")>-1,d=f(A,"u")>-1;return r(E,e,y,d)}),"[Symbol.matchAll]",!0);u.exports=A},3911:function(u,t,e){"use strict";var r=e(9722),n=e(1143)(),o=e(1794),D=e(2009),i=Object.defineProperty,a=Object.getOwnPropertyDescriptor;u.exports=function(){var u=o();if(r(String.prototype,{matchAll:u},{matchAll:function(){return String.prototype.matchAll!==u}}),n){var t=Symbol.matchAll||(Symbol.for?Symbol.for("Symbol.matchAll"):Symbol("Symbol.matchAll"));if(r(Symbol,{matchAll:t},{matchAll:function(){return Symbol.matchAll!==t}}),i&&a){var e=a(Symbol,t);e&&!e.configurable||i(Symbol,t,{configurable:!1,enumerable:!1,value:t,writable:!1})}var c=D(),F={};F[t]=c;var l={};l[t]=function(){return RegExp.prototype[t]!==c},r(RegExp.prototype,F,l)}return u}},8125:function(u,t,e){"use strict";var r=e(6751),n=e(5128),o=e(3099)("String.prototype.replace"),D=/^\s$/.test(""),i=D?/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/:/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,a=D?/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/:/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;u.exports=function(){var u=n(r(this));return o(o(u,i,""),a,"")}},9434:function(u,t,e){"use strict";var r=e(2755),n=e(9722),o=e(6751),D=e(8125),i=e(3228),a=e(818),c=r(i()),F=function(u){return o(u),c(u)};n(F,{getPolyfill:i,implementation:D,shim:a}),u.exports=F},3228:function(u,t,e){"use strict";var r=e(8125);u.exports=function(){return String.prototype.trim&&""==="".trim()&&""==="".trim()&&"_"==="_".trim()&&"_"==="_".trim()?String.prototype.trim:r}},818:function(u,t,e){"use strict";var r=e(9722),n=e(3228);u.exports=function(){var u=n();return r(String.prototype,{trim:u},{trim:function(){return String.prototype.trim!==u}}),u}},7002:function(){},1510:function(u,t,e){"use strict";var r=e(2870),n=e(6318),o=e(1874),D=e(2990),i=e(5674),a=r("%TypeError%");u.exports=function(u,t,e){if("String"!==o(u))throw new a("Assertion failed: `S` must be a String");if(!D(t)||t<0||t>i)throw new a("Assertion failed: `length` must be an integer >= 0 and <= 2**53");if("Boolean"!==o(e))throw new a("Assertion failed: `unicode` must be a Boolean");return e?t+1>=u.length?t+1:t+n(u,t)["[[CodeUnitCount]]"]:t+1}},7113:function(u,t,e){"use strict";var r=e(2870),n=e(3099),o=r("%TypeError%"),D=e(6287),i=r("%Reflect.apply%",!0)||n("Function.prototype.apply");u.exports=function(u,t){var e=arguments.length>2?arguments[2]:[];if(!D(e))throw new o("Assertion failed: optional `argumentsList`, if provided, must be a List");return i(u,t,e)}},6318:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099),o=e(5541),D=e(959),i=e(1874),a=e(1751),c=n("String.prototype.charAt"),F=n("String.prototype.charCodeAt");u.exports=function(u,t){if("String"!==i(u))throw new r("Assertion failed: `string` must be a String");var e=u.length;if(t<0||t>=e)throw new r("Assertion failed: `position` must be >= 0, and < the length of `string`");var n=F(u,t),l=c(u,t),f=o(n),s=D(n);if(!f&&!s)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!1};if(s||t+1===e)return{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0};var p=F(u,t+1);return D(p)?{"[[CodePoint]]":a(n,p),"[[CodeUnitCount]]":2,"[[IsUnpairedSurrogate]]":!1}:{"[[CodePoint]]":l,"[[CodeUnitCount]]":1,"[[IsUnpairedSurrogate]]":!0}}},5702:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(1874);u.exports=function(u,t){if("Boolean"!==n(t))throw new r("Assertion failed: Type(done) is not Boolean");return{value:u,done:t}}},6782:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(2860),o=e(8357),D=e(3301),i=e(6284),a=e(8277),c=e(1874);u.exports=function(u,t,e){if("Object"!==c(u))throw new r("Assertion failed: Type(O) is not Object");if(!i(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");return n(D,a,o,u,t,{"[[Configurable]]":!0,"[[Enumerable]]":!1,"[[Value]]":e,"[[Writable]]":!0})}},1398:function(u,t,e){"use strict";var r=e(2870),n=e(1143)(),o=r("%TypeError%"),D=r("%IteratorPrototype%",!0),i=e(1510),a=e(5702),c=e(6782),F=e(151),l=e(5716),f=e(3500),s=e(8322),p=e(3995),A=e(5128),E=e(1874),C=e(7284),y=e(2263),d=function(u,t,e,r){if("String"!==E(t))throw new o("`S` must be a string");if("Boolean"!==E(e))throw new o("`global` must be a boolean");if("Boolean"!==E(r))throw new o("`fullUnicode` must be a boolean");C.set(this,"[[IteratingRegExp]]",u),C.set(this,"[[IteratedString]]",t),C.set(this,"[[Global]]",e),C.set(this,"[[Unicode]]",r),C.set(this,"[[Done]]",!1)};D&&(d.prototype=l(D)),c(d.prototype,"next",(function(){var u=this;if("Object"!==E(u))throw new o("receiver must be an object");if(!(u instanceof d&&C.has(u,"[[IteratingRegExp]]")&&C.has(u,"[[IteratedString]]")&&C.has(u,"[[Global]]")&&C.has(u,"[[Unicode]]")&&C.has(u,"[[Done]]")))throw new o('"this" value must be a RegExpStringIterator instance');if(C.get(u,"[[Done]]"))return a(void 0,!0);var t=C.get(u,"[[IteratingRegExp]]"),e=C.get(u,"[[IteratedString]]"),r=C.get(u,"[[Global]]"),n=C.get(u,"[[Unicode]]"),D=f(t,e);if(null===D)return C.set(u,"[[Done]]",!0),a(void 0,!0);if(r){if(""===A(F(D,"0"))){var c=p(F(t,"lastIndex")),l=i(e,c,n);s(t,"lastIndex",l,!0)}return a(D,!1)}return C.set(u,"[[Done]]",!0),a(D,!1)})),n&&(y(d.prototype,"RegExp String Iterator"),Symbol.iterator&&"function"!=typeof d.prototype[Symbol.iterator])&&c(d.prototype,Symbol.iterator,(function(){return this})),u.exports=function(u,t,e,r){return new d(u,t,e,r)}},3645:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(7999),o=e(2860),D=e(8357),i=e(8355),a=e(3301),c=e(6284),F=e(8277),l=e(7628),f=e(1874);u.exports=function(u,t,e){if("Object"!==f(u))throw new r("Assertion failed: Type(O) is not Object");if(!c(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var s=n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},e)?e:l(e);if(!n({Type:f,IsDataDescriptor:a,IsAccessorDescriptor:i},s))throw new r("Assertion failed: Desc is not a valid Property Descriptor");return o(a,F,D,u,t,s)}},8357:function(u,t,e){"use strict";var r=e(1489),n=e(1598),o=e(1874);u.exports=function(u){return void 0!==u&&r(o,"Property Descriptor","Desc",u),n(u)}},151:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284),D=e(1874);u.exports=function(u,t){if("Object"!==D(u))throw new r("Assertion failed: Type(O) is not Object");if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},1959:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(9374),o=e(7304),D=e(6284),i=e(4538);u.exports=function(u,t){if(!D(t))throw new r("Assertion failed: IsPropertyKey(P) is not true");var e=n(u,t);if(null!=e){if(!o(e))throw new r(i(t)+" is not a function: "+i(e));return e}}},9374:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(4538),o=e(6284);u.exports=function(u,t){if(!o(t))throw new r("Assertion failed: IsPropertyKey(P) is not true, got "+n(t));return u[t]}},8355:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Get]]")&&!r(u,"[[Set]]")))}},6287:function(u,t,e){"use strict";u.exports=e(2403)},7304:function(u,t,e){"use strict";u.exports=e(3655)},4791:function(u,t,e){"use strict";var r=e(6740)("%Reflect.construct%",!0),n=e(3645);try{n({},"",{"[[Get]]":function(){}})}catch(u){n=null}if(n&&r){var o={},D={};n(D,"length",{"[[Get]]":function(){throw o},"[[Enumerable]]":!0}),u.exports=function(u){try{r(u,D)}catch(u){return u===o}}}else u.exports=function(u){return"function"==typeof u&&!!u.prototype}},3301:function(u,t,e){"use strict";var r=e(9545),n=e(1874),o=e(1489);u.exports=function(u){return void 0!==u&&(o(n,"Property Descriptor","Desc",u),!(!r(u,"[[Value]]")&&!r(u,"[[Writable]]")))}},6284:function(u){"use strict";u.exports=function(u){return"string"==typeof u||"symbol"==typeof u}},9497:function(u,t,e){"use strict";var r=e(2870)("%Symbol.match%",!0),n=e(5494),o=e(5695);u.exports=function(u){if(!u||"object"!=typeof u)return!1;if(r){var t=u[r];if(void 0!==t)return o(t)}return n(u)}},5716:function(u,t,e){"use strict";var r=e(2870),n=r("%Object.create%",!0),o=r("%TypeError%"),D=r("%SyntaxError%"),i=e(6287),a=e(1874),c=e(7735),F=e(7284),l=e(3413)();u.exports=function(u){if(null!==u&&"Object"!==a(u))throw new o("Assertion failed: `proto` must be null or an object");var t,e=arguments.length<2?[]:arguments[1];if(!i(e))throw new o("Assertion failed: `additionalInternalSlotsList` must be an Array");if(n)t=n(u);else if(l)t={__proto__:u};else{if(null===u)throw new D("native Object.create support is required to create null objects");var r=function(){};r.prototype=u,t=new r}return e.length>0&&c(e,(function(u){F.set(t,u,void 0)})),t}},3500:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(3099)("RegExp.prototype.exec"),o=e(7113),D=e(151),i=e(7304),a=e(1874);u.exports=function(u,t){if("Object"!==a(u))throw new r("Assertion failed: `R` must be an Object");if("String"!==a(t))throw new r("Assertion failed: `S` must be a String");var e=D(u,"exec");if(i(e)){var c=o(e,u,[t]);if(null===c||"Object"===a(c))return c;throw new r('"exec" method must return `null` or an Object')}return n(u,t)}},6751:function(u,t,e){"use strict";u.exports=e(9572)},8277:function(u,t,e){"use strict";var r=e(159);u.exports=function(u,t){return u===t?0!==u||1/u==1/t:r(u)&&r(t)}},8322:function(u,t,e){"use strict";var r=e(2870)("%TypeError%"),n=e(6284),o=e(8277),D=e(1874),i=function(){try{return delete[].length,!0}catch(u){return!1}}();u.exports=function(u,t,e,a){if("Object"!==D(u))throw new r("Assertion failed: `O` must be an Object");if(!n(t))throw new r("Assertion failed: `P` must be a Property Key");if("Boolean"!==D(a))throw new r("Assertion failed: `Throw` must be a Boolean");if(a){if(u[t]=e,i&&!o(u[t],e))throw new r("Attempted to assign to readonly property.");return!0}try{return u[t]=e,!i||o(u[t],e)}catch(u){return!1}}},2449:function(u,t,e){"use strict";var r=e(2870),n=r("%Symbol.species%",!0),o=r("%TypeError%"),D=e(4791),i=e(1874);u.exports=function(u,t){if("Object"!==i(u))throw new o("Assertion failed: Type(O) is not Object");var e=u.constructor;if(void 0===e)return t;if("Object"!==i(e))throw new o("O.constructor is not an Object");var r=n?e[n]:void 0;if(null==r)return t;if(D(r))return r;throw new o("no constructor found")}},6207:function(u,t,e){"use strict";var r=e(2870),n=r("%Number%"),o=r("%RegExp%"),D=r("%TypeError%"),i=r("%parseInt%"),a=e(3099),c=e(7582),F=a("String.prototype.slice"),l=c(/^0b[01]+$/i),f=c(/^0o[0-7]+$/i),s=c(/^[-+]0x[0-9a-f]+$/i),p=c(new o("["+["
","",""].join("")+"]","g")),A=e(9434),E=e(1874);u.exports=function u(t){if("String"!==E(t))throw new D("Assertion failed: `argument` is not a String");if(l(t))return n(i(F(t,2),2));if(f(t))return n(i(F(t,2),8));if(p(t)||s(t))return NaN;var e=A(t);return e!==t?u(e):n(t)}},5695:function(u){"use strict";u.exports=function(u){return!!u}},1200:function(u,t,e){"use strict";var r=e(6542),n=e(5693),o=e(159),D=e(1117);u.exports=function(u){var t=r(u);return o(t)||0===t?0:D(t)?n(t):t}},3995:function(u,t,e){"use strict";var r=e(5674),n=e(1200);u.exports=function(u){var t=n(u);return t<=0?0:t>r?r:t}},6542:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%Number%"),D=e(8606),i=e(703),a=e(6207);u.exports=function(u){var t=D(u)?u:i(u,o);if("symbol"==typeof t)throw new n("Cannot convert a Symbol value to a number");if("bigint"==typeof t)throw new n("Conversion from 'BigInt' to 'number' is not allowed.");return"string"==typeof t?a(t):o(t)}},703:function(u,t,e){"use strict";var r=e(7358);u.exports=function(u){return arguments.length>1?r(u,arguments[1]):r(u)}},7628:function(u,t,e){"use strict";var r=e(9545),n=e(2870)("%TypeError%"),o=e(1874),D=e(5695),i=e(7304);u.exports=function(u){if("Object"!==o(u))throw new n("ToPropertyDescriptor requires an object");var t={};if(r(u,"enumerable")&&(t["[[Enumerable]]"]=D(u.enumerable)),r(u,"configurable")&&(t["[[Configurable]]"]=D(u.configurable)),r(u,"value")&&(t["[[Value]]"]=u.value),r(u,"writable")&&(t["[[Writable]]"]=D(u.writable)),r(u,"get")){var e=u.get;if(void 0!==e&&!i(e))throw new n("getter must be a function");t["[[Get]]"]=e}if(r(u,"set")){var a=u.set;if(void 0!==a&&!i(a))throw new n("setter must be a function");t["[[Set]]"]=a}if((r(t,"[[Get]]")||r(t,"[[Set]]"))&&(r(t,"[[Value]]")||r(t,"[[Writable]]")))throw new n("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return t}},5128:function(u,t,e){"use strict";var r=e(2870),n=r("%String%"),o=r("%TypeError%");u.exports=function(u){if("symbol"==typeof u)throw new o("Cannot convert a Symbol value to a string");return n(u)}},1874:function(u,t,e){"use strict";var r=e(6101);u.exports=function(u){return"symbol"==typeof u?"Symbol":"bigint"==typeof u?"BigInt":r(u)}},1751:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%String.fromCharCode%"),D=e(5541),i=e(959);u.exports=function(u,t){if(!D(u)||!i(t))throw new n("Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code");return o(u)+o(t)}},3567:function(u,t,e){"use strict";var r=e(1874),n=Math.floor;u.exports=function(u){return"BigInt"===r(u)?u:n(u)}},5693:function(u,t,e){"use strict";var r=e(2870),n=e(3567),o=r("%TypeError%");u.exports=function(u){if("number"!=typeof u&&"bigint"!=typeof u)throw new o("argument must be a Number or a BigInt");var t=u<0?-n(-u):n(u);return 0===t?0:t}},9572:function(u,t,e){"use strict";var r=e(2870)("%TypeError%");u.exports=function(u,t){if(null==u)throw new r(t||"Cannot call method on "+u);return u}},6101:function(u){"use strict";u.exports=function(u){return null===u?"Null":void 0===u?"Undefined":"function"==typeof u||"object"==typeof u?"Object":"number"==typeof u?"Number":"boolean"==typeof u?"Boolean":"string"==typeof u?"String":void 0}},6740:function(u,t,e){"use strict";u.exports=e(2870)},2860:function(u,t,e){"use strict";var r=e(229),n=e(2870),o=r()&&n("%Object.defineProperty%",!0),D=r.hasArrayLengthDefineBug(),i=D&&e(2403),a=e(3099)("Object.prototype.propertyIsEnumerable");u.exports=function(u,t,e,r,n,c){if(!o){if(!u(c))return!1;if(!c["[[Configurable]]"]||!c["[[Writable]]"])return!1;if(n in r&&a(r,n)!==!!c["[[Enumerable]]"])return!1;var F=c["[[Value]]"];return r[n]=F,t(r[n],F)}return D&&"length"===n&&"[[Value]]"in c&&i(r)&&r.length!==c["[[Value]]"]?(r.length=c["[[Value]]"],r.length===c["[[Value]]"]):(o(r,n,e(c)),!0)}},2403:function(u,t,e){"use strict";var r=e(2870)("%Array%"),n=!r.isArray&&e(3099)("Object.prototype.toString");u.exports=r.isArray||function(u){return"[object Array]"===n(u)}},1489:function(u,t,e){"use strict";var r=e(2870),n=r("%TypeError%"),o=r("%SyntaxError%"),D=e(9545),i=e(2990),a={"Property Descriptor":function(u){var t={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};if(!u)return!1;for(var e in u)if(D(u,e)&&!t[e])return!1;var r=D(u,"[[Value]]"),o=D(u,"[[Get]]")||D(u,"[[Set]]");if(r&&o)throw new n("Property Descriptors may not be both accessor and data descriptors");return!0},"Match Record":e(900),"Iterator Record":function(u){return D(u,"[[Iterator]]")&&D(u,"[[NextMethod]]")&&D(u,"[[Done]]")},"PromiseCapability Record":function(u){return!!u&&D(u,"[[Resolve]]")&&"function"==typeof u["[[Resolve]]"]&&D(u,"[[Reject]]")&&"function"==typeof u["[[Reject]]"]&&D(u,"[[Promise]]")&&u["[[Promise]]"]&&"function"==typeof u["[[Promise]]"].then},"AsyncGeneratorRequest Record":function(u){return!!u&&D(u,"[[Completion]]")&&D(u,"[[Capability]]")&&a["PromiseCapability Record"](u["[[Capability]]"])},"RegExp Record":function(u){return u&&D(u,"[[IgnoreCase]]")&&"boolean"==typeof u["[[IgnoreCase]]"]&&D(u,"[[Multiline]]")&&"boolean"==typeof u["[[Multiline]]"]&&D(u,"[[DotAll]]")&&"boolean"==typeof u["[[DotAll]]"]&&D(u,"[[Unicode]]")&&"boolean"==typeof u["[[Unicode]]"]&&D(u,"[[CapturingGroupsCount]]")&&"number"==typeof u["[[CapturingGroupsCount]]"]&&i(u["[[CapturingGroupsCount]]"])&&u["[[CapturingGroupsCount]]"]>=0}};u.exports=function(u,t,e,r){var D=a[t];if("function"!=typeof D)throw new o("unknown record type: "+t);if("Object"!==u(r)||!D(r))throw new n(e+" must be a "+t)}},7735:function(u){"use strict";u.exports=function(u,t){for(var e=0;e=55296&&u<=56319}},900:function(u,t,e){"use strict";var r=e(9545);u.exports=function(u){return r(u,"[[StartIndex]]")&&r(u,"[[EndIndex]]")&&u["[[StartIndex]]"]>=0&&u["[[EndIndex]]"]>=u["[[StartIndex]]"]&&String(parseInt(u["[[StartIndex]]"],10))===String(u["[[StartIndex]]"])&&String(parseInt(u["[[EndIndex]]"],10))===String(u["[[EndIndex]]"])}},159:function(u){"use strict";u.exports=Number.isNaN||function(u){return u!=u}},8606:function(u){"use strict";u.exports=function(u){return null===u||"function"!=typeof u&&"object"!=typeof u}},7999:function(u,t,e){"use strict";var r=e(2870),n=e(9545),o=r("%TypeError%");u.exports=function(u,t){if("Object"!==u.Type(t))return!1;var e={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var r in t)if(n(t,r)&&!e[r])return!1;if(u.IsDataDescriptor(t)&&u.IsAccessorDescriptor(t))throw new o("Property Descriptors may not be both accessor and data descriptors");return!0}},959:function(u){"use strict";u.exports=function(u){return"number"==typeof u&&u>=56320&&u<=57343}},5674:function(u){"use strict";u.exports=Number.MAX_SAFE_INTEGER||9007199254740991}},t={};function e(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return u[r](o,o.exports,e),o.exports}e.n=function(u){var t=u&&u.__esModule?function(){return u.default}:function(){return u};return e.d(t,{a:t}),t},e.d=function(u,t){for(var r in t)e.o(t,r)&&!e.o(u,r)&&Object.defineProperty(u,r,{enumerable:!0,get:t[r]})},e.o=function(u,t){return Object.prototype.hasOwnProperty.call(u,t)},function(){"use strict";var u=e(1844);function t(t,e,r){for(var n=0,o=[];-1!==n;)-1!==(n=t.indexOf(e,n))&&(o.push({start:n,end:n+e.length,errors:0}),n+=1);return o.length>0?o:(0,u.Z)(t,e,r)}function r(u,e){return 0===e.length||0===u.length?0:1-t(u,e,e.length)[0].errors/e.length}function n(u){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(u){return typeof u}:function(u){return u&&"function"==typeof Symbol&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},n(u)}function o(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1?t-1:0),r=1;ro?(i.push({node:n,offset:o-c}),o=e.shift()):(a=D.nextNode(),c+=n.data.length);for(;void 0!==o&&n&&c===o;)i.push({node:n,offset:n.data.length}),o=e.shift();if(void 0!==o)throw new RangeError("Offset exceeds text length");return i}var f=function(){function u(t,e){if(D(this,u),e<0)throw new Error("Offset is invalid");this.element=t,this.offset=e}return a(u,[{key:"relativeTo",value:function(t){if(!t.contains(this.element))throw new Error("Parent is not an ancestor of current element");for(var e=this.element,r=this.offset;e!==t;)r+=F(e),e=e.parentElement;return new u(e,r)}},{key:"resolve",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{return l(this.element,this.offset)[0]}catch(n){if(0===this.offset&&void 0!==u.direction){var t=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);t.currentNode=this.element;var e=1===u.direction,r=e?t.nextNode():t.previousNode();if(!r)throw n;return{node:r,offset:e?0:r.data.length}}throw n}}}],[{key:"fromCharOffset",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:return u.fromPoint(t,e);case Node.ELEMENT_NODE:return new u(t,e);default:throw new Error("Node is not an element or text node")}}},{key:"fromPoint",value:function(t,e){switch(t.nodeType){case Node.TEXT_NODE:if(e<0||e>t.data.length)throw new Error("Text node offset is out of range");if(!t.parentElement)throw new Error("Text node has no parent");var r=F(t)+e;return new u(t.parentElement,r);case Node.ELEMENT_NODE:if(e<0||e>t.childNodes.length)throw new Error("Child node offset is out of range");for(var n=0,o=0;o2&&void 0!==arguments[2]?arguments[2]:{};C(this,u),this.root=t,this.exact=e,this.context=r}return d(u,[{key:"toSelector",value:function(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}},{key:"toRange",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.toPositionAnchor(u).toRange()}},{key:"toPositionAnchor",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=function(u,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(0===e.length)return null;var o=Math.min(256,e.length/2),D=t(u,e,o);if(0===D.length)return null;var i=function(t){var o=1-t.errors/e.length,D=n.prefix?r(u.slice(Math.max(0,t.start-n.prefix.length),t.start),n.prefix):1,i=n.suffix?r(u.slice(t.end,t.end+n.suffix.length),n.suffix):1,a=1;return"number"==typeof n.hint&&(a=1-Math.abs(t.start-n.hint)/u.length),(50*o+20*D+20*i+2*a)/92},a=D.map((function(u){return{start:u.start,end:u.end,score:i(u)}}));return a.sort((function(u,t){return t.score-u.score})),a[0]}(this.root.textContent,this.exact,E(E({},this.context),{},{hint:u.hint}));if(!e)throw new Error("Quote not found");return new B(this.root,e.start,e.end)}}],[{key:"fromRange",value:function(t,e){var r=t.textContent,n=s.fromRange(e).relativeTo(t),o=n.start.offset,D=n.end.offset;return new u(t,r.slice(o,D),{prefix:r.slice(Math.max(0,o-32),o),suffix:r.slice(D,Math.min(r.length,D+32))})}},{key:"fromSelector",value:function(t,e){var r=e.prefix,n=e.suffix;return new u(t,e.exact,{prefix:r,suffix:n})}}]),u}();function m(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e.1&&(t?t.remove():((t=document.createElement("div")).setAttribute("id",u),t.style.breakBefore="column",t.innerHTML="",document.body.appendChild(t)))}}(),P()}))})).observe(document.body)}),!1);var b=1;function v(){var u=document.documentElement.style;return"readium-scroll-on"==u.getPropertyValue("--USER__view").trim()||"readium-scroll-on"==u.getPropertyValue("--USER__scroll").trim()}function w(){return"rtl"==document.body.dir.toLowerCase()}function x(){return window.getComputedStyle(document.documentElement).getPropertyValue("writing-mode").startsWith("vertical")}function S(u){return v()?document.scrollingElement.scrollTop=u.top+window.scrollY:document.scrollingElement.scrollLeft=j(u.left+window.scrollX),!0}function O(u){if(v())throw"Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";var t=window.scrollX;return document.scrollingElement.scrollLeft=j(u),Math.abs(t-u)/b>.01}function j(u){var t=u+(w()?-1:1);return t-t%b}function P(){if(!v()){var u=window.scrollX,t=(w()?-1:1)*(b/2);document.scrollingElement.scrollLeft=j(u+t)}}function T(u){try{var t,e=u.locations,r=u.text;if(r&&r.highlight)return e&&e.cssSelector&&(t=document.querySelector(e.cssSelector)),t||(t=document.body),new g(t,r.highlight,{prefix:r.before,suffix:r.after}).toRange();if(e){var n=null;if(!n&&e.cssSelector&&(n=document.querySelector(e.cssSelector)),!n&&e.fragments){var o,D=function(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return m(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?m(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}(e.fragments);try{for(D.s();!(o=D.n()).done;){var i=o.value;if(n=document.getElementById(i))break}}catch(u){D.e(u)}finally{D.f()}}if(n){var a=document.createRange();return a.setStartBefore(n),a.setEndAfter(n),a}}}catch(u){M(u)}return null}function I(u,t){null===t||""===t?R(u):document.documentElement.style.setProperty(u,t,"important")}function R(u){document.documentElement.style.removeProperty(u)}function N(){var u=Array.prototype.slice.call(arguments).join(" ");Android.log(u)}function M(u){Android.logError(u,"",0)}function k(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=function(u,t){if(u){if("string"==typeof u)return L(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?L(u,t):void 0}}(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function L(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e1&&o.height>1){var D,i=k(u);try{for(i.s();!(D=i.n()).done;){var a=D.value;if(o!==a&&r.has(a)&&V(a,o,1)){J("CLIENT RECT: remove contained"),r.delete(o);break}}}catch(u){i.e(u)}finally{i.f()}}else J("CLIENT RECT: remove tiny"),r.delete(o)}}catch(u){n.e(u)}finally{n.f()}return Array.from(r)}(W(r,1,t)),i=q(D),a=i.length-1;a>=0;a--){var c=i[a];if(!(c.width*c.height>4)){if(!(i.length>1)){J("CLIENT RECT: remove small, but keep otherwise empty!");break}J("CLIENT RECT: remove small"),i.splice(a,1)}}return J("CLIENT RECT: reduced ".concat(r.length," --\x3e ").concat(i.length)),i}function W(u,t,e){for(var r=0;rt||z(u.right,t,r))&&(u.tope||z(u.bottom,e,r))}function q(u){for(var t=0;t=0&&z(u.left,t.right,e))&&(t.left=0&&z(t.left,u.right,e))&&(u.top=0&&z(u.top,t.bottom,e))&&(t.top=0&&z(t.top,u.bottom,e))}function z(u,t,e){return Math.abs(u-t)<=e}function J(){$&&N.apply(null,arguments)}function K(u,t){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=Q(u))||t&&u&&"number"==typeof u.length){e&&(u=e);var r=0,n=function(){};return{s:n,n:function(){return r>=u.length?{done:!0}:{done:!1,value:u[r++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,D=!0,i=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return D=u.done,u},e:function(u){i=!0,o=u},f:function(){try{D||null==e.return||e.return()}finally{if(i)throw o}}}}function Z(u,t){return function(u){if(Array.isArray(u))return u}(u)||function(u,t){var e=null==u?null:"undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(null!=e){var r,n,o,D,i=[],a=!0,c=!1;try{if(o=(e=e.call(u)).next,0===t){if(Object(e)!==e)return;a=!1}else for(;!(a=(r=o.call(e)).done)&&(i.push(r.value),i.length!==t);a=!0);}catch(u){c=!0,n=u}finally{try{if(!a&&null!=e.return&&(D=e.return(),Object(D)!==D))return}finally{if(c)throw n}}return i}}(u,t)||Q(u,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(u,t){if(u){if("string"==typeof u)return uu(u,t);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?uu(u,t):void 0}}function uu(u,t){(null==t||t>u.length)&&(t=u.length);for(var e=0,r=new Array(t);e "},Du={id:"id",class:"class",tag:"tag",attribute:"attribute",nthchild:"nthchild",nthoftype:"nthoftype"},iu="CssSelectorGenerator";function au(u="unknown problem",...t){console.warn(`${iu}: ${u}`,...t)}const cu={selectors:[Du.id,Du.class,Du.tag,Du.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function Fu(u){return u instanceof RegExp}function lu(u){return["string","function"].includes(typeof u)||Fu(u)}function fu(u){return Array.isArray(u)?u.filter(lu):[]}function su(u){const t=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(u){return u instanceof Node}(u)&&t.includes(u.nodeType)}function pu(u,t){if(su(u))return u.contains(t)||au("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element's real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),u;const e=t.getRootNode({composed:!1});return su(e)?(e!==document&&au("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),e):t.ownerDocument.querySelector(":root")}function Au(u){return"number"==typeof u?u:Number.POSITIVE_INFINITY}function Eu(u=[]){const[t=[],...e]=u;return 0===e.length?t:e.reduce(((u,t)=>u.filter((u=>t.includes(u)))),t)}function Cu(u){return[].concat(...u)}function yu(u){const t=u.map((u=>{if(Fu(u))return t=>u.test(t);if("function"==typeof u)return t=>{const e=u(t);return"boolean"!=typeof e?(au("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",u),!1):e};if("string"==typeof u){const t=new RegExp("^"+u.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")+"$");return u=>t.test(u)}return au("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",u),()=>!1}));return u=>t.some((t=>t(u)))}function du(u,t,e){const r=Array.from(pu(e,u[0]).querySelectorAll(t));return r.length===u.length&&u.every((u=>r.includes(u)))}function hu(u,t){t=null!=t?t:function(u){return u.ownerDocument.querySelector(":root")}(u);const e=[];let r=u;for(;nu(r)&&r!==t;)e.push(r),r=r.parentElement;return e}function Bu(u,t){return Eu(u.map((u=>hu(u,t))))}const gu=new RegExp(["^$","\\s"].join("|")),mu=new RegExp(["^$"].join("|")),bu=[Du.nthoftype,Du.tag,Du.id,Du.class,Du.attribute,Du.nthchild],vu=yu(["class","id","ng-*"]);function wu({name:u}){return`[${u}]`}function xu({name:u,value:t}){return`[${u}='${t}']`}function Su({nodeName:u,nodeValue:t}){return{name:(e=u,e.replace(/:/g,"\\:")),value:Uu(t)};var e}function Ou(u){const t=Array.from(u.attributes).filter((t=>function({nodeName:u},t){const e=t.tagName.toLowerCase();return!(["input","option"].includes(e)&&"value"===u||vu(u))}(t,u))).map(Su);return[...t.map(wu),...t.map(xu)]}function ju(u){return(u.getAttribute("class")||"").trim().split(/\s+/).filter((u=>!mu.test(u))).map((u=>`.${Uu(u)}`))}function Pu(u){const t=u.getAttribute("id")||"",e=`#${Uu(t)}`,r=u.getRootNode({composed:!1});return!gu.test(t)&&du([u],e,r)?[e]:[]}function Tu(u){const t=u.parentNode;if(t){const e=Array.from(t.childNodes).filter(nu).indexOf(u);if(e>-1)return[`:nth-child(${e+1})`]}return[]}function Iu(u){return[Uu(u.tagName.toLowerCase())]}function Ru(u){const t=[...new Set(Cu(u.map(Iu)))];return 0===t.length||t.length>1?[]:[t[0]]}function Nu(u){const t=Ru([u])[0],e=u.parentElement;if(e){const r=Array.from(e.children).filter((u=>u.tagName.toLowerCase()===t)),n=r.indexOf(u);if(n>-1)return[`${t}:nth-of-type(${n+1})`]}return[]}function Mu(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){return Array.from(function*(u=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){let e=0,r=Lu(1);for(;r.length<=u.length&&eu[t]));yield t,r=ku(r,u.length-1)}}(u,{maxResults:t}))}function ku(u=[],t=0){const e=u.length;if(0===e)return[];const r=[...u];r[e-1]+=1;for(let u=e-1;u>=0;u--)if(r[u]>t){if(0===u)return Lu(e+1);r[u-1]++,r[u]=r[u-1]+1}return r[e-1]>t?Lu(e+1):r}function Lu(u=1){return Array.from(Array(u).keys())}const $u=":".charCodeAt(0).toString(16).toUpperCase(),_u=/[ !"#$%&'()\[\]{|}<>*+,./;=?@^`~\\]/;function Uu(u=""){var t,e;return null!==(e=null===(t=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===t?void 0:t.call(CSS,u))&&void 0!==e?e:function(u=""){return u.split("").map((u=>":"===u?`\\${$u} `:_u.test(u)?`\\${u}`:escape(u).replace(/%/g,"\\"))).join("")}(u)}const Wu={tag:Ru,id:function(u){return 0===u.length||u.length>1?[]:Pu(u[0])},class:function(u){return Eu(u.map(ju))},attribute:function(u){return Eu(u.map(Ou))},nthchild:function(u){return Eu(u.map(Tu))},nthoftype:function(u){return Eu(u.map(Nu))}},Gu={tag:Iu,id:Pu,class:ju,attribute:Ou,nthchild:Tu,nthoftype:Nu};function Vu(u){return u.includes(Du.tag)||u.includes(Du.nthoftype)?[...u]:[...u,Du.tag]}function Hu(u={}){const t=[...bu];return u[Du.tag]&&u[Du.nthoftype]&&t.splice(t.indexOf(Du.tag),1),t.map((t=>{return(r=u)[e=t]?r[e].join(""):"";var e,r})).join("")}function qu(u,t,e="",r){const n=function(u,t){return""===t?u:function(u,t){return[...u.map((u=>t+ou.DESCENDANT+u)),...u.map((u=>t+ou.CHILD+u))]}(u,t)}(function(u,t,e){const r=function(u,t){const{blacklist:e,whitelist:r,combineWithinSelector:n,maxCombinations:o}=t,D=yu(e),i=yu(r);return function(u){const{selectors:t,includeTag:e}=u,r=[].concat(t);return e&&!r.includes("tag")&&r.push("tag"),r}(t).reduce(((t,e)=>{const r=function(u,t){var e;return(null!==(e=Wu[t])&&void 0!==e?e:()=>[])(u)}(u,e),a=function(u=[],t,e){return u.filter((u=>e(u)||!t(u)))}(r,D,i),c=function(u=[],t){return u.sort(((u,e)=>{const r=t(u),n=t(e);return r&&!n?-1:!r&&n?1:0}))}(a,i);return t[e]=n?Mu(c,{maxResults:o}):c.map((u=>[u])),t}),{})}(u,e),n=function(u,t){return function(u){const{selectors:t,combineBetweenSelectors:e,includeTag:r,maxCandidates:n}=u,o=e?Mu(t,{maxResults:n}):t.map((u=>[u]));return r?o.map(Vu):o}(t).map((t=>function(u,t){const e={};return u.forEach((u=>{const r=t[u];r.length>0&&(e[u]=r)})),function(u={}){let t=[];return Object.entries(u).forEach((([u,e])=>{t=e.flatMap((e=>0===t.length?[{[u]:e}]:t.map((t=>Object.assign(Object.assign({},t),{[u]:e})))))})),t}(e).map(Hu)}(t,u))).filter((u=>u.length>0))}(r,e),o=Cu(n);return[...new Set(o)]}(u,r.root,r),e);for(const t of n)if(du(u,t,r.root))return t;return null}function Xu(u){return{value:u,include:!1}}function Yu({selectors:u,operator:t}){let e=[...bu];u[Du.tag]&&u[Du.nthoftype]&&(e=e.filter((u=>u!==Du.tag)));let r="";return e.forEach((t=>{(u[t]||[]).forEach((({value:u,include:t})=>{t&&(r+=u)}))})),t+r}function zu(u){return[":root",...hu(u).reverse().map((u=>{const t=function(u,t,e=ou.NONE){const r={};return t.forEach((t=>{Reflect.set(r,t,function(u,t){return Gu[t](u)}(u,t).map(Xu))})),{element:u,operator:e,selectors:r}}(u,[Du.nthchild],ou.CHILD);return t.selectors.nthchild.forEach((u=>{u.include=!0})),t})).map(Yu)].join("")}function Ju(u,t={}){const e=function(u){(u instanceof NodeList||u instanceof HTMLCollection)&&(u=Array.from(u));const t=(Array.isArray(u)?u:[u]).filter(nu);return[...new Set(t)]}(u),r=function(u,t={}){const e=Object.assign(Object.assign({},cu),t);return{selectors:(r=e.selectors,Array.isArray(r)?r.filter((u=>{return t=Du,e=u,Object.values(t).includes(e);var t,e})):[]),whitelist:fu(e.whitelist),blacklist:fu(e.blacklist),root:pu(e.root,u),combineWithinSelector:!!e.combineWithinSelector,combineBetweenSelectors:!!e.combineBetweenSelectors,includeTag:!!e.includeTag,maxCombinations:Au(e.maxCombinations),maxCandidates:Au(e.maxCandidates)};var r}(e[0],t);let n="",o=r.root;function D(){return function(u,t,e="",r){if(0===u.length)return null;const n=[u.length>1?u:[],...Bu(u,t).map((u=>[u]))];for(const u of n){const t=qu(u,0,e,r);if(t)return{foundElements:u,selector:t}}return null}(e,o,n,r)}let i=D();for(;i;){const{foundElements:u,selector:t}=i;if(du(e,t,r.root))return t;o=u[0],n=t,i=D()}return e.length>1?e.map((u=>Ju(u,r))).join(", "):function(u){return u.map(zu).join(", ")}(e)}function Ku(u){return null==u?null:-1!=["a","audio","button","canvas","details","input","label","option","select","submit","textarea","video"].indexOf(u.nodeName.toLowerCase())||u.hasAttribute("contenteditable")&&"false"!=u.getAttribute("contenteditable").toLowerCase()?u.outerHTML:u.parentElement?Ku(u.parentElement):null}function Zu(u){for(var t=0;t0&&t.top0&&t.left=6||Math.abs(t.offsetY)>=6)&&(e=!1,n=Android.onDragStart(JSON.stringify(t))):n=Android.onDragMove(JSON.stringify(t)),n&&(u.stopPropagation(),u.preventDefault())}}),{passive:!1});var t=void 0,e=!1,r=window.devicePixelRatio}(document)})),window.addEventListener("keydown",(function(u){et(u)||(rt(u),nt(u,"down"))})),window.addEventListener("keyup",(function(u){et(u)||(rt(u),nt(u,"up"))}));var ot=e(5155);e.n(ot)().shim();var Dt=!0;function it(){Dt&&N.apply(null,arguments)}window.addEventListener("load",(function(){var u=!1;document.addEventListener("selectionchange",(function(){var t=window.getSelection().isCollapsed;t&&u?(u=!1,Android.onSelectionEnd(),P()):t||u||(u=!0,Android.onSelectionStart())}))}),!1),window.readium={scrollToId:function(u){var t=document.getElementById(u);return!!t&&S(t.getBoundingClientRect())},scrollToPosition:function(u){if(u<0||u>1)throw"scrollToPosition() must be given a position from 0.0 to 1.0";var t;v()?x()?(t=document.scrollingElement.scrollWidth*u,document.scrollingElement.scrollLeft=-t):(t=document.scrollingElement.scrollHeight*u,document.scrollingElement.scrollTop=t):(t=document.scrollingElement.scrollWidth*u*(w()?-1:1),document.scrollingElement.scrollLeft=j(t))},scrollToLocator:function(u){var t=T(u);return!!t&&function(u){return S(u.getBoundingClientRect())}(t)},scrollLeft:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX-b,e=w()?-(u-b):0;return O(Math.max(t,e))},scrollRight:function(){var u=document.scrollingElement.scrollWidth,t=window.scrollX+b,e=w()?0:u-b;return O(Math.min(t,e))},scrollToStart:function(){v()&&!x()?document.scrollingElement.scrollTop=0:document.scrollingElement.scrollLeft=0},scrollToEnd:function(){var u=document.scrollingElement;if(v())x()?u.scrollLeft=-document.scrollingElement.scrollWidth:u.scrollTop=document.body.scrollHeight;else{var t=w()?-1:1;u.scrollLeft=j(u.scrollWidth*t)}},setCSSProperties:function(u){for(var t in u)I(t,u[t])},setProperty:I,removeProperty:R,getCurrentSelection:function(){var u=function(){var u=window.getSelection();if(u&&!u.isCollapsed){var t=u.toString();if(0!==t.trim().replace(/\n/g," ").replace(/\s\s+/g," ").length&&u.anchorNode&&u.focusNode){var e=1===u.rangeCount?u.getRangeAt(0):function(u,t,e,r){var n=new Range;if(n.setStart(u,t),n.setEnd(e,r),!n.collapsed)return n;it(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");var o=new Range;if(o.setStart(e,r),o.setEnd(u,t),!o.collapsed)return it(">>> createOrderedRange RANGE REVERSE OK."),n;it(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!")}(u.anchorNode,u.anchorOffset,u.focusNode,u.focusOffset);if(e&&!e.collapsed){var r=document.body.textContent,n=s.fromRange(e).relativeTo(document.body),o=n.start.offset,D=n.end.offset,i=r.slice(Math.max(0,o-200),o),a=i.search(/(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/g);-1!==a&&(i=i.slice(a+1));var c=r.slice(D,Math.min(r.length,D+200)),F=Array.from(c.matchAll(/(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[\0-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u036F\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482-\u0489\u0530\u0557\u0558\u055A-\u055F\u0589-\u05CF\u05EB-\u05EE\u05F3-\u061F\u064B-\u066D\u0670\u06D4\u06D6-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u06FD\u06FE\u0700-\u070F\u0711\u0730-\u074C\u07A6-\u07B0\u07B2-\u07C9\u07EB-\u07F3\u07F6-\u07F9\u07FB-\u07FF\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u083F\u0859-\u085F\u086B-\u086F\u0888\u088F-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0970\u0981-\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BC\u09BE-\u09CD\u09CF-\u09DB\u09DE\u09E2-\u09EF\u09F2-\u09FB\u09FD-\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A58\u0A5D\u0A5F-\u0A71\u0A75-\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABC\u0ABE-\u0ACF\u0AD1-\u0ADF\u0AE2-\u0AF8\u0AFA-\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3C\u0B3E-\u0B5B\u0B5E\u0B62-\u0B70\u0B72-\u0B82\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BCF\u0BD1-\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C3E-\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C62-\u0C7F\u0C81-\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBC\u0CBE-\u0CDC\u0CDF\u0CE2-\u0CF0\u0CF3-\u0D03\u0D0D\u0D11\u0D3B\u0D3C\u0D3E-\u0D4D\u0D4F-\u0D53\u0D57-\u0D5E\u0D62-\u0D79\u0D80-\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0E00\u0E31\u0E34-\u0E3F\u0E47-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EB1\u0EB4-\u0EBC\u0EBE\u0EBF\u0EC5\u0EC7-\u0EDB\u0EE0-\u0EFF\u0F01-\u0F3F\u0F48\u0F6D-\u0F87\u0F8D-\u0FFF\u102B-\u103E\u1040-\u104F\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1712-\u171E\u1732-\u173F\u1752-\u175F\u176D\u1771-\u177F\u17B4-\u17D6\u17D8-\u17DB\u17DD-\u181F\u1879-\u187F\u1885\u1886\u18A9\u18AB-\u18AF\u18F6-\u18FF\u191F-\u194F\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19FF\u1A17-\u1A1F\u1A55-\u1AA6\u1AA8-\u1B04\u1B34-\u1B44\u1B4D-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BFF\u1C24-\u1C4C\u1C50-\u1C59\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1CFB-\u1CFF\u1DC0-\u1DFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF-\u2E2E\u2E30-\u3004\u3007-\u3030\u3036-\u303A\u303D-\u3040\u3097-\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA620-\uA629\uA62C-\uA63F\uA66F-\uA67E\uA69E\uA69F\uA6E6-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA802\uA806\uA80B\uA823-\uA83F\uA874-\uA881\uA8B4-\uA8F1\uA8F8-\uA8FA\uA8FC\uA8FF-\uA909\uA926-\uA92F\uA947-\uA95F\uA97D-\uA983\uA9B3-\uA9CE\uA9D0-\uA9DF\uA9E5\uA9F0-\uA9F9\uA9FF\uAA29-\uAA3F\uAA43\uAA4C-\uAA5F\uAA77-\uAA79\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAC3-\uAADA\uAADE\uAADF\uAAEB-\uAAF1\uAAF5-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABE3-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB1E\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFE6F\uFE75\uFEFD-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF76-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE01-\uDE0F\uDE14\uDE18\uDE36-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE5-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD24-\uDE7F\uDEAA-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF46-\uDF6F\uDF82-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC00-\uDC02\uDC38-\uDC70\uDC73\uDC74\uDC76-\uDC82\uDCB0-\uDCCF\uDCE9-\uDD02\uDD27-\uDD43\uDD45\uDD46\uDD48-\uDD4F\uDD73-\uDD75\uDD77-\uDD82\uDDB3-\uDDC0\uDDC5-\uDDD9\uDDDB\uDDDD-\uDDFF\uDE12\uDE2C-\uDE3E\uDE41-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEDF-\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A-\uDF3C\uDF3E-\uDF4F\uDF51-\uDF5C\uDF62-\uDFFF]|\uD805[\uDC35-\uDC46\uDC4B-\uDC5E\uDC62-\uDC7F\uDCB0-\uDCC3\uDCC6\uDCC8-\uDD7F\uDDAF-\uDDD7\uDDDC-\uDDFF\uDE30-\uDE43\uDE45-\uDE7F\uDEAB-\uDEB7\uDEB9-\uDEFF\uDF1B-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC2C-\uDC9F\uDCE0-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD30-\uDD3E\uDD40\uDD42-\uDD9F\uDDA8\uDDA9\uDDD1-\uDDE0\uDDE2\uDDE4-\uDDFF\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE4F\uDE51-\uDE5B\uDE8A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC2F-\uDC3F\uDC41-\uDC71\uDC90-\uDCFF\uDD07\uDD0A\uDD31-\uDD45\uDD47-\uDD5F\uDD66\uDD69\uDD8A-\uDD97\uDD99-\uDEDF\uDEF3-\uDF01\uDF03\uDF11\uDF34-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD834\uD836\uD83C-\uD83F\uD87C\uD87D\uD87F\uD889-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC40\uDC47-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F-\uDE6F\uDEBF-\uDECF\uDEEE-\uDEFF\uDF30-\uDF3F\uDF44-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4F\uDF51-\uDF92\uDFA0-\uDFDF\uDFE2\uDFE4-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC00-\uDC2F\uDC6E-\uDCFF\uDD2D-\uDD36\uDD3E-\uDD4D\uDD4F-\uDE8F\uDEAE-\uDEBF\uDEEC-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCEC-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCFF\uDD44-\uDD4A\uDD4C-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g)).pop();return void 0!==F&&F.index>1&&(c=c.slice(0,F.index+1)),{highlight:t,before:i,after:c}}it("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!")}}}();return u?{text:u,rect:function(){try{var u=window.getSelection();if(!u)return;return _(u.getRangeAt(0).getBoundingClientRect())}catch(u){return M(u),null}}()}:null},registerDecorationTemplates:function(u){for(var t="",e=0,r=Object.entries(u);e mTouchSlop) {
+ if (!scrollMode && xDiff > mTouchSlop) {
if (DEBUG) Timber.v("Starting drag!")
mIsBeingDragged = true
mLastMotionX = if (x - mInitialMotionX > 0) {
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt
index 98184974c9..1ee1975038 100644
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt
@@ -31,7 +31,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.lifecycle.withStarted
-import androidx.viewpager.widget.ViewPager
+import androidx.viewpager2.widget.ViewPager2
import kotlin.math.ceil
import kotlin.reflect.KClass
import kotlinx.coroutines.Job
@@ -425,7 +425,7 @@ public class EpubNavigatorFragment internal constructor(
"The parent view of the EPUB `resourcePager` must be a ConstraintLayout"
}
// We need to null out the adapter explicitly, otherwise the page fragments will leak.
- resourcePager.adapter = null
+ resourcePager.setAdapter(null)
parent.removeView(resourcePager)
resourcePager = R2ViewPager(requireContext())
@@ -434,17 +434,96 @@ public class EpubNavigatorFragment internal constructor(
EpubLayout.REFLOWABLE, null -> R2ViewPager.PublicationType.EPUB
EpubLayout.FIXED -> R2ViewPager.PublicationType.FXL
}
+
+ // Configure ViewPager orientation based on scroll settings
+ if (viewModel.layout == EpubLayout.REFLOWABLE && viewModel.settings.value.scroll) {
+ resourcePager.configureForVerticalScrolling()
+ } else {
+ resourcePager.configureForHorizontalPaging()
+ }
+
resourcePager.setBackgroundColor(viewModel.settings.value.effectiveBackgroundColor)
// Let the page views handle the keyboard events.
resourcePager.isFocusable = false
- resourcePager.addOnPageChangeListener(PageChangeListener())
+ resourcePager.registerOnPageChangeCallback(PageChangeListener())
+
+ // Set proper ConstraintLayout parameters
+ val layoutParams = ConstraintLayout.LayoutParams(
+ ConstraintLayout.LayoutParams.MATCH_CONSTRAINT,
+ ConstraintLayout.LayoutParams.MATCH_CONSTRAINT
+ ).apply {
+ topToTop = ConstraintLayout.LayoutParams.PARENT_ID
+ bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID
+ startToStart = ConstraintLayout.LayoutParams.PARENT_ID
+ endToEnd = ConstraintLayout.LayoutParams.PARENT_ID
+ }
+ resourcePager.layoutParams = layoutParams
parent.addView(resourcePager)
resetResourcePagerAdapter()
}
- private inner class PageChangeListener : ViewPager.SimpleOnPageChangeListener() {
+ private inner class PageChangeListener : ViewPager2.OnPageChangeCallback() {
+ private var hasPresetScrollPosition = false
+
+ override fun onPageScrollStateChanged(state: Int) {
+ when (state) {
+ ViewPager2.SCROLL_STATE_IDLE -> {
+ // Reset flag when swipe ends
+ hasPresetScrollPosition = false
+ }
+ else -> Unit
+ }
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int,
+ ) {
+ // Only process when swipe has started and scroll position hasn't been set yet
+ if (positionOffset > 0f && !hasPresetScrollPosition) {
+ val currentPosition = resourcePager.currentItem
+
+ // When swiping to previous page (position is less than current)
+ if (position < currentPosition) {
+ // Find target page fragment and set to last page
+ val targetFragment = fragmentAt(position) as? R2EpubPageFragment
+ targetFragment?.webView?.let { webView ->
+ if (viewModel.isScrollEnabled.value) {
+ webView.scrollToEnd()
+ } else if (webView.numPages > 1) {
+ if (resourcePager.isRtl()) {
+ webView.setCurrentItem(0, false)
+ } else {
+ webView.setCurrentItem(webView.numPages - 1, false)
+ }
+ }
+ }
+ hasPresetScrollPosition = true
+ }
+ // When swiping to next page (position + 1 is greater than current)
+ else if (position + 1 > currentPosition) {
+ // Find target page fragment and set to first page
+ val targetFragment = fragmentAt(position + 1) as? R2EpubPageFragment
+ targetFragment?.webView?.let { webView ->
+ if (viewModel.isScrollEnabled.value) {
+ webView.scrollToStart()
+ } else if (webView.numPages > 1) {
+ if (resourcePager.isRtl()) {
+ webView.setCurrentItem(webView.numPages - 1, false)
+ } else {
+ webView.setCurrentItem(0, false)
+ }
+ }
+ }
+
+ hasPresetScrollPosition = true
+ }
+ }
+ }
+
override fun onPageSelected(position: Int) {
currentReflowablePageFragment?.webView?.let { webView ->
if (viewModel.isScrollEnabled.value) {
@@ -456,16 +535,17 @@ public class EpubNavigatorFragment internal constructor(
webView.scrollToEnd()
}
} else {
- if (currentPagerPosition < position) {
- // handle swipe LEFT
- webView.setCurrentItem(0, false)
- } else if (currentPagerPosition > position) {
- // handle swipe RIGHT
- webView.setCurrentItem(webView.numPages - 1, false)
+ if (!hasPresetScrollPosition) {
+ if (currentPagerPosition < position) {
+ webView.setCurrentItem(0, false)
+ } else if (currentPagerPosition > position) {
+ webView.setCurrentItem(webView.numPages - 1, false)
+ }
}
}
}
- currentPagerPosition = position // Update current position
+
+ currentPagerPosition = position
notifyCurrentLocation()
}
@@ -474,23 +554,23 @@ public class EpubNavigatorFragment internal constructor(
private fun resetResourcePagerAdapter() {
adapter = when (publication.metadata.presentation.layout) {
EpubLayout.REFLOWABLE, null -> {
- R2PagerAdapter(childFragmentManager, resourcesSingle)
+ R2PagerAdapter(this, resourcesSingle)
}
EpubLayout.FIXED -> {
when (viewModel.dualPageMode) {
// FIXME: Properly implement DualPage.AUTO depending on the device orientation.
DualPage.OFF, DualPage.AUTO -> {
- R2PagerAdapter(childFragmentManager, resourcesSingle)
+ R2PagerAdapter(this, resourcesSingle)
}
DualPage.ON -> {
- R2PagerAdapter(childFragmentManager, resourcesDouble)
+ R2PagerAdapter(this, resourcesDouble)
}
}
}
}
adapter.listener = PagerAdapterListener()
- resourcePager.adapter = adapter
- resourcePager.direction = overflow.value.readingProgression
+ resourcePager.setAdapter(adapter)
+ resourcePager.readingProgression = overflow.value.readingProgression
resourcePager.layoutDirection = when (settings.value.readingProgression) {
ReadingProgression.RTL -> LayoutDirection.RTL
ReadingProgression.LTR -> LayoutDirection.LTR
@@ -625,11 +705,13 @@ public class EpubNavigatorFragment internal constructor(
else -> false
}
} ?: return
+
val (index, _) = page
if (resourcePager.currentItem != index) {
- resourcePager.currentItem = index
+ resourcePager.setCurrentItem(index, false)
}
+
r2PagerAdapter?.loadLocatorAt(index, locator)
}
@@ -903,7 +985,7 @@ public class EpubNavigatorFragment internal constructor(
private fun goToNextResource(jump: Boolean, animated: Boolean): Boolean {
val adapter = resourcePager.adapter ?: return false
- if (resourcePager.currentItem >= adapter.count - 1) {
+ if (resourcePager.currentItem >= adapter.itemCount - 1) {
return false
}
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/image/ImageNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/image/ImageNavigatorFragment.kt
index 5da9b86b9b..594ea530d1 100644
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/image/ImageNavigatorFragment.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/image/ImageNavigatorFragment.kt
@@ -15,7 +15,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentFactory
-import androidx.viewpager.widget.ViewPager
+import androidx.viewpager2.widget.ViewPager2
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -106,7 +106,7 @@ public class ImageNavigatorFragment private constructor(
positions = runBlocking { publication.positions() }
- resourcePager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
+ resourcePager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
notifyCurrentLocation()
}
@@ -114,20 +114,20 @@ public class ImageNavigatorFragment private constructor(
val resources = publication.readingOrder
.map { R2PagerAdapter.PageResource.Cbz(it) }
- adapter = R2PagerAdapter(childFragmentManager, resources)
+ adapter = R2PagerAdapter(this, resources)
- resourcePager.adapter = adapter
+ resourcePager.setAdapter(adapter)
if (currentPagerPosition == 0) {
if (requireActivity().layoutDirectionIsRTL()) {
// The view has RTL layout
- resourcePager.currentItem = resources.size - 1
+ resourcePager.setCurrentItem(resources.size - 1, false)
} else {
// The view has LTR layout
- resourcePager.currentItem = currentPagerPosition
+ resourcePager.setCurrentItem(currentPagerPosition, false)
}
} else {
- resourcePager.currentItem = currentPagerPosition
+ resourcePager.setCurrentItem(currentPagerPosition, false)
}
if (initialLocator != null) {
@@ -175,7 +175,7 @@ public class ImageNavigatorFragment private constructor(
listener?.onJumpToLocator(locator)
currentPagerPosition = resourceIndex
- resourcePager.currentItem = currentPagerPosition
+ resourcePager.setCurrentItem(currentPagerPosition, false)
return true
}
@@ -187,13 +187,7 @@ public class ImageNavigatorFragment private constructor(
override fun goForward(animated: Boolean): Boolean {
val current = resourcePager.currentItem
- if (requireActivity().layoutDirectionIsRTL()) {
- // The view has RTL layout
- resourcePager.currentItem = current - 1
- } else {
- // The view has LTR layout
- resourcePager.currentItem = current + 1
- }
+ resourcePager.setCurrentItem(current + 1, false)
notifyCurrentLocation()
return current != resourcePager.currentItem
@@ -201,13 +195,7 @@ public class ImageNavigatorFragment private constructor(
override fun goBackward(animated: Boolean): Boolean {
val current = resourcePager.currentItem
- if (requireActivity().layoutDirectionIsRTL()) {
- // The view has RTL layout
- resourcePager.currentItem = current + 1
- } else {
- // The view has LTR layout
- resourcePager.currentItem = current - 1
- }
+ resourcePager.setCurrentItem(current - 1, false)
notifyCurrentLocation()
return current != resourcePager.currentItem
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2CbzPageFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2CbzPageFragment.kt
index eecc5786c6..f944df9c92 100755
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2CbzPageFragment.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2CbzPageFragment.kt
@@ -88,7 +88,13 @@ internal class R2CbzPageFragment(
private fun updatePadding() {
viewLifecycleOwner.lifecycleScope.launch {
- viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
+ // Due to the migration from ViewPager to ViewPager2,
+ // adjacent pages now transition to the RESUMED state at onPageSelected,
+ // unlike the previous behavior.
+ // Therefore, changing the lifecycle state from RESUMED to STARTED
+ // allows padding to be pre-applied to the left and right pages,
+ // ensuring consistent UI behavior during page transitions.
+ viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
val window = activity?.window ?: return@repeatOnLifecycle
var top = 0
var bottom = 0
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt
index 97348b11e8..1c7e1f5724 100755
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt
@@ -348,7 +348,13 @@ internal class R2EpubPageFragment : Fragment() {
if (view == null) return
viewLifecycleOwner.lifecycleScope.launch {
- viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
+ // Due to the migration from ViewPager to ViewPager2,
+ // adjacent pages now transition to the RESUMED state at onPageSelected,
+ // unlike the previous behavior.
+ // Therefore, changing the lifecycle state from RESUMED to STARTED
+ // allows padding to be pre-applied to the left and right pages,
+ // ensuring consistent UI behavior during page transitions.
+ viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
val window = activity?.window ?: return@repeatOnLifecycle
var top = 0
var bottom = 0
@@ -381,13 +387,6 @@ internal class R2EpubPageFragment : Fragment() {
}
internal val paddingTop: Int get() = containerView.paddingTop
- internal val paddingBottom: Int get() = containerView.paddingBottom
-
- private val isCurrentResource: Boolean get() {
- val epubNavigator = navigator ?: return false
- val currentFragment = (epubNavigator.resourcePager.adapter as? R2PagerAdapter)?.getCurrentFragment() as? R2EpubPageFragment ?: return false
- return tag == currentFragment.tag
- }
private fun onLoadPage() {
if (!isLoading) return
@@ -509,6 +508,7 @@ internal class R2EpubPageFragment : Fragment() {
/**
* Same as setOnClickListener, but will also report the tap point in the view.
*/
+@SuppressLint("ClickableViewAccessibility")
private fun View.setOnClickListenerWithPoint(action: (View, PointF) -> Unit) {
var point = PointF()
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2FragmentPagerAdapter.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2FragmentPagerAdapter.kt
index 6f5871e996..31cfa66c5a 100755
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2FragmentPagerAdapter.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2FragmentPagerAdapter.kt
@@ -9,175 +9,59 @@
package org.readium.r2.navigator.pager
-import android.annotation.SuppressLint
-import android.os.Bundle
-import android.os.Parcelable
-import android.view.View
-import android.view.ViewGroup
import androidx.collection.LongSparseArray
-import androidx.core.os.BundleCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
-import androidx.fragment.app.FragmentTransaction
-import androidx.viewpager.widget.PagerAdapter
+import androidx.recyclerview.widget.RecyclerView
+import androidx.viewpager2.adapter.FragmentStateAdapter
-// This class will be going away when the navigator is rewritten
-@Suppress("DEPRECATION")
-internal abstract class R2FragmentPagerAdapter(private val mFragmentManager: FragmentManager) : androidx.fragment.app.FragmentStatePagerAdapter(
- mFragmentManager,
- BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
-) {
+@Suppress("PROPERTY_HIDES_JAVA_FIELD")
+internal abstract class R2FragmentPagerAdapter(
+ private val fragment: Fragment,
+) : FragmentStateAdapter(fragment) {
- val mFragments = LongSparseArray()
- private val mSavedStates = LongSparseArray()
- private var mCurTransaction: FragmentTransaction? = null
- private var mCurrentPrimaryItem: Fragment? = null
-
- abstract override fun getItem(position: Int): Fragment
-
- override fun startUpdate(container: ViewGroup) {
- if (container.id == View.NO_ID) {
- throw IllegalStateException("ViewPager with adapter $this requires a view id")
- }
- }
-
- @SuppressLint("CommitTransaction")
- override fun instantiateItem(container: ViewGroup, position: Int): Any {
- val tag = getItemId(position)
- var fragment: Fragment? = mFragments.get(tag)
+ // Keep FragmentManager for backward compatibility
+ protected val mFragmentManager: FragmentManager = fragment.childFragmentManager
- if (fragment != null) {
- return fragment
- }
-
- if (mCurTransaction == null) {
- mCurTransaction = mFragmentManager.beginTransaction()
- }
+ val mFragments = LongSparseArray()
- fragment = getItem(position)
+ abstract fun getItem(position: Int): Fragment
- val savedState = mSavedStates.get(tag)
- if (savedState != null) {
- fragment.setInitialSavedState(savedState)
- }
- fragment.setMenuVisibility(false)
- fragment.userVisibleHint = false
- mFragments.put(tag, fragment)
- mCurTransaction!!.add(container.id, fragment, "f$tag")
+ override fun createFragment(position: Int): Fragment {
+ val fragment = getItem(position)
+ val itemId = getItemId(position)
+ mFragments.put(itemId, fragment)
return fragment
}
- @SuppressLint("CommitTransaction")
- override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
- val fragment = `object` as Fragment
- val currentPosition = getItemPosition(fragment)
-
- val index = mFragments.indexOfValue(fragment)
- var fragmentKey: Long = -1
- if (index != -1) {
- fragmentKey = mFragments.keyAt(index)
- mFragments.removeAt(index)
- }
-
- if (fragment.isAdded && currentPosition != PagerAdapter.POSITION_NONE) {
- mFragmentManager.saveFragmentInstanceState(fragment)?.let { state ->
- mSavedStates.put(fragmentKey, state)
- }
- } else {
- mSavedStates.remove(fragmentKey)
- }
-
- if (mCurTransaction == null) {
- mCurTransaction = mFragmentManager.beginTransaction()
- }
-
- mCurTransaction!!.remove(fragment)
- }
-
- override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) {
- val fragment = `object` as Fragment?
- if (fragment !== mCurrentPrimaryItem) {
- if (mCurrentPrimaryItem != null) {
- mCurrentPrimaryItem!!.setMenuVisibility(false)
- mCurrentPrimaryItem!!.userVisibleHint = false
- }
- if (fragment != null) {
- fragment.setMenuVisibility(true)
- fragment.userVisibleHint = true
- }
- mCurrentPrimaryItem = fragment
- }
- }
-
- override fun finishUpdate(container: ViewGroup) {
- if (mCurTransaction != null) {
- mCurTransaction!!.commitNowAllowingStateLoss()
- mCurTransaction = null
- }
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
}
- override fun isViewFromObject(view: View, `object`: Any): Boolean {
- return (`object` as Fragment).view === view
+ override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
+ super.onAttachedToRecyclerView(recyclerView)
+ // Allow subclasses to handle state restoration after RecyclerView is attached
+ onRecyclerViewAttached()
}
- override fun saveState(): Parcelable? {
- var state: Bundle? = null
- if (mSavedStates.size() > 0) {
- state = Bundle()
- val stateIds = LongArray(mSavedStates.size())
- for (i in 0 until mSavedStates.size()) {
- val entry = mSavedStates.valueAt(i)
- stateIds[i] = mSavedStates.keyAt(i)
- state.putParcelable(stateIds[i].toString(), entry)
- }
- state.putLongArray("states", stateIds)
- }
- for (i in 0 until mFragments.size()) {
- val f = mFragments.valueAt(i)
- if (f.isAdded) {
- if (state == null) {
- state = Bundle()
- }
- val key = "f" + mFragments.keyAt(i)
- mFragmentManager.putFragment(state, key, f)
- }
- }
- return state
+ override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
+ super.onDetachedFromRecyclerView(recyclerView)
}
- override fun restoreState(state: Parcelable?, loader: ClassLoader?) {
- if (state != null) {
- val bundle = state as Bundle?
- bundle!!.classLoader = loader
- val fss = bundle.getLongArray("states")
- mSavedStates.clear()
- mFragments.clear()
- if (fss != null) {
- for (fs in fss) {
- BundleCompat.getParcelable(
- bundle,
- fs.toString(),
- Fragment.SavedState::class.java
- )?.let { st ->
- mSavedStates.put(fs, st)
- }
- }
- }
- val keys = bundle.keySet()
- for (key in keys) {
- if (key.startsWith("f")) {
- val f = mFragmentManager.getFragment(bundle, key)
- if (f != null) {
- f.setMenuVisibility(false)
- mFragments.put(java.lang.Long.parseLong(key.substring(1)), f)
- }
- }
- }
- }
+ /**
+ * Called when the adapter is attached to RecyclerView.
+ * Subclasses can override this to handle state restoration.
+ */
+ protected open fun onRecyclerViewAttached() {
+ // Default implementation does nothing
}
- fun getItemId(position: Int): Long {
- return position.toLong()
+ /**
+ * Utility method to get fragment by position if it exists
+ */
+ protected fun getFragmentAtPosition(position: Int): Fragment? {
+ val id = getItemId(position)
+ return mFragments[id]
}
}
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt
index 3a88e4a22f..9d9883241b 100644
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt
@@ -10,12 +10,8 @@
package org.readium.r2.navigator.pager
import android.os.Bundle
-import android.os.Parcelable
-import android.view.ViewGroup
import androidx.collection.LongSparseArray
-import androidx.collection.forEach
import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentManager
import org.readium.r2.navigator.extensions.let
import org.readium.r2.shared.publication.Link
import org.readium.r2.shared.publication.Locator
@@ -23,9 +19,9 @@ import org.readium.r2.shared.util.AbsoluteUrl
import org.readium.r2.shared.util.Url
internal class R2PagerAdapter internal constructor(
- val fm: FragmentManager,
+ fragment: Fragment,
private val resources: List,
-) : R2FragmentPagerAdapter(fm) {
+) : R2FragmentPagerAdapter(fragment) {
internal interface Listener {
fun onCreatePageFragment(fragment: Fragment) {}
@@ -44,37 +40,14 @@ internal class R2PagerAdapter internal constructor(
data class Cbz(val link: Link) : PageResource()
}
- private var currentFragment: Fragment? = null
- private var previousFragment: Fragment? = null
- private var nextFragment: Fragment? = null
-
- fun getCurrentFragment(): Fragment? {
- return currentFragment
- }
-
- fun getPreviousFragment(): Fragment? {
- return previousFragment
- }
-
- fun getNextFragment(): Fragment? {
- return nextFragment
- }
-
- override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) {
- if (getCurrentFragment() !== `object`) {
- currentFragment = `object` as Fragment
- nextFragment = mFragments.get(getItemId(position + 1))
- previousFragment = mFragments.get(getItemId(position - 1))
- }
- super.setPrimaryItem(container, position, `object`)
- }
-
- internal fun getResource(position: Int): PageResource? =
- resources.getOrNull(position)
+ internal fun getResource(position: Int): PageResource? = resources.getOrNull(position)
override fun getItem(position: Int): Fragment {
val locator = popPendingLocatorAt(getItemId(position))
- val fragment = when (val resource = resources[position]) {
+
+ val resource = resources[position]
+
+ val fragment = when (resource) {
is PageResource.EpubReflowable -> {
R2EpubPageFragment.newInstance(
resource.url,
@@ -90,41 +63,45 @@ internal class R2PagerAdapter internal constructor(
)
}
is PageResource.Cbz -> {
- fm.fragmentFactory
+ mFragmentManager.fragmentFactory
.instantiate(
ClassLoader.getSystemClassLoader(),
R2CbzPageFragment::class.java.name
- )
- .also {
- it.arguments = Bundle().apply {
+ ).apply {
+ arguments = Bundle().apply {
putParcelable("link", resource.link)
}
}
}
}
+
listener?.onCreatePageFragment(fragment)
return fragment
}
- override fun getCount(): Int {
- return resources.size
- }
+ override fun getItemCount(): Int = resources.size
- override fun restoreState(state: Parcelable?, loader: ClassLoader?) {
- super.restoreState(state, loader)
+ private val pendingLocators = LongSparseArray()
- pendingLocators.forEach { i, locator ->
- (mFragments.get(i) as? R2EpubPageFragment)?.loadLocator(locator)
- }
- pendingLocators.clear()
+ override fun onRecyclerViewAttached() {
+ super.onRecyclerViewAttached()
+ // Restore pending locators to fragments that are now available
+ restorePendingLocators()
}
- private val pendingLocators = LongSparseArray()
+ private fun restorePendingLocators() {
+ // Process all pending locators and apply them to existing fragments
+ for (i in 0 until pendingLocators.size()) {
+ val id = pendingLocators.keyAt(i)
+ val locator = pendingLocators.valueAt(i)
+ val fragment = mFragments.get(id)
+ if (fragment != null) {
+ (fragment as? R2EpubPageFragment)?.loadLocator(locator)
+ }
+ }
+ // Don't clear here as fragments might not be ready yet
+ }
- /**
- * Loads the given [Locator] in the page fragment at the given position. If not loaded, it
- * will be used when the fragment will be created.
- */
internal fun loadLocatorAt(position: Int, locator: Locator) {
val id = getItemId(position)
val fragment = mFragments.get(id)
@@ -132,10 +109,29 @@ internal class R2PagerAdapter internal constructor(
pendingLocators.put(id, locator)
} else {
(fragment as? R2EpubPageFragment)?.loadLocator(locator)
+ // Remove from pending since it's been applied
+ pendingLocators.remove(id)
+ }
+ }
+
+ /**
+ * Force restoration of pending locators - useful after configuration changes
+ */
+ internal fun restoreState() {
+ restorePendingLocators()
+ // Clear pending locators that have been successfully applied
+ val toRemove = mutableListOf()
+ for (i in 0 until pendingLocators.size()) {
+ val id = pendingLocators.keyAt(i)
+ val fragment = mFragments[id]
+ if (fragment != null) {
+ toRemove.add(id)
+ }
}
+ toRemove.forEach { pendingLocators.remove(it) }
}
private fun popPendingLocatorAt(id: Long): Locator? =
- pendingLocators.get(id)
+ pendingLocators[id]
.also { pendingLocators.remove(id) }
}
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2RTLViewPager2.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2RTLViewPager2.kt
new file mode 100644
index 0000000000..80d89a20fc
--- /dev/null
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2RTLViewPager2.kt
@@ -0,0 +1,319 @@
+/*
+ * Copyright 2018 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+package org.readium.r2.navigator.pager
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.os.Parcel
+import android.os.Parcelable
+import android.util.AttributeSet
+import android.view.MotionEvent
+import android.view.View
+import android.view.ViewGroup
+import android.webkit.WebView
+import android.widget.FrameLayout
+import androidx.recyclerview.widget.RecyclerView
+import androidx.viewpager2.widget.ViewPager2
+import kotlin.math.abs
+import org.readium.r2.navigator.R2BasicWebView
+import org.readium.r2.navigator.preferences.ReadingProgression
+
+/**
+ * R2RTLViewPager2 is a wrapper around ViewPager2 that supports RTL (Right-to-Left) reading progression
+ * and can be configured for both horizontal and vertical orientation.
+ *
+ * This class handles RTL layout direction based on ReadingProgression setting and provides
+ * proper page ordering for different reading directions. It also intercepts touch events
+ * when WebView cannot scroll horizontally to enable ViewPager2 swipe functionality.
+ */
+public open class R2RTLViewPager2 @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : FrameLayout(context, attrs, defStyleAttr) {
+
+ // Internal ViewPager2 instance
+ protected val viewPager2: ViewPager2 = ViewPager2(context)
+
+ // Reading progression direction (LTR or RTL)
+ public var readingProgression: ReadingProgression = ReadingProgression.LTR
+
+ // Current layout direction
+ private var mLayoutDirection = LAYOUT_DIRECTION_LTR
+
+ // Touch event handling - store initial state for consistent behavior
+ private var initialX = 0f
+ private var initialY = 0f
+ private var initialCanScrollLeft = false
+ private var initialCanScrollRight = false
+ private var initialCanScrollUp = false
+ private var initialCanScrollDown = false
+
+ init {
+ viewPager2.offscreenPageLimit = 1
+ // Add ViewPager2 to this container
+ addView(viewPager2, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT))
+ }
+
+ // Delegate properties and methods to internal ViewPager2
+ public var adapter: RecyclerView.Adapter<*>?
+ get() = viewPager2.adapter
+ set(value) {
+ viewPager2.adapter = value
+ }
+
+ @ViewPager2.Orientation
+ private var orientation: Int
+ get() = viewPager2.orientation
+ set(value) {
+ if (value == ViewPager2.ORIENTATION_VERTICAL || value == ViewPager2.ORIENTATION_HORIZONTAL) {
+ viewPager2.orientation = value
+ optimizeForOrientation(value)
+ }
+ }
+
+ public val currentItem: Int
+ get() = viewPager2.currentItem
+
+ @SuppressLint("NotifyDataSetChanged")
+ override fun onRtlPropertiesChanged(layoutDirection: Int) {
+ super.onRtlPropertiesChanged(layoutDirection)
+
+ // Override with reading progression setting
+ val finalLayoutDirection = if (readingProgression == ReadingProgression.RTL) {
+ LAYOUT_DIRECTION_RTL
+ } else {
+ LAYOUT_DIRECTION_LTR
+ }
+
+ if (finalLayoutDirection != mLayoutDirection) {
+ val currentPosition = currentItem
+ mLayoutDirection = finalLayoutDirection
+
+ // Update ViewPager2's layout direction
+ viewPager2.layoutDirection = finalLayoutDirection
+
+ // Notify adapter of data change and restore position
+ adapter?.notifyDataSetChanged()
+ setCurrentItem(currentPosition, false)
+ }
+ }
+
+ public fun isRtl(): Boolean {
+ return mLayoutDirection == LAYOUT_DIRECTION_RTL
+ }
+
+ public fun setCurrentItem(item: Int, smoothScroll: Boolean) {
+ val position = item
+ viewPager2.setCurrentItem(position, smoothScroll)
+ }
+
+ public fun setCurrentItem(item: Int) {
+ setCurrentItem(item, true)
+ }
+
+ public fun registerOnPageChangeCallback(callback: ViewPager2.OnPageChangeCallback) {
+ viewPager2.registerOnPageChangeCallback(callback)
+ }
+
+ public fun unregisterOnPageChangeCallback(callback: ViewPager2.OnPageChangeCallback) {
+ viewPager2.unregisterOnPageChangeCallback(callback)
+ }
+
+ /**
+ * State saving and restoration
+ */
+ public class SavedState : BaseSavedState {
+ private val layoutDirection: Int
+
+ public constructor(superState: Parcelable?, layoutDirection: Int) : super(superState) {
+ this.layoutDirection = layoutDirection
+ }
+
+ private constructor(parcel: Parcel) : super(parcel) {
+ layoutDirection = parcel.readInt()
+ }
+
+ override fun writeToParcel(parcel: Parcel, flags: Int) {
+ super.writeToParcel(parcel, flags)
+ parcel.writeInt(layoutDirection)
+ }
+
+ public companion object CREATOR : Parcelable.Creator {
+ override fun createFromParcel(parcel: Parcel): SavedState {
+ return SavedState(parcel)
+ }
+
+ override fun newArray(size: Int): Array {
+ return arrayOfNulls(size)
+ }
+ }
+
+ public fun getLayoutDirection(): Int = layoutDirection
+ }
+
+ override fun onSaveInstanceState(): Parcelable {
+ val superState = super.onSaveInstanceState()
+ return SavedState(superState, mLayoutDirection)
+ }
+
+ override fun onRestoreInstanceState(state: Parcelable?) {
+ if (state !is SavedState) {
+ super.onRestoreInstanceState(state)
+ return
+ }
+
+ super.onRestoreInstanceState(state.superState)
+ mLayoutDirection = state.getLayoutDirection()
+ }
+
+ /**
+ * Configure ViewPager2 for vertical scrolling
+ */
+ public fun configureForVerticalScrolling() {
+ orientation = ViewPager2.ORIENTATION_VERTICAL
+ }
+
+ /**
+ * Configure ViewPager2 for horizontal paging
+ */
+ public fun configureForHorizontalPaging() {
+ orientation = ViewPager2.ORIENTATION_HORIZONTAL
+ }
+
+ /**
+ * Optimize ViewPager2 settings based on orientation
+ */
+ private fun optimizeForOrientation(@ViewPager2.Orientation orientation: Int) {
+ (viewPager2.getChildAt(0) as? RecyclerView)?.let { recyclerView ->
+ when (orientation) {
+ ViewPager2.ORIENTATION_VERTICAL -> {
+ // Optimize for vertical scrolling
+ recyclerView.layoutManager?.isItemPrefetchEnabled = false
+ }
+
+ ViewPager2.ORIENTATION_HORIZONTAL -> {
+ // Standard settings for horizontal scrolling
+ recyclerView.layoutManager?.isItemPrefetchEnabled = true
+ }
+ }
+ }
+ }
+
+ override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
+ when (event.action) {
+ MotionEvent.ACTION_DOWN -> {
+ initialX = event.x
+ initialY = event.y
+
+ // Get real-time scroll capability from current WebView
+ val currentWebView = findCurrentWebView()
+ initialCanScrollLeft = currentWebView?.canScrollHorizontally(-1) ?: false
+ initialCanScrollRight = currentWebView?.canScrollHorizontally(1) ?: false
+ initialCanScrollUp = currentWebView?.canScrollVertically(-1) ?: false
+ initialCanScrollDown = currentWebView?.canScrollVertically(1) ?: false
+ }
+
+ MotionEvent.ACTION_MOVE -> {
+ val currentX = event.x
+ val currentY = event.y
+ val diffX = abs(currentX - initialX)
+ val diffY = abs(currentY - initialY)
+
+ when (orientation) {
+ ViewPager2.ORIENTATION_HORIZONTAL -> {
+ // Handle horizontal swipes for horizontal orientation
+ if (diffX > diffY && diffX > 10) {
+ val isSwipeLeft = currentX < initialX
+
+ val shouldIntercept = if (isSwipeLeft) {
+ // Swiping left - intercept only if WebView cannot scroll right
+ !initialCanScrollRight
+ } else {
+ // Swiping right - intercept only if WebView cannot scroll left
+ !initialCanScrollLeft
+ }
+
+ viewPager2.isUserInputEnabled = shouldIntercept
+ }
+ }
+
+ ViewPager2.ORIENTATION_VERTICAL -> {
+ // For vertical orientation, allow ViewPager2 to handle vertical swipes
+ // but let WebView handle horizontal scrolls if needed
+ if (diffY > diffX && diffY > 10) {
+ val isScrollUp = currentY < initialY
+
+ val shouldIntercept = if (isScrollUp) {
+ // Scrolling up - intercept only if WebView cannot scroll down
+ !initialCanScrollDown
+ } else {
+ // Scrolling down - intercept only if WebView cannot scroll up
+ !initialCanScrollUp
+ }
+
+ viewPager2.isUserInputEnabled = shouldIntercept
+ }
+ }
+ }
+ }
+ }
+ return super.onInterceptTouchEvent(event)
+ }
+
+ /**
+ * Attempts to find the currently active WebView inside the current visible ViewPager2 page.
+ */
+ private fun findCurrentWebView(): WebView? {
+ val recyclerView = viewPager2.getChildAt(0) as? RecyclerView ?: return null
+ val layoutManager = recyclerView.layoutManager ?: return null
+
+ // Get current ViewPager2 position
+ val currentPosition = viewPager2.currentItem
+
+ // Try to find view by position using LayoutManager
+ val currentView = layoutManager.findViewByPosition(currentPosition)
+ if (currentView != null) {
+ val webView = findWebViewInView(currentView)
+ if (webView != null) {
+ return webView
+ }
+ }
+
+ // Fallback: iterate through child views and match adapter position
+ for (i in 0 until recyclerView.childCount) {
+ val childView = recyclerView.getChildAt(i)
+ val viewHolder = recyclerView.getChildViewHolder(childView)
+ val adapterPosition = viewHolder.bindingAdapterPosition
+
+ if (adapterPosition == currentPosition) {
+ val webView = findWebViewInView(childView)
+ if (webView != null) {
+ return webView
+ }
+ }
+ }
+
+ return null
+ }
+
+ /**
+ * Recursively search for a WebView (or subclass) in a view hierarchy.
+ */
+ private fun findWebViewInView(view: View): WebView? {
+ if (view is R2BasicWebView) return view
+ if (view is WebView) return view
+ if (view is ViewGroup) {
+ for (i in 0 until view.childCount) {
+ val child = view.getChildAt(i)
+ val found = findWebViewInView(child)
+ if (found != null) return found
+ }
+ }
+ return null
+ }
+}
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2ViewPager.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2ViewPager.kt
index b16cb3853c..32ec981e45 100644
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2ViewPager.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2ViewPager.kt
@@ -9,14 +9,10 @@
package org.readium.r2.navigator.pager
-import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
-import android.view.MotionEvent
-import org.readium.r2.navigator.BuildConfig.DEBUG
-import timber.log.Timber
-internal class R2ViewPager : R2RTLViewPager {
+internal class R2ViewPager : R2RTLViewPager2 {
internal enum class PublicationType {
EPUB,
@@ -32,52 +28,37 @@ internal class R2ViewPager : R2RTLViewPager {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
- override fun setCurrentItem(item: Int) {
- super.setCurrentItem(item, false)
- }
+ /**
+ * Set adapter with automatic state restoration
+ */
+ fun setAdapter(newAdapter: R2PagerAdapter?) {
+ // Use parent's adapter property instead of direct assignment
+ super.adapter = newAdapter
- @SuppressLint("ClickableViewAccessibility")
- override fun onTouchEvent(ev: MotionEvent): Boolean {
- if (DEBUG) Timber.d("ev.action ${ev.action}")
- if (publicationType == PublicationType.EPUB) {
- when (ev.action and MotionEvent.ACTION_MASK) {
- MotionEvent.ACTION_DOWN -> {
- // prevent swipe from view pager directly
- if (DEBUG) Timber.d("ACTION_DOWN")
- return false
- }
+ if (newAdapter != null) {
+ // Post to next frame to ensure ViewPager2 is fully initialized
+ post {
+ restoreAdapterState()
}
}
+ }
- return try {
- // The super implementation sometimes triggers:
- // java.lang.IllegalArgumentException: pointerIndex out of range
- // i.e. https://stackoverflow.com/q/48496257/1474476
- return super.onTouchEvent(ev)
- } catch (ex: IllegalArgumentException) {
- Timber.e(ex)
- false
+ override fun onAttachedToWindow() {
+ super.onAttachedToWindow()
+ // Restore state when view is attached to window (e.g., after configuration change)
+ post {
+ restoreAdapterState()
}
}
- override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
- if (publicationType == PublicationType.EPUB) {
- when (ev.action and MotionEvent.ACTION_MASK) {
- MotionEvent.ACTION_DOWN -> {
- // prevent swipe from view pager directly
- return false
- }
- }
- }
+ // Cast adapter to R2PagerAdapter for convenience
+ val r2Adapter: R2PagerAdapter?
+ get() = adapter as? R2PagerAdapter
- return try {
- // The super implementation sometimes triggers:
- // java.lang.IllegalArgumentException: pointerIndex out of range
- // i.e. https://stackoverflow.com/q/48496257/1474476
- super.onInterceptTouchEvent(ev)
- } catch (ex: IllegalArgumentException) {
- Timber.e(ex)
- false
- }
+ /**
+ * Restore pending state after configuration changes or app restoration
+ */
+ fun restoreAdapterState() {
+ r2Adapter?.restoreState()
}
}
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/Preference.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/Preference.kt
index 70019db3f5..bad168ee22 100644
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/Preference.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/Preference.kt
@@ -88,3 +88,26 @@ public interface RangePreference> : Preference {
*/
public fun formatValue(value: T): String
}
+
+/**
+ * A [Preference] whose values must be null or in a [ClosedRange] of [T].
+ */
+public interface OptionalRangePreference> : Preference {
+
+ public val supportedRange: ClosedRange
+
+ /**
+ * Increment the preference value from its current value or a default value.
+ */
+ public fun increment()
+
+ /**
+ * Decrement the preference value from its current value or a default value.
+ */
+ public fun decrement()
+
+ /**
+ * Format [value] in a way suitable for display, including unit if relevant.
+ */
+ public fun formatValue(value: T): String
+}
diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/PreferenceDelegate.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/PreferenceDelegate.kt
index 1abdd45ed1..4b3cb3b736 100644
--- a/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/PreferenceDelegate.kt
+++ b/readium/navigator/src/main/java/org/readium/r2/navigator/preferences/PreferenceDelegate.kt
@@ -75,3 +75,34 @@ public class RangePreferenceDelegate>(
set(progressionStrategy.decrement(currentValue))
}
}
+
+@InternalReadiumApi
+public class OptionalRangePreferenceDelegate>(
+ getValue: () -> T?,
+ getEffectiveValue: () -> T?,
+ getIsEffective: () -> Boolean,
+ updateValue: (T?) -> Unit,
+ private val defaultValue: T,
+ private val valueFormatter: (T) -> String,
+ override val supportedRange: ClosedRange,
+ private val progressionStrategy: ProgressionStrategy,
+) : PreferenceDelegate(getValue, getEffectiveValue, getIsEffective, updateValue),
+ OptionalRangePreference {
+
+ override fun set(value: T?) {
+ super.set(value?.coerceIn(supportedRange))
+ }
+
+ override fun formatValue(value: T): String =
+ valueFormatter.invoke(value)
+
+ override fun increment() {
+ val currentValue = value ?: effectiveValue
+ set(progressionStrategy.increment(currentValue ?: defaultValue))
+ }
+
+ override fun decrement() {
+ val currentValue = value ?: effectiveValue
+ set(progressionStrategy.decrement(currentValue ?: defaultValue))
+ }
+}
diff --git a/readium/navigators/common/build.gradle.kts b/readium/navigators/common/build.gradle.kts
index f74eb7a507..3eba3cbc02 100644
--- a/readium/navigators/common/build.gradle.kts
+++ b/readium/navigators/common/build.gradle.kts
@@ -22,6 +22,9 @@ dependencies {
api(project(":readium:readium-shared"))
api(project(":readium:readium-navigator"))
+ api(libs.kotlinx.collections.immutable)
+
+ implementation(libs.androidx.recyclerview)
implementation(libs.kotlinx.serialization.json)
implementation(libs.bundles.compose)
implementation(libs.timber)
diff --git a/readium/navigators/common/src/main/java/org/readium/navigator/common/DecorationController.kt b/readium/navigators/common/src/main/java/org/readium/navigator/common/DecorationController.kt
new file mode 100644
index 0000000000..cfead78871
--- /dev/null
+++ b/readium/navigators/common/src/main/java/org/readium/navigator/common/DecorationController.kt
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2025 Readium Foundation. All rights reserved.
+ * Use of this source code is governed by the BSD-style license
+ * available in the top-level LICENSE file of the project.
+ */
+
+package org.readium.navigator.common
+
+import androidx.annotation.ColorInt
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListUpdateCallback
+import kotlinx.collections.immutable.PersistentList
+import kotlinx.collections.immutable.PersistentMap
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import org.readium.r2.shared.ExperimentalReadiumApi
+import org.readium.r2.shared.util.Url
+
+/**
+ * A controller for decorations.
+ */
+@ExperimentalReadiumApi
+public interface DecorationController {
+
+ /**
+ * Declares the current state of the decorations for each group. This property must be observable.
+ *
+ * The controller will decide when to actually render each decoration efficiently. Your only
+ * responsibility is to submit the updated list of decorations when there are changes.
+ * Name each decoration group as you see fit. A good practice is to use the name of the feature
+ * requiring decorations, e.g. annotation, search, tts, etc.
+ */
+ public var decorations: PersistentMap>>
+}
+
+/**
+ * Marker interface for decoration location.
+ */
+@ExperimentalReadiumApi
+public interface DecorationLocation : Location
+
+/**
+ * A decoration is a user interface element drawn on top of a publication. It associates a [style]
+ * to be rendered with a discrete [location] in the publication.
+ *
+ * For example, decorations can be used to draw highlights, images or buttons.
+ *
+ * @param id An identifier for this decoration. It must be unique in the group the decoration is applied to.
+ * @param location Location in the publication where the decoration will be rendered.
+ * @param style Declares the look and feel of the decoration.
+ */
+@ExperimentalReadiumApi
+public data class Decoration(
+ val id: Id,
+ val location: L,
+ val style: Style,
+) {
+
+ /** Unique identifier for a decoration. */
+ @JvmInline
+ public value class Id(public val value: String)
+
+ /**
+ * The Decoration Style determines the look and feel of a decoration once rendered by a
+ * Navigator.
+ *
+ * It is media type agnostic, meaning that each Navigator will translate the style into a set of
+ * rendering instructions which makes sense for the resource type.
+ */
+ public interface Style {
+
+ public data class Highlight(
+ @ColorInt override val tint: Int,
+ override val isActive: Boolean = false,
+ ) : Style, Tinted, Activable
+
+ public data class Underline(
+ @ColorInt override val tint: Int,
+ override val isActive: Boolean = false,
+ ) : Style, Tinted, Activable
+
+ /** A type of [Style] which has a tint color. */
+ public interface Tinted {
+ @get:ColorInt public val tint: Int
+ }
+
+ /** A type of [Style] which can be in an "active" state. */
+ public interface Activable {
+ public val isActive: Boolean
+ }
+ }
+}
+
+/** Represents an atomic change in a list of [Decoration] objects. */
+@ExperimentalReadiumApi
+public sealed class DecorationChange {
+
+ public data class Added(
+ val decoration: Decoration,
+ ) : DecorationChange()
+
+ public data class Updated