extwee 2.3.10 → 2.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +219 -0
- package/CONTRIBUTING.md +305 -0
- package/README.md +16 -0
- package/build/extwee.core.min.js +1 -1
- package/build/extwee.twine1html.min.js +1 -1
- package/build/extwee.twine2archive.min.js +1 -1
- package/build/extwee.tws.min.js +1 -1
- package/package.json +8 -5
- package/src/Passage.js +8 -9
- package/src/Story.js +2 -2
- package/types/src/Story.d.ts +1 -1
- package/.github/FUNDING.yml +0 -3
- package/.github/codeql-analysis.yml +0 -51
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/dependabot-automerge.yml +0 -23
- package/.github/workflows/nodejs.yml +0 -28
- package/.travis.yml +0 -13
- package/babel.config.json +0 -18
- package/docs/.nojekyll +0 -0
- package/docs/README.md +0 -224
- package/docs/_sidebar.md +0 -19
- package/docs/build/extwee.core.min.js +0 -1
- package/docs/build/extwee.twine1html.min.js +0 -1
- package/docs/build/extwee.twine2archive.min.js +0 -1
- package/docs/build/extwee.tws.min.js +0 -1
- package/docs/demos/compiler/extwee.core.min.js +0 -1
- package/docs/demos/compiler/index.css +0 -105
- package/docs/demos/compiler/index.html +0 -359
- package/docs/demos/decompile/extwee.core.min.js +0 -1
- package/docs/demos/decompile/index.css +0 -584
- package/docs/demos/decompile/index.html +0 -468
- package/docs/examples/dynamicPassages.md +0 -28
- package/docs/examples/jsonToTwee.md +0 -23
- package/docs/examples/twsToTwee.md +0 -25
- package/docs/formats/json.md +0 -17
- package/docs/formats/twee.md +0 -13
- package/docs/formats/twine1HTML.md +0 -13
- package/docs/formats/twine2ArchiveHTML.md +0 -13
- package/docs/formats/twine2HTML.md +0 -13
- package/docs/formats/tws.md +0 -9
- package/docs/index.html +0 -26
- package/docs/install/npm.md +0 -16
- package/docs/install/npx.md +0 -79
- package/docs/objects/passage.md +0 -47
- package/docs/objects/story.md +0 -69
- package/docs/objects/storyformat.md +0 -27
- package/eslint.config.js +0 -28
- package/extwee.config.json +0 -6
- package/extwee.config.md +0 -67
- package/jest.config.json +0 -5
- package/test/CLI/CLI.test.js +0 -49
- package/test/CLI/files/example.json +0 -1
- package/test/CLI/files/example6.twee +0 -22
- package/test/CLI/files/harlowe.js +0 -3
- package/test/CLI/files/input.html +0 -47
- package/test/CLI/files/output/test.twee +0 -0
- package/test/CLI/files/test.twee +0 -18
- package/test/CLI/files/tweeExample.twee +0 -17
- package/test/CLI/files/twine1/LICENSE.txt +0 -32
- package/test/CLI/files/twine1/code.js +0 -5
- package/test/CLI/files/twine1/engine.js +0 -43
- package/test/CLI/files/twine1/header.html +0 -325
- package/test/CLI/files/twine1Test.html +0 -371
- package/test/CLI/files/twineExample.html +0 -16
- package/test/Config/Config.test.js +0 -76
- package/test/Config/files/empty.json +0 -3
- package/test/Config/files/full.json +0 -8
- package/test/Config/files/invalid.json +0 -1
- package/test/Config/files/valid.json +0 -6
- package/test/Config/isDirectory.test.js +0 -50
- package/test/Config/isFile.test.js +0 -53
- package/test/Config/loadStoryFormat.test.js +0 -117
- package/test/Config/readDirectories.test.js +0 -78
- package/test/IFID/IFID.Generate.test.js +0 -10
- package/test/JSON/JSON.Parse.test.js +0 -316
- package/test/Objects/Passage.test.js +0 -270
- package/test/Objects/SnowmanCompatibility.test.js +0 -125
- package/test/Objects/Story.test.js +0 -1075
- package/test/Objects/StoryFormat.test.js +0 -219
- package/test/Roundtrip/Files/Example1.html +0 -64
- package/test/Roundtrip/Files/LICENSE +0 -19
- package/test/Roundtrip/Files/example1.twee +0 -10
- package/test/Roundtrip/Files/example2.twee +0 -27
- package/test/Roundtrip/Files/example4.twee +0 -27
- package/test/Roundtrip/Files/harlowe.js +0 -3
- package/test/Roundtrip/Files/round.html +0 -49
- package/test/Roundtrip/Roundtrip.test.js +0 -54
- package/test/StoryFormat/StoryFormat.Parse.test.js +0 -479
- package/test/TWS/Parse.test.js +0 -56
- package/test/TWS/TWSParser/Example5.tws +0 -414
- package/test/TWS/TWSParser/noscale.tws +0 -0
- package/test/TWS/TWSParser/nostory.tws +0 -0
- package/test/Twee/Twee.Escaping.test.js +0 -200
- package/test/Twee/Twee.Parse.test.js +0 -108
- package/test/Twee/TweeParser/cursed.twee +0 -16
- package/test/Twee/TweeParser/cycling.twee +0 -75
- package/test/Twee/TweeParser/emptytags.twee +0 -2
- package/test/Twee/TweeParser/example.twee +0 -32
- package/test/Twee/TweeParser/malformed.twee +0 -2
- package/test/Twee/TweeParser/missing.twee +0 -19
- package/test/Twee/TweeParser/multipleScriptPassages.twee +0 -19
- package/test/Twee/TweeParser/multipleStyleTag.twee +0 -19
- package/test/Twee/TweeParser/multipletags.twee +0 -10
- package/test/Twee/TweeParser/noTitle.twee +0 -2
- package/test/Twee/TweeParser/notes.twee +0 -16
- package/test/Twee/TweeParser/pasagemetadataerror.twee +0 -2
- package/test/Twee/TweeParser/scriptPassage.twee +0 -16
- package/test/Twee/TweeParser/singletag.twee +0 -13
- package/test/Twee/TweeParser/start.twee +0 -2
- package/test/Twee/TweeParser/startMetadata.twee +0 -14
- package/test/Twee/TweeParser/storydataerror.twee +0 -25
- package/test/Twee/TweeParser/style.twee +0 -16
- package/test/Twee/TweeParser/stylePassage.twee +0 -16
- package/test/Twee/TweeParser/test.twee +0 -25
- package/test/Twine1HTML/Twine1HTML.Compile.test.js +0 -180
- package/test/Twine1HTML/Twine1HTML.Parse.Web.test.js +0 -484
- package/test/Twine1HTML/Twine1HTML.Parse.test.js +0 -183
- package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/LICENSE +0 -674
- package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/engine.js +0 -43
- package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/jquery.js +0 -4
- package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/modernizr.js +0 -4
- package/test/Twine1HTML/Twine1HTMLCompiler/engineTest.html +0 -1
- package/test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/LICENSE +0 -32
- package/test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/code.js +0 -4
- package/test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/header.html +0 -327
- package/test/Twine1HTML/Twine1HTMLCompiler/test.html +0 -0
- package/test/Twine1HTML/Twine1HTMLCompiler/test1.html +0 -6
- package/test/Twine1HTML/Twine1HTMLCompiler/test2.html +0 -6
- package/test/Twine1HTML/Twine1HTMLCompiler/test3.html +0 -43
- package/test/Twine1HTML/Twine1HTMLCompiler/test4.html +0 -372
- package/test/Twine1HTML/Twine1HTMLCompiler/test5.html +0 -372
- package/test/Twine2ArchiveHTML/Twine2ArchiveHTML.Compile.test.js +0 -35
- package/test/Twine2ArchiveHTML/Twine2ArchiveHTML.Parse.Web.test.js +0 -293
- package/test/Twine2ArchiveHTML/Twine2ArchiveHTML.Parse.test.js +0 -42
- package/test/Twine2ArchiveHTML/Twine2ArchiveHTMLCompiler/test1.html +0 -6
- package/test/Twine2ArchiveHTML/Twine2ArchiveHTMLParser/test1.html +0 -3
- package/test/Twine2HTML/Twine2HTML.Compile.test.js +0 -139
- package/test/Twine2HTML/Twine2HTML.Parse.Web.test.js +0 -329
- package/test/Twine2HTML/Twine2HTML.Parse.test.js +0 -192
- package/test/Twine2HTML/Twine2HTMLCompiler/TestTags.html +0 -42
- package/test/Twine2HTML/Twine2HTMLCompiler/creator.html +0 -50
- package/test/Twine2HTML/Twine2HTMLCompiler/example6.twee +0 -16
- package/test/Twine2HTML/Twine2HTMLCompiler/format.js +0 -9
- package/test/Twine2HTML/Twine2HTMLCompiler/missingStoryTitle.twee +0 -29
- package/test/Twine2HTML/Twine2HTMLCompiler/test11.html +0 -121
- package/test/Twine2HTML/Twine2HTMLCompiler/test2.html +0 -58
- package/test/Twine2HTML/Twine2HTMLCompiler/test3.html +0 -49
- package/test/Twine2HTML/Twine2HTMLCompiler/test4.html +0 -50
- package/test/Twine2HTML/Twine2HTMLCompiler/test6.html +0 -49
- package/test/Twine2HTML/Twine2HTMLParser/Example1.html +0 -53
- package/test/Twine2HTML/Twine2HTMLParser/Tags.html +0 -15
- package/test/Twine2HTML/Twine2HTMLParser/lyingStartnode.html +0 -15
- package/test/Twine2HTML/Twine2HTMLParser/lyingTagColors.html +0 -48
- package/test/Twine2HTML/Twine2HTMLParser/missingCreator.html +0 -11
- package/test/Twine2HTML/Twine2HTMLParser/missingCreatorVersion.html +0 -11
- package/test/Twine2HTML/Twine2HTMLParser/missingFormat.html +0 -11
- package/test/Twine2HTML/Twine2HTMLParser/missingFormatVersion.html +0 -11
- package/test/Twine2HTML/Twine2HTMLParser/missingIFID.html +0 -11
- package/test/Twine2HTML/Twine2HTMLParser/missingPassageTags.html +0 -15
- package/test/Twine2HTML/Twine2HTMLParser/missingPosition.html +0 -15
- package/test/Twine2HTML/Twine2HTMLParser/missingScript.html +0 -14
- package/test/Twine2HTML/Twine2HTMLParser/missingSize.html +0 -35
- package/test/Twine2HTML/Twine2HTMLParser/missingStartnode.html +0 -11
- package/test/Twine2HTML/Twine2HTMLParser/missingStyle.html +0 -14
- package/test/Twine2HTML/Twine2HTMLParser/missingZoom.html +0 -11
- package/test/Twine2HTML/Twine2HTMLParser/tagColors.html +0 -31
- package/test/Twine2HTML/Twine2HTMLParser/twineExample.html +0 -23
- package/test/Twine2HTML/Twine2HTMLParser/twineExample2.html +0 -15
- package/test/Twine2HTML/Twine2HTMLParser/twineExample3.html +0 -15
- package/test/Twine2HTML/Twine2HTMLParser/unescaping.html +0 -33
- package/test/Web/web-core-coverage.test.js +0 -175
- package/test/Web/web-core-global.test.js +0 -93
- package/test/Web/web-core.test.js +0 -156
- package/test/Web/web-exports.test.js +0 -136
- package/test/Web/web-twine1html.test.js +0 -105
- package/test/Web/web-twine2archive.test.js +0 -96
- package/test/Web/web-tws.test.js +0 -77
- package/test/Web/window.Extwee.test.js +0 -97
- package/tsconfig.json +0 -21
- package/webpack.config.js +0 -47
package/docs/README.md
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
<a name="readme-top"></a>
|
|
2
|
-
|
|
3
|
-
[](https://codecov.io/gh/videlais/extwee)
|
|
4
|
-
|
|
5
|
-
[](https://badge.fury.io/js/extwee)
|
|
6
|
-
|
|
7
|
-
[](https://opensource.org/licenses/MIT)
|
|
8
|
-
|
|
9
|
-
[](https://www.npmjs.com/package/extwee)
|
|
10
|
-
|
|
11
|
-
## Table of Contents
|
|
12
|
-
|
|
13
|
-
<ol>
|
|
14
|
-
<li><a href="#story-compilation">Story Compilation</a></li>
|
|
15
|
-
<li><a href="#format-support">Format Support</a></li>
|
|
16
|
-
<li><a href="#usage">Node and Web API</a></li>
|
|
17
|
-
<ol>
|
|
18
|
-
<li><a href="#objects">Objects</a></li>
|
|
19
|
-
<li><a href="#parsers">Parsers</a></li>
|
|
20
|
-
<li><a href="#compilers">Compilers</a></li>
|
|
21
|
-
</ol>
|
|
22
|
-
<li><a href="#web-build-imports">Web Build Imports</a></li>
|
|
23
|
-
<li><a href="#documentation">Documentation</a></li>
|
|
24
|
-
<li><a href="#command-line-usage">Command-Line Usage</a></li>
|
|
25
|
-
<li><a href="#config-file-usage">Config File Usage</a></li>
|
|
26
|
-
<li><a href="#escaping- meta-characters">Escaping Meta-Characters</a></li>
|
|
27
|
-
<li><a href="#license">License</a></li>
|
|
28
|
-
</ol>
|
|
29
|
-
|
|
30
|
-
## Story Compilation
|
|
31
|
-
|
|
32
|
-
The process of *story compilation* converts human-readable content, what is generally called a *story*, into a playable format such as HyperText Markup Language (HTML). The result is then presented as links or other visual, interactive elements for another party.
|
|
33
|
-
|
|
34
|
-
The term *compilation* is used because different parts of code are put together in a specific arrangement to enable later play. As part of Twine-compatible HTML, this means combining JavaScript code (generally a "story format") with story HTML data.
|
|
35
|
-
|
|
36
|
-
Extwee is **not** an authoring tool. It cannot be used to create story content. This data must be created using other tools or processes. Extwee can then *compile* the content with story format code to produce something playable.
|
|
37
|
-
|
|
38
|
-
Playable formats are the following and require external story formats[^1] to enable play:
|
|
39
|
-
|
|
40
|
-
- Twine 2 HTML
|
|
41
|
-
- Twine 1 HTML
|
|
42
|
-
|
|
43
|
-
More human-readable formats include:
|
|
44
|
-
|
|
45
|
-
- Twee 3[^2]
|
|
46
|
-
- Twine 2 JSON[^3]
|
|
47
|
-
|
|
48
|
-
From 2009 to 2015, Twine 1 supported a now [historical format named TWS](https://github.com/iftechfoundation/twine-specs/blob/master/twine-1-twsoutput.md). This was a binary format used for archival purposes. Extwee can read this format but does not support creating it because no other tools, including current versions of Twine, accept it as valid input.
|
|
49
|
-
|
|
50
|
-
Twine 2 supports exporting a collection of stories (known as a *library*) in the [Twine 2 Archive HTML format](https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-archive-spec.md). Extwee can also read and write this format, creating either a collection of stories from the data or writing a collection of internal objects to a file.
|
|
51
|
-
|
|
52
|
-
[^1]: Extwee does not include or publish story formats. These can be found in the [Story Format Archive (SFA)](https://github.com/videlais/story-formats-archive).
|
|
53
|
-
|
|
54
|
-
[^2]: Twee exists in three versions. The first existed between 2006 to 2009 and was part of Twine 1. The move to Twine 2 in 2009 dropped support and the story compilation tools [Twee2](https://dan-q.github.io/twee2/) and [Tweego](https://www.motoslave.net/tweego/) adopted their own extensions and modifications. Beginning in 2017, work was done to unite the different projects. This resulted in [Twee 3](https://github.com/iftechfoundation/twine-specs/blob/master/twee-3-specification.md) in March 2021.
|
|
55
|
-
|
|
56
|
-
[^3]: In October 2023, JavaScript Object Notation (JSON) was added as a supported community format for story compilation tools. Extwee is the first tool to support this format.
|
|
57
|
-
|
|
58
|
-
## Format Support
|
|
59
|
-
|
|
60
|
-
Extwee supports multiple historical and current Twine-compatible formats.
|
|
61
|
-
|
|
62
|
-
| Format | Input | Output |
|
|
63
|
-
|----------------------------------------------------------------------------------------------------------------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
64
|
-
| [Twine 1 HTML (2006 - 2015)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-1-htmloutput-doc.md ) | Yes | Partial support. Twine 1 HTML can be produced, but the `StorySettings` optional passage introduced in Twine 1.4.0 requires external libraries like jQuery not included with Extwee. |
|
|
65
|
-
| [Twine 1 TWS (2009 - 2015)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-1-twsoutput.md ) | Yes | Extwee does not support TWS (Python pickle) output because no current version of Twine or other story compilation tool produces this historical format. |
|
|
66
|
-
| [Twine 2 HTML (2015 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-htmloutput-spec.md ) | Yes | Yes |
|
|
67
|
-
| [Twine 2 Archive HTML (2015 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-archive-spec.md ) | Yes | Yes |
|
|
68
|
-
| [Twee 3 (2021 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twee-3-specification.md ) | Yes | Yes |
|
|
69
|
-
| [Twine 2 JSON (2023 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-jsonoutput-doc.md ) | Yes | Yes |
|
|
70
|
-
| [Twine 2 Story Format (2015 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-storyformats-spec.md ) | Yes | Yes |
|
|
71
|
-
|
|
72
|
-
**Note:** Round-trip translations can present problems because of required fields and properties per format. Some metadata may be added or removed based on the specification being followed.
|
|
73
|
-
|
|
74
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
75
|
-
|
|
76
|
-
## Node and Web API
|
|
77
|
-
|
|
78
|
-
The following objects and methods are available in Node.js or browser contexts.
|
|
79
|
-
|
|
80
|
-
**Note:** When used in a browser context, all objects and methods are part of the `window.Extwee` global.
|
|
81
|
-
|
|
82
|
-
### Objects
|
|
83
|
-
|
|
84
|
-
An object must be created using either the `new` keyword in JavaScript or as the result of parsing data.
|
|
85
|
-
|
|
86
|
-
- `StoryFormat`
|
|
87
|
-
- `Passage`
|
|
88
|
-
- `Story`
|
|
89
|
-
|
|
90
|
-
Story and Passage objects can generate multiple output formats: `toTwee()`, `toTwine1HTML()`, `toTwine2HTML()`, and `toJSON()`. Stories cannot be played in a browser without the corresponding compiler combining it with story format data.
|
|
91
|
-
|
|
92
|
-
The StoryFormat object supports `toString()` method of producing a tab-separated JSON output and `toJSON()` method of generating JSON output matching the Twine 2 Story Format Specification.
|
|
93
|
-
|
|
94
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
95
|
-
|
|
96
|
-
### Parsers
|
|
97
|
-
|
|
98
|
-
Translates output formats such as HTML, Twee, JSON, or JSONP into objects.
|
|
99
|
-
|
|
100
|
-
**Note:** Twine 1 story formats exist across multiple files (`header.html` and optional `code.js`). They cannot be parsed into a `StoryFormat` object.
|
|
101
|
-
|
|
102
|
-
- `parseTwee()`
|
|
103
|
-
- `parseJSON()`
|
|
104
|
-
- `parseStoryFormat()`
|
|
105
|
-
- `parseTwine1HTML()`
|
|
106
|
-
- `parseTwine2HTML()`
|
|
107
|
-
- `parseTwine2ArchiveHTML()`
|
|
108
|
-
|
|
109
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
110
|
-
|
|
111
|
-
### Compilers
|
|
112
|
-
|
|
113
|
-
Compiles story, story formats, or other data into an archive or playable format.
|
|
114
|
-
|
|
115
|
-
- `compileTwine2HTML()`
|
|
116
|
-
- `compileTwine1HTML()`
|
|
117
|
-
- `compileTwine2ArchiveHTML()`
|
|
118
|
-
- `compileStoryFormat()`
|
|
119
|
-
|
|
120
|
-
To create playable Twine 1 HTML, an `engine.js` file must be supplied. (See [Story Format Archive](https://github.com/videlais/story-formats-archive/tree/main/official/twine1/engine/1.4.2) for available Twine 1 `engine.js` file.)
|
|
121
|
-
|
|
122
|
-
Compilation of a story format adds the necessary function wrapper to convert the JSON output, via `toJSON()`, to JSONP.
|
|
123
|
-
|
|
124
|
-
### Support Functionality
|
|
125
|
-
|
|
126
|
-
Multiple Twine formats support using [an IFID](https://ifdb.org/help-ifid) to identify one work from another.
|
|
127
|
-
|
|
128
|
-
As part of its API, the Extwee method `generateIFID()` can be used to create a new IFID for a `Story` object or as part of other processes.
|
|
129
|
-
|
|
130
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
131
|
-
|
|
132
|
-
## Web Build Imports
|
|
133
|
-
|
|
134
|
-
For users who want to use pre-built, minified versions optimized for browser environments, Extwee provides several web build exports:
|
|
135
|
-
|
|
136
|
-
### Available Web Builds
|
|
137
|
-
|
|
138
|
-
- **Core Build**: `import Extwee from 'extwee/web'` - Complete functionality including parsers, compilers, and core utilities
|
|
139
|
-
- **Twine 1 HTML**: `import Extwee from 'extwee/web/twine1html'` - Specialized for Twine 1 HTML parsing and compilation
|
|
140
|
-
- **Twine 2 Archive HTML**: `import Extwee from 'extwee/web/twine2archive'` - Specialized for Twine 2 Archive HTML parsing and compilation
|
|
141
|
-
- **TWS Format**: `import Extwee from 'extwee/web/tws'` - Specialized for TWS (Twine 1 workspace) parsing
|
|
142
|
-
|
|
143
|
-
### Usage Examples
|
|
144
|
-
|
|
145
|
-
```javascript
|
|
146
|
-
// Use the full core build
|
|
147
|
-
import Extwee from 'extwee/web';
|
|
148
|
-
const story = new Extwee.Story();
|
|
149
|
-
const ifid = Extwee.generateIFID();
|
|
150
|
-
|
|
151
|
-
// Use a specialized build for smaller bundle size
|
|
152
|
-
import Extwee from 'extwee/web/twine1html';
|
|
153
|
-
const story = Extwee.parseTwine1HTML(htmlContent);
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
These web builds are UMD-compatible and can be used with module bundlers like webpack, or loaded directly in browsers. They are optimized and minified for production use.
|
|
157
|
-
|
|
158
|
-
**Note:** Web builds include their dependencies bundled, making them suitable for browser environments but larger than the Node.js imports which rely on external dependencies.
|
|
159
|
-
|
|
160
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
161
|
-
|
|
162
|
-
## Documentation
|
|
163
|
-
|
|
164
|
-
Extwee has [documentation hosted on GitHub Pages](https://videlais.github.io/extwee/#/).
|
|
165
|
-
|
|
166
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
167
|
-
|
|
168
|
-
## Command-Line Usage
|
|
169
|
-
|
|
170
|
-
Extwee supports a command-line interface for four general scenarios.
|
|
171
|
-
|
|
172
|
-
**Notes:** As of Extwee 2.2.5, short and long command-line option flags are separated. Short options use one hyphen followed by one character and all long options begin with two hyphens and a name as word.
|
|
173
|
-
|
|
174
|
-
### Compiling Twee 3 + Twine 2 Story Format into Twine 2 HTML
|
|
175
|
-
|
|
176
|
-
Compile Twee 3 + StoryFormat into Twine 2 HTML:
|
|
177
|
-
|
|
178
|
-
`extwee -c -i <tweeFile> -s <storyFormat> -o <Twine2HTML>`
|
|
179
|
-
|
|
180
|
-
### De-compiling Twine 2 HTML into Twee 3
|
|
181
|
-
|
|
182
|
-
De-compile Twine 2 HTML into Twee 3:
|
|
183
|
-
|
|
184
|
-
`extwee -d -i <twine2HTML> -o <outputTwee>`
|
|
185
|
-
|
|
186
|
-
### Compiling Twee 3 into Twine 1 HTML
|
|
187
|
-
|
|
188
|
-
Enabling Twine 1 mode requires using the `--twine1` long flag.
|
|
189
|
-
|
|
190
|
-
Because Twine 1 story formats can be split across files, compilation requires the "engine" from Twine 1 named `engine.js`, the name of the story format, and then its `header.html` template code and the optional but often included `code.js` file.
|
|
191
|
-
|
|
192
|
-
(Refer to the [Story Formats Archive](https://github.com/videlais/story-formats-archive) for access to historic `engine.js` and other files.)
|
|
193
|
-
|
|
194
|
-
`extwee --twine1 -c -i <tweeFile> -o <Twine1HTML> --engine <engineJS> --name <storyFormatName> --codejs <CodeJS> --header <header>`
|
|
195
|
-
|
|
196
|
-
### De-compiling Twine 1 HTML into Twee 3
|
|
197
|
-
|
|
198
|
-
Enabling Twine 1 mode requires using the `--twine1` flag.
|
|
199
|
-
|
|
200
|
-
`extwee --twine1 -d -i <twine1HTML> -o <outputTwee>`
|
|
201
|
-
|
|
202
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
203
|
-
|
|
204
|
-
## Config File Usage
|
|
205
|
-
|
|
206
|
-
When invoked from its command-line interface using `npx extwee`, it will look for a `extwee.config.json` file in the local directory. If found, and its fields are valid, processing will use the values found in the file.
|
|
207
|
-
|
|
208
|
-
Consult the possible options in its [dedicated file](extwee.config.md).
|
|
209
|
-
|
|
210
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
211
|
-
|
|
212
|
-
## Tree Shaking Support
|
|
213
|
-
|
|
214
|
-
For [advanced tree shaking](https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking) patterns, most formats are broke into `compile.js` and `parse.js` files exporting associated `compile()` and `parse()` functions.
|
|
215
|
-
|
|
216
|
-
When using the API, it is possible to only import a single function or object to produce smaller and potentially faster code in projects dependent on Extwee functionality.
|
|
217
|
-
|
|
218
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
|
219
|
-
|
|
220
|
-
## License
|
|
221
|
-
|
|
222
|
-
Distributed under the MIT License. See `LICENSE.txt` for more information.
|
|
223
|
-
|
|
224
|
-
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
package/docs/_sidebar.md
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
- Installation and General Usage
|
|
2
|
-
- [Using NPX (as part of workflow)](/install/npx.md)
|
|
3
|
-
- [Using NPM (via API)](/install/npm.md)
|
|
4
|
-
- Objects
|
|
5
|
-
- [Passage](/objects/passage.md)
|
|
6
|
-
- [Story](/objects/story.md)
|
|
7
|
-
- [Story Format](/objects/storyformat.md)
|
|
8
|
-
- Formats
|
|
9
|
-
- [Twee 3](/formats/twee.md)
|
|
10
|
-
- [Twine 2 HTML](/formats/twine2HTML.md)
|
|
11
|
-
- [Twine 2 JSON](/formats/json.md)
|
|
12
|
-
- [Twine 2 Archive HTML](/formats/twine2ArchiveHTML.md)
|
|
13
|
-
- [Twine 1 HTML](/formats/twine1HTML.md)
|
|
14
|
-
- [Twine 1 TWS](/formats/tws.md)
|
|
15
|
-
|
|
16
|
-
- Examples
|
|
17
|
-
- [Dynamically Generating Passages](/examples/dynamicPassages.md)
|
|
18
|
-
- [Converting Twine 2 JSON into Twee 3](/examples/jsonToTwee.md)
|
|
19
|
-
- [Converting Twine 1 TWS into Twee 3](/examples/twsToTwee.md)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Extwee=r():e.Extwee=r()}(this,(()=>(()=>{"use strict";var e={7:(e,r,t)=>{const s=t(908);e.exports=(e,r,t,o,a)=>{"string"==typeof t&&(a=o,o=t,t=void 0);try{return new s(e instanceof s?e.version:e,t).inc(r,o,a).version}catch(e){return null}}},32:(e,r,t)=>{const s=t(311),o=t(904),{ANY:a}=o,i=t(638),n=t(560),l=[new o(">=0.0.0-0")],c=[new o(">=0.0.0")],p=(e,r,t)=>{if(e===r)return!0;if(1===e.length&&e[0].semver===a){if(1===r.length&&r[0].semver===a)return!0;e=t.includePrerelease?l:c}if(1===r.length&&r[0].semver===a){if(t.includePrerelease)return!0;r=c}const s=new Set;let o,p,g,m,f,d,E;for(const r of e)">"===r.operator||">="===r.operator?o=u(o,r,t):"<"===r.operator||"<="===r.operator?p=h(p,r,t):s.add(r.semver);if(s.size>1)return null;if(o&&p){if(g=n(o.semver,p.semver,t),g>0)return null;if(0===g&&(">="!==o.operator||"<="!==p.operator))return null}for(const e of s){if(o&&!i(e,String(o),t))return null;if(p&&!i(e,String(p),t))return null;for(const s of r)if(!i(e,String(s),t))return!1;return!0}let w=!(!p||t.includePrerelease||!p.semver.prerelease.length)&&p.semver,y=!(!o||t.includePrerelease||!o.semver.prerelease.length)&&o.semver;w&&1===w.prerelease.length&&"<"===p.operator&&0===w.prerelease[0]&&(w=!1);for(const e of r){if(E=E||">"===e.operator||">="===e.operator,d=d||"<"===e.operator||"<="===e.operator,o)if(y&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===y.major&&e.semver.minor===y.minor&&e.semver.patch===y.patch&&(y=!1),">"===e.operator||">="===e.operator){if(m=u(o,e,t),m===e&&m!==o)return!1}else if(">="===o.operator&&!i(o.semver,String(e),t))return!1;if(p)if(w&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===w.major&&e.semver.minor===w.minor&&e.semver.patch===w.patch&&(w=!1),"<"===e.operator||"<="===e.operator){if(f=h(p,e,t),f===e&&f!==p)return!1}else if("<="===p.operator&&!i(p.semver,String(e),t))return!1;if(!e.operator&&(p||o)&&0!==g)return!1}return!(o&&d&&!p&&0!==g||p&&E&&!o&&0!==g||y||w)},u=(e,r,t)=>{if(!e)return r;const s=n(e.semver,r.semver,t);return s>0?e:s<0||">"===r.operator&&">="===e.operator?r:e},h=(e,r,t)=>{if(!e)return r;const s=n(e.semver,r.semver,t);return s<0?e:s>0||"<"===r.operator&&"<="===e.operator?r:e};e.exports=(e,r,t={})=>{if(e===r)return!0;e=new s(e,t),r=new s(r,t);let o=!1;e:for(const s of e.set){for(const e of r.set){const r=p(s,e,t);if(o=o||null!==r,r)continue e}if(o)return!1}return!0}},59:(e,r,t)=>{const s=t(560);e.exports=(e,r,t)=>s(e,r,t)<0},75:(e,r,t)=>{const s=t(908),o=t(904),{ANY:a}=o,i=t(311),n=t(638),l=t(580),c=t(59),p=t(200),u=t(89);e.exports=(e,r,t,h)=>{let g,m,f,d,E;switch(e=new s(e,h),r=new i(r,h),t){case">":g=l,m=p,f=c,d=">",E=">=";break;case"<":g=c,m=u,f=l,d="<",E="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(n(e,r,h))return!1;for(let t=0;t<r.set.length;++t){const s=r.set[t];let i=null,n=null;if(s.forEach((e=>{e.semver===a&&(e=new o(">=0.0.0")),i=i||e,n=n||e,g(e.semver,i.semver,h)?i=e:f(e.semver,n.semver,h)&&(n=e)})),i.operator===d||i.operator===E)return!1;if((!n.operator||n.operator===d)&&m(e,n.semver))return!1;if(n.operator===E&&f(e,n.semver))return!1}return!0}},89:(e,r,t)=>{const s=t(560);e.exports=(e,r,t)=>s(e,r,t)>=0},111:(e,r,t)=>{const s=t(641),o=t(999),a=t(580),i=t(89),n=t(59),l=t(200);e.exports=(e,r,t,c)=>{switch(r){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof t&&(t=t.version),e===t;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof t&&(t=t.version),e!==t;case"":case"=":case"==":return s(e,t,c);case"!=":return o(e,t,c);case">":return a(e,t,c);case">=":return i(e,t,c);case"<":return n(e,t,c);case"<=":return l(e,t,c);default:throw new TypeError(`Invalid operator: ${r}`)}}},123:e=>{const r=/^[0-9]+$/,t=(e,t)=>{if("number"==typeof e&&"number"==typeof t)return e===t?0:e<t?-1:1;const s=r.test(e),o=r.test(t);return s&&o&&(e=+e,t=+t),e===t?0:s&&!o?-1:o&&!s?1:e<t?-1:1};e.exports={compareIdentifiers:t,rcompareIdentifiers:(e,r)=>t(r,e)}},144:(e,r,t)=>{const s=t(908);e.exports=(e,r,t=!1)=>{if(e instanceof s)return e;try{return new s(e,r)}catch(e){if(!t)return null;throw e}}},170:(e,r,t)=>{const s=t(908),o=t(144),{safeRe:a,t:i}=t(718);e.exports=(e,r)=>{if(e instanceof s)return e;if("number"==typeof e&&(e=String(e)),"string"!=typeof e)return null;let t=null;if((r=r||{}).rtl){const s=r.includePrerelease?a[i.COERCERTLFULL]:a[i.COERCERTL];let o;for(;(o=s.exec(e))&&(!t||t.index+t[0].length!==e.length);)t&&o.index+o[0].length===t.index+t[0].length||(t=o),s.lastIndex=o.index+o[1].length+o[2].length;s.lastIndex=-1}else t=e.match(r.includePrerelease?a[i.COERCEFULL]:a[i.COERCE]);if(null===t)return null;const n=t[2],l=t[3]||"0",c=t[4]||"0",p=r.includePrerelease&&t[5]?`-${t[5]}`:"",u=r.includePrerelease&&t[6]?`+${t[6]}`:"";return o(`${n}.${l}.${c}${p}${u}`,r)}},200:(e,r,t)=>{const s=t(560);e.exports=(e,r,t)=>s(e,r,t)<=0},254:(e,r,t)=>{const s=t(908);e.exports=(e,r)=>new s(e,r).minor},261:(e,r,t)=>{const s=t(908),o=t(311),a=t(580);e.exports=(e,r)=>{e=new o(e,r);let t=new s("0.0.0");if(e.test(t))return t;if(t=new s("0.0.0-0"),e.test(t))return t;t=null;for(let r=0;r<e.set.length;++r){const o=e.set[r];let i=null;o.forEach((e=>{const r=new s(e.semver.version);switch(e.operator){case">":0===r.prerelease.length?r.patch++:r.prerelease.push(0),r.raw=r.format();case"":case">=":i&&!a(r,i)||(i=r);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}})),!i||t&&!a(t,i)||(t=i)}return t&&e.test(t)?t:null}},270:(e,r,t)=>{const s=t(908),o=t(311);e.exports=(e,r,t)=>{let a=null,i=null,n=null;try{n=new o(r,t)}catch(e){return null}return e.forEach((e=>{n.test(e)&&(a&&1!==i.compare(e)||(a=e,i=new s(a,t)))})),a}},272:e=>{const r="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};e.exports=r},277:(e,r,t)=>{const s=t(909);e.exports=(e,r)=>e.sort(((e,t)=>s(t,e,r)))},311:(e,r,t)=>{const s=/\s+/g;class o{constructor(e,r){if(r=i(r),e instanceof o)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new o(e.raw,r);if(e instanceof n)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(s," "),this.set=this.raw.split("||").map((e=>this.parseRange(e.trim()))).filter((e=>e.length)),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const e=this.set[0];if(this.set=this.set.filter((e=>!E(e[0]))),0===this.set.length)this.set=[e];else if(this.set.length>1)for(const e of this.set)if(1===e.length&&w(e[0])){this.set=[e];break}}this.formatted=void 0}get range(){if(void 0===this.formatted){this.formatted="";for(let e=0;e<this.set.length;e++){e>0&&(this.formatted+="||");const r=this.set[e];for(let e=0;e<r.length;e++)e>0&&(this.formatted+=" "),this.formatted+=r[e].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){const r=((this.options.includePrerelease&&f)|(this.options.loose&&d))+":"+e,t=a.get(r);if(t)return t;const s=this.options.loose,o=s?p[u.HYPHENRANGELOOSE]:p[u.HYPHENRANGE];e=e.replace(o,N(this.options.includePrerelease)),l("hyphen replace",e),e=e.replace(p[u.COMPARATORTRIM],h),l("comparator trim",e),e=e.replace(p[u.TILDETRIM],g),l("tilde trim",e),e=e.replace(p[u.CARETTRIM],m),l("caret trim",e);let i=e.split(" ").map((e=>b(e,this.options))).join(" ").split(/\s+/).map((e=>R(e,this.options)));s&&(i=i.filter((e=>(l("loose invalid filter",e,this.options),!!e.match(p[u.COMPARATORLOOSE]))))),l("range list",i);const c=new Map,w=i.map((e=>new n(e,this.options)));for(const e of w){if(E(e))return[e];c.set(e.value,e)}c.size>1&&c.has("")&&c.delete("");const y=[...c.values()];return a.set(r,y),y}intersects(e,r){if(!(e instanceof o))throw new TypeError("a Range is required");return this.set.some((t=>y(t,r)&&e.set.some((e=>y(e,r)&&t.every((t=>e.every((e=>t.intersects(e,r)))))))))}test(e){if(!e)return!1;if("string"==typeof e)try{e=new c(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if($(this.set[r],e,this.options))return!0;return!1}}e.exports=o;const a=new(t(794)),i=t(587),n=t(904),l=t(272),c=t(908),{safeRe:p,t:u,comparatorTrimReplace:h,tildeTrimReplace:g,caretTrimReplace:m}=t(718),{FLAG_INCLUDE_PRERELEASE:f,FLAG_LOOSE:d}=t(874),E=e=>"<0.0.0-0"===e.value,w=e=>""===e.value,y=(e,r)=>{let t=!0;const s=e.slice();let o=s.pop();for(;t&&s.length;)t=s.every((e=>o.intersects(e,r))),o=s.pop();return t},b=(e,r)=>(e=e.replace(p[u.BUILD],""),l("comp",e,r),e=I(e,r),l("caret",e),e=O(e,r),l("tildes",e),e=L(e,r),l("xrange",e),e=x(e,r),l("stars",e),e),v=e=>!e||"x"===e.toLowerCase()||"*"===e,O=(e,r)=>e.trim().split(/\s+/).map((e=>S(e,r))).join(" "),S=(e,r)=>{const t=r.loose?p[u.TILDELOOSE]:p[u.TILDE];return e.replace(t,((r,t,s,o,a)=>{let i;return l("tilde",e,r,t,s,o,a),v(t)?i="":v(s)?i=`>=${t}.0.0 <${+t+1}.0.0-0`:v(o)?i=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:a?(l("replaceTilde pr",a),i=`>=${t}.${s}.${o}-${a} <${t}.${+s+1}.0-0`):i=`>=${t}.${s}.${o} <${t}.${+s+1}.0-0`,l("tilde return",i),i}))},I=(e,r)=>e.trim().split(/\s+/).map((e=>A(e,r))).join(" "),A=(e,r)=>{l("caret",e,r);const t=r.loose?p[u.CARETLOOSE]:p[u.CARET],s=r.includePrerelease?"-0":"";return e.replace(t,((r,t,o,a,i)=>{let n;return l("caret",e,r,t,o,a,i),v(t)?n="":v(o)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:v(a)?n="0"===t?`>=${t}.${o}.0${s} <${t}.${+o+1}.0-0`:`>=${t}.${o}.0${s} <${+t+1}.0.0-0`:i?(l("replaceCaret pr",i),n="0"===t?"0"===o?`>=${t}.${o}.${a}-${i} <${t}.${o}.${+a+1}-0`:`>=${t}.${o}.${a}-${i} <${t}.${+o+1}.0-0`:`>=${t}.${o}.${a}-${i} <${+t+1}.0.0-0`):(l("no pr"),n="0"===t?"0"===o?`>=${t}.${o}.${a}${s} <${t}.${o}.${+a+1}-0`:`>=${t}.${o}.${a}${s} <${t}.${+o+1}.0-0`:`>=${t}.${o}.${a} <${+t+1}.0.0-0`),l("caret return",n),n}))},L=(e,r)=>(l("replaceXRanges",e,r),e.split(/\s+/).map((e=>T(e,r))).join(" ")),T=(e,r)=>{e=e.trim();const t=r.loose?p[u.XRANGELOOSE]:p[u.XRANGE];return e.replace(t,((t,s,o,a,i,n)=>{l("xRange",e,t,s,o,a,i,n);const c=v(o),p=c||v(a),u=p||v(i),h=u;return"="===s&&h&&(s=""),n=r.includePrerelease?"-0":"",c?t=">"===s||"<"===s?"<0.0.0-0":"*":s&&h?(p&&(a=0),i=0,">"===s?(s=">=",p?(o=+o+1,a=0,i=0):(a=+a+1,i=0)):"<="===s&&(s="<",p?o=+o+1:a=+a+1),"<"===s&&(n="-0"),t=`${s+o}.${a}.${i}${n}`):p?t=`>=${o}.0.0${n} <${+o+1}.0.0-0`:u&&(t=`>=${o}.${a}.0${n} <${o}.${+a+1}.0-0`),l("xRange return",t),t}))},x=(e,r)=>(l("replaceStars",e,r),e.trim().replace(p[u.STAR],"")),R=(e,r)=>(l("replaceGTE0",e,r),e.trim().replace(p[r.includePrerelease?u.GTE0PRE:u.GTE0],"")),N=e=>(r,t,s,o,a,i,n,l,c,p,u,h)=>`${t=v(s)?"":v(o)?`>=${s}.0.0${e?"-0":""}`:v(a)?`>=${s}.${o}.0${e?"-0":""}`:i?`>=${t}`:`>=${t}${e?"-0":""}`} ${l=v(c)?"":v(p)?`<${+c+1}.0.0-0`:v(u)?`<${c}.${+p+1}.0-0`:h?`<=${c}.${p}.${u}-${h}`:e?`<${c}.${p}.${+u+1}-0`:`<=${l}`}`.trim(),$=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(l(e[t].semver),e[t].semver!==n.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0}},342:(e,r,t)=>{const s=t(75);e.exports=(e,r,t)=>s(e,r,"<",t)},414:(e,r,t)=>{const s=t(144);e.exports=(e,r)=>{const t=s(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}},493:(e,r,t)=>{const s=t(908);e.exports=(e,r)=>new s(e,r).patch},525:(e,r,t)=>{const s=t(638),o=t(560);e.exports=(e,r,t)=>{const a=[];let i=null,n=null;const l=e.sort(((e,r)=>o(e,r,t)));for(const e of l)s(e,r,t)?(n=e,i||(i=e)):(n&&a.push([i,n]),n=null,i=null);i&&a.push([i,null]);const c=[];for(const[e,r]of a)e===r?c.push(e):r||e!==l[0]?r?e===l[0]?c.push(`<=${r}`):c.push(`${e} - ${r}`):c.push(`>=${e}`):c.push("*");const p=c.join(" || "),u="string"==typeof r.raw?r.raw:String(r);return p.length<u.length?p:r}},560:(e,r,t)=>{const s=t(908);e.exports=(e,r,t)=>new s(e,t).compare(new s(r,t))},571:(e,r,t)=>{const s=t(75);e.exports=(e,r,t)=>s(e,r,">",t)},580:(e,r,t)=>{const s=t(560);e.exports=(e,r,t)=>s(e,r,t)>0},587:e=>{const r=Object.freeze({loose:!0}),t=Object.freeze({});e.exports=e=>e?"object"!=typeof e?r:e:t},589:(e,r,t)=>{const s=t(718),o=t(874),a=t(908),i=t(123),n=t(144),l=t(953),c=t(414),p=t(7),u=t(832),h=t(938),g=t(254),m=t(493),f=t(729),d=t(560),E=t(970),w=t(763),y=t(909),b=t(927),v=t(277),O=t(580),S=t(59),I=t(641),A=t(999),L=t(89),T=t(200),x=t(111),R=t(170),N=t(904),$=t(311),D=t(638),q=t(631),P=t(628),F=t(270),C=t(261),_=t(636),j=t(75),U=t(571),k=t(342),V=t(780),M=t(525),G=t(32);e.exports={parse:n,valid:l,clean:c,inc:p,diff:u,major:h,minor:g,patch:m,prerelease:f,compare:d,rcompare:E,compareLoose:w,compareBuild:y,sort:b,rsort:v,gt:O,lt:S,eq:I,neq:A,gte:L,lte:T,cmp:x,coerce:R,Comparator:N,Range:$,satisfies:D,toComparators:q,maxSatisfying:P,minSatisfying:F,minVersion:C,validRange:_,outside:j,gtr:U,ltr:k,intersects:V,simplifyRange:M,subset:G,SemVer:a,re:s.re,src:s.src,tokens:s.t,SEMVER_SPEC_VERSION:o.SEMVER_SPEC_VERSION,RELEASE_TYPES:o.RELEASE_TYPES,compareIdentifiers:i.compareIdentifiers,rcompareIdentifiers:i.rcompareIdentifiers}},628:(e,r,t)=>{const s=t(908),o=t(311);e.exports=(e,r,t)=>{let a=null,i=null,n=null;try{n=new o(r,t)}catch(e){return null}return e.forEach((e=>{n.test(e)&&(a&&-1!==i.compare(e)||(a=e,i=new s(a,t)))})),a}},631:(e,r,t)=>{const s=t(311);e.exports=(e,r)=>new s(e,r).set.map((e=>e.map((e=>e.value)).join(" ").trim().split(" ")))},636:(e,r,t)=>{const s=t(311);e.exports=(e,r)=>{try{return new s(e,r).range||"*"}catch(e){return null}}},638:(e,r,t)=>{const s=t(311);e.exports=(e,r,t)=>{try{r=new s(r,t)}catch(e){return!1}return r.test(e)}},641:(e,r,t)=>{const s=t(560);e.exports=(e,r,t)=>0===s(e,r,t)},718:(e,r,t)=>{const{MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:o,MAX_LENGTH:a}=t(874),i=t(272),n=(r=e.exports={}).re=[],l=r.safeRe=[],c=r.src=[],p=r.safeSrc=[],u=r.t={};let h=0;const g="[a-zA-Z0-9-]",m=[["\\s",1],["\\d",a],[g,o]],f=(e,r,t)=>{const s=(e=>{for(const[r,t]of m)e=e.split(`${r}*`).join(`${r}{0,${t}}`).split(`${r}+`).join(`${r}{1,${t}}`);return e})(r),o=h++;i(e,o,r),u[e]=o,c[o]=r,p[o]=s,n[o]=new RegExp(r,t?"g":void 0),l[o]=new RegExp(s,t?"g":void 0)};f("NUMERICIDENTIFIER","0|[1-9]\\d*"),f("NUMERICIDENTIFIERLOOSE","\\d+"),f("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${g}*`),f("MAINVERSION",`(${c[u.NUMERICIDENTIFIER]})\\.(${c[u.NUMERICIDENTIFIER]})\\.(${c[u.NUMERICIDENTIFIER]})`),f("MAINVERSIONLOOSE",`(${c[u.NUMERICIDENTIFIERLOOSE]})\\.(${c[u.NUMERICIDENTIFIERLOOSE]})\\.(${c[u.NUMERICIDENTIFIERLOOSE]})`),f("PRERELEASEIDENTIFIER",`(?:${c[u.NONNUMERICIDENTIFIER]}|${c[u.NUMERICIDENTIFIER]})`),f("PRERELEASEIDENTIFIERLOOSE",`(?:${c[u.NONNUMERICIDENTIFIER]}|${c[u.NUMERICIDENTIFIERLOOSE]})`),f("PRERELEASE",`(?:-(${c[u.PRERELEASEIDENTIFIER]}(?:\\.${c[u.PRERELEASEIDENTIFIER]})*))`),f("PRERELEASELOOSE",`(?:-?(${c[u.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${c[u.PRERELEASEIDENTIFIERLOOSE]})*))`),f("BUILDIDENTIFIER",`${g}+`),f("BUILD",`(?:\\+(${c[u.BUILDIDENTIFIER]}(?:\\.${c[u.BUILDIDENTIFIER]})*))`),f("FULLPLAIN",`v?${c[u.MAINVERSION]}${c[u.PRERELEASE]}?${c[u.BUILD]}?`),f("FULL",`^${c[u.FULLPLAIN]}$`),f("LOOSEPLAIN",`[v=\\s]*${c[u.MAINVERSIONLOOSE]}${c[u.PRERELEASELOOSE]}?${c[u.BUILD]}?`),f("LOOSE",`^${c[u.LOOSEPLAIN]}$`),f("GTLT","((?:<|>)?=?)"),f("XRANGEIDENTIFIERLOOSE",`${c[u.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),f("XRANGEIDENTIFIER",`${c[u.NUMERICIDENTIFIER]}|x|X|\\*`),f("XRANGEPLAIN",`[v=\\s]*(${c[u.XRANGEIDENTIFIER]})(?:\\.(${c[u.XRANGEIDENTIFIER]})(?:\\.(${c[u.XRANGEIDENTIFIER]})(?:${c[u.PRERELEASE]})?${c[u.BUILD]}?)?)?`),f("XRANGEPLAINLOOSE",`[v=\\s]*(${c[u.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[u.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[u.XRANGEIDENTIFIERLOOSE]})(?:${c[u.PRERELEASELOOSE]})?${c[u.BUILD]}?)?)?`),f("XRANGE",`^${c[u.GTLT]}\\s*${c[u.XRANGEPLAIN]}$`),f("XRANGELOOSE",`^${c[u.GTLT]}\\s*${c[u.XRANGEPLAINLOOSE]}$`),f("COERCEPLAIN",`(^|[^\\d])(\\d{1,${s}})(?:\\.(\\d{1,${s}}))?(?:\\.(\\d{1,${s}}))?`),f("COERCE",`${c[u.COERCEPLAIN]}(?:$|[^\\d])`),f("COERCEFULL",c[u.COERCEPLAIN]+`(?:${c[u.PRERELEASE]})?`+`(?:${c[u.BUILD]})?(?:$|[^\\d])`),f("COERCERTL",c[u.COERCE],!0),f("COERCERTLFULL",c[u.COERCEFULL],!0),f("LONETILDE","(?:~>?)"),f("TILDETRIM",`(\\s*)${c[u.LONETILDE]}\\s+`,!0),r.tildeTrimReplace="$1~",f("TILDE",`^${c[u.LONETILDE]}${c[u.XRANGEPLAIN]}$`),f("TILDELOOSE",`^${c[u.LONETILDE]}${c[u.XRANGEPLAINLOOSE]}$`),f("LONECARET","(?:\\^)"),f("CARETTRIM",`(\\s*)${c[u.LONECARET]}\\s+`,!0),r.caretTrimReplace="$1^",f("CARET",`^${c[u.LONECARET]}${c[u.XRANGEPLAIN]}$`),f("CARETLOOSE",`^${c[u.LONECARET]}${c[u.XRANGEPLAINLOOSE]}$`),f("COMPARATORLOOSE",`^${c[u.GTLT]}\\s*(${c[u.LOOSEPLAIN]})$|^$`),f("COMPARATOR",`^${c[u.GTLT]}\\s*(${c[u.FULLPLAIN]})$|^$`),f("COMPARATORTRIM",`(\\s*)${c[u.GTLT]}\\s*(${c[u.LOOSEPLAIN]}|${c[u.XRANGEPLAIN]})`,!0),r.comparatorTrimReplace="$1$2$3",f("HYPHENRANGE",`^\\s*(${c[u.XRANGEPLAIN]})\\s+-\\s+(${c[u.XRANGEPLAIN]})\\s*$`),f("HYPHENRANGELOOSE",`^\\s*(${c[u.XRANGEPLAINLOOSE]})\\s+-\\s+(${c[u.XRANGEPLAINLOOSE]})\\s*$`),f("STAR","(<|>)?=?\\s*\\*"),f("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),f("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")},729:(e,r,t)=>{const s=t(144);e.exports=(e,r)=>{const t=s(e,r);return t&&t.prerelease.length?t.prerelease:null}},763:(e,r,t)=>{const s=t(560);e.exports=(e,r)=>s(e,r,!0)},780:(e,r,t)=>{const s=t(311);e.exports=(e,r,t)=>(e=new s(e,t),r=new s(r,t),e.intersects(r,t))},794:e=>{e.exports=class{constructor(){this.max=1e3,this.map=new Map}get(e){const r=this.map.get(e);return void 0===r?void 0:(this.map.delete(e),this.map.set(e,r),r)}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&void 0!==r){if(this.map.size>=this.max){const e=this.map.keys().next().value;this.delete(e)}this.map.set(e,r)}return this}}},832:(e,r,t)=>{const s=t(144);e.exports=(e,r)=>{const t=s(e,null,!0),o=s(r,null,!0),a=t.compare(o);if(0===a)return null;const i=a>0,n=i?t:o,l=i?o:t,c=!!n.prerelease.length;if(l.prerelease.length&&!c){if(!l.patch&&!l.minor)return"major";if(0===l.compareMain(n))return l.minor&&!l.patch?"minor":"patch"}const p=c?"pre":"";return t.major!==o.major?p+"major":t.minor!==o.minor?p+"minor":t.patch!==o.patch?p+"patch":"prerelease"}},874:e=>{const r=Number.MAX_SAFE_INTEGER||9007199254740991;e.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:r,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}},904:(e,r,t)=>{const s=Symbol("SemVer ANY");class o{static get ANY(){return s}constructor(e,r){if(r=a(r),e instanceof o){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),c("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===s?this.value="":this.value=this.operator+this.semver.version,c("comp",this)}parse(e){const r=this.options.loose?i[n.COMPARATORLOOSE]:i[n.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:"","="===this.operator&&(this.operator=""),t[2]?this.semver=new p(t[2],this.options.loose):this.semver=s}toString(){return this.value}test(e){if(c("Comparator.test",e,this.options.loose),this.semver===s||e===s)return!0;if("string"==typeof e)try{e=new p(e,this.options)}catch(e){return!1}return l(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof o))throw new TypeError("a Comparator is required");return""===this.operator?""===this.value||new u(e.value,r).test(this.value):""===e.operator?""===e.value||new u(this.value,r).test(e.semver):!((r=a(r)).includePrerelease&&("<0.0.0-0"===this.value||"<0.0.0-0"===e.value)||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))||(!this.operator.startsWith(">")||!e.operator.startsWith(">"))&&(!this.operator.startsWith("<")||!e.operator.startsWith("<"))&&(this.semver.version!==e.semver.version||!this.operator.includes("=")||!e.operator.includes("="))&&!(l(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<"))&&!(l(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}}e.exports=o;const a=t(587),{safeRe:i,t:n}=t(718),l=t(111),c=t(272),p=t(908),u=t(311)},908:(e,r,t)=>{const s=t(272),{MAX_LENGTH:o,MAX_SAFE_INTEGER:a}=t(874),{safeRe:i,t:n}=t(718),l=t(587),{compareIdentifiers:c}=t(123);class p{constructor(e,r){if(r=l(r),e instanceof p){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if("string"!=typeof e)throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>o)throw new TypeError(`version is longer than ${o} characters`);s("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?i[n.LOOSE]:i[n.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>a||this.major<0)throw new TypeError("Invalid major version");if(this.minor>a||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>a||this.patch<0)throw new TypeError("Invalid patch version");t[4]?this.prerelease=t[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<a)return r}return e})):this.prerelease=[],this.build=t[5]?t[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(s("SemVer.compare",this.version,this.options,e),!(e instanceof p)){if("string"==typeof e&&e===this.version)return 0;e=new p(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof p||(e=new p(e,this.options)),this.major<e.major?-1:this.major>e.major?1:this.minor<e.minor?-1:this.minor>e.minor?1:this.patch<e.patch?-1:this.patch>e.patch?1:0}comparePre(e){if(e instanceof p||(e=new p(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{const t=this.prerelease[r],o=e.prerelease[r];if(s("prerelease compare",r,t,o),void 0===t&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===t)return-1;if(t!==o)return c(t,o)}while(++r)}compareBuild(e){e instanceof p||(e=new p(e,this.options));let r=0;do{const t=this.build[r],o=e.build[r];if(s("build compare",r,t,o),void 0===t&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===t)return-1;if(t!==o)return c(t,o)}while(++r)}inc(e,r,t){if(e.startsWith("pre")){if(!r&&!1===t)throw new Error("invalid increment argument: identifier is empty");if(r){const e=`-${r}`.match(this.options.loose?i[n.PRERELEASELOOSE]:i[n.PRERELEASE]);if(!e||e[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,t),this.inc("pre",r,t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",r,t),this.inc("pre",r,t);break;case"release":if(0===this.prerelease.length)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":{const e=Number(t)?1:0;if(0===this.prerelease.length)this.prerelease=[e];else{let s=this.prerelease.length;for(;--s>=0;)"number"==typeof this.prerelease[s]&&(this.prerelease[s]++,s=-2);if(-1===s){if(r===this.prerelease.join(".")&&!1===t)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(e)}}if(r){let s=[r,e];!1===t&&(s=[r]),0===c(this.prerelease[0],r)?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}e.exports=p},909:(e,r,t)=>{const s=t(908);e.exports=(e,r,t)=>{const o=new s(e,t),a=new s(r,t);return o.compare(a)||o.compareBuild(a)}},927:(e,r,t)=>{const s=t(909);e.exports=(e,r)=>e.sort(((e,t)=>s(e,t,r)))},938:(e,r,t)=>{const s=t(908);e.exports=(e,r)=>new s(e,r).major},953:(e,r,t)=>{const s=t(144);e.exports=(e,r)=>{const t=s(e,r);return t?t.version:null}},970:(e,r,t)=>{const s=t(560);e.exports=(e,r,t)=>s(r,e,t)},999:(e,r,t)=>{const s=t(560);e.exports=(e,r,t)=>0!==s(e,r,t)}},r={};function t(s){var o=r[s];if(void 0!==o)return o.exports;var a=r[s]={exports:{}};return e[s](a,a.exports,t),a.exports}t.d=(e,r)=>{for(var s in r)t.o(r,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:r[s]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r);var s={};t.d(s,{default:()=>q});var o=function(){return o=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},o.apply(this,arguments)};function a(e,r){for(var t={},s={},a=e.split("~~"),i=!1,n=0;a.length>n;n++){for(var l=a[n].split("~"),c=0;c<l.length;c+=2){var p=l[c],u=l[c+1],h="&"+p+";";t[h]=u,i&&(t["&"+p]=u),s[u]=h}i=!0}return r?{entities:o(o({},t),r.entities),characters:o(o({},s),r.characters)}:{entities:t,characters:s}}var i={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/∉|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/·|℗|⋇|⪧|⩺|⋗|⦕|⩼|⪆|⥸|⋗|⋛|⪌|≷|≳|⪦|⩹|⋖|⋋|⋉|⥶|⩻|⦖|◃|⊴|◂|∉|⋹̸|⋵̸|∉|⋷|⋶|∌|∌|⋾|⋽|∥|⊠|⨱|⨰|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},n={};n.xml=a("lt~<~gt~>~quot~\"~apos~'~amp~&"),n.html4=a("apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~~zwj~~lrm~~rlm~~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~\"~amp~&~lt~<~gt~>"),n.html5=a('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~~InvisibleTimes~~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~~NegativeThickSpace~~NegativeThinSpace~~NegativeVeryThinSpace~~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~Nfr~𝔑~NoBreak~~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~\t~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~ ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',n.html4);var l={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},c=String.fromCodePoint||function(e){return String.fromCharCode(Math.floor((e-65536)/1024)+55296,(e-65536)%1024+56320)},p=String.prototype.codePointAt?function(e,r){return e.codePointAt(r)}:function(e,r){return 1024*(e.charCodeAt(r)-55296)+e.charCodeAt(r+1)-56320+65536},u=function(){return u=Object.assign||function(e){for(var r,t=1,s=arguments.length;t<s;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},u.apply(this,arguments)},h=u(u({},n),{all:n.html5}),g={specialChars:/[<>'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g},m={mode:"specialChars",level:"all",numeric:"decimal"};function f(e,r){var t=void 0===r?m:r,s=t.mode,o=void 0===s?"specialChars":s,a=t.numeric,i=void 0===a?"decimal":a,n=t.level;if(!e)return"";var l=g[o],c=h[void 0===n?"all":n].characters,u="hexadecimal"===i;return String.prototype.replace.call(e,l,(function(e){var r=c[e];if(!r){var t=e.length>1?p(e,0):e.charCodeAt(0);r=(u?"&#x"+t.toString(16):"&#"+t)+";"}return r}))}var d={scope:"body",level:"all"},E=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,w=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,y={xml:{strict:E,attribute:w,body:i.xml},html4:{strict:E,attribute:w,body:i.html4},html5:{strict:E,attribute:w,body:i.html5}},b=u(u({},y),{all:y.html5}),v=String.fromCharCode,O=v(65533);class S{#e="";#r=[];#t={};#s="";constructor(e="",r="",t=[],s={}){this.name=e,this.tags=t,this.metadata=s,this.text=r}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Name must be a String!");this.#e=e}get tags(){return this.#r}set tags(e){if(!Array.isArray(e))throw new Error("Tags must be an array!");this.#r=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Metadata should be an object literal!");this.#t=e}get text(){return this.#s}set text(e){if("string"!=typeof e)throw new Error("Text should be a String!");this.#s=e}toTwee(){let e="";e+=`:: ${T(this.name)}`,this.tags.length>0&&(e+=` [${this.tags.map((e=>T(e))).join(" ")}]`),Object.keys(this.metadata).length>0&&(e+=` ${JSON.stringify(this.metadata)}`);const r=this.text.split("\n");for(let e=0;e<r.length;e++)r[e].startsWith("::")&&(r[e]=`\\${r[e]}`);return e+=`\n${r.join("\n")}\n\n`,e}toJSON(){const e={name:this.name,tags:this.tags,metadata:this.metadata,text:this.text};return JSON.stringify(e)}toTwine2HTML(e=1){let r="\t<tw-passagedata";return r+=` pid="${e}"`,r+=` name="${f(this.name)}"`,r+=` tags="${f(this.#r.join(" "))}" `,Object.prototype.hasOwnProperty.call(this.#t,"position")&&(r+=` position="${this.#t.position}" `),Object.prototype.hasOwnProperty.call(this.#t,"size")&&(r+=`size="${this.#t.size}" `),r+=`>${this.text}</tw-passagedata>\n`,r}toTwine1HTML(){let e="\t<div";return e+=` tiddler="${f(this.name)}"`,e+=` tags="${f(this.#r.join(" "))}" `,e+=' modifier="extwee"',Object.prototype.hasOwnProperty.call(this.#t,"position")?e+=` twine-position="${this.#t.position}"`:e+=' twine-position="10,10"',e+=`>${this.#s}</div>`,e}}function I(){return crypto.randomUUID().toUpperCase()}class A{#e="Untitled Story";#o="";#a="";#i="";#n="";#l=1;#c=[];#p="";#u="";#t=null;#h={};#g="";#m="";constructor(e="Untitled Story"){this.name=e,this.#p="extwee",this.#u="2.3.9",this.#t={}}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new Error("Story name must be a string");this.#e=e}get tagColors(){return this.#h}set tagColors(e){if(!(e instanceof Object))throw new Error("Tag colors must be an object!");this.#h=e}get IFID(){return this.#a}set IFID(e){if("string"!=typeof e)throw new Error("IFID must be a String!");this.#a=e}get start(){return this.#o}set start(e){if("string"!=typeof e)throw new Error("start (passage name) must be a String!");this.#o=e}get formatVersion(){return this.#n}set formatVersion(e){if("string"!=typeof e)throw new Error("Story format version must be a String!");this.#n=e}get metadata(){return this.#t}set metadata(e){if("object"!=typeof e)throw new Error("Story metadata must be Object!");this.#t=e}get format(){return this.#i}set format(e){if("string"!=typeof e)throw new Error("Story format must be a String!");this.#i=e}get creator(){return this.#p}set creator(e){if("string"!=typeof e)throw new Error("Creator must be String");this.#p=e}get creatorVersion(){return this.#u}set creatorVersion(e){if("string"!=typeof e)throw new Error("Creator version must be a string!");this.#u=e}get zoom(){return this.#l}set zoom(e){if("number"!=typeof e)throw new Error("Zoom level must be a Number!");this.#l=Number(Number.parseFloat(e).toFixed(2))}get passages(){return this.#c}set passages(e){if(!Array.isArray(e))throw new Error("Passages must be an Array!");if(!e.every((e=>e instanceof S)))throw new Error("Passages must be an Array of Passage objects!");this.#c=e}get storyStylesheet(){return this.#m}set storyStylesheet(e){if("string"!=typeof e)throw new Error("Story stylesheet must be a string!");this.#m=e}get storyJavaScript(){return this.#g}set storyJavaScript(e){if("string"!=typeof e)throw new Error("Story JavaScript must be a string!");this.#g=e}addPassage(e){if(!(e instanceof S))throw new Error("Can only add Passages to the story!");if(null!==this.getPassageByName(e.name))return console.warn(`Warning: A passage with the name "${e.name}" already exists!`),this.#c.length;if("StoryData"===e.name){try{const r=JSON.parse(e.text);Object.prototype.hasOwnProperty.call(r,"ifid")&&(this.IFID=r.ifid),Object.prototype.hasOwnProperty.call(r,"format")&&(this.format=r.format),Object.prototype.hasOwnProperty.call(r,"format-version")&&(this.formatVersion=r["format-version"]),Object.prototype.hasOwnProperty.call(r,"zoom")&&(this.zoom=r.zoom),Object.prototype.hasOwnProperty.call(r,"start")&&(this.start=r.start),Object.prototype.hasOwnProperty.call(r,"tag-colors")&&(this.tagColors=r["tag-colors"])}catch(e){}return this.#c.length}return"StoryTitle"===e.name?(this.name=e.text,this.#c.length):("Start"===e.name&&""==this.start&&(this.start=e.name),e.tags.includes("script")?(this.#g+=e.text,this.#c.length):e.tags.includes("stylesheet")?(this.#m+=e.text,this.#c.length):this.#c.push(e))}removePassageByName(e){return this.#c=this.#c.filter((r=>r.name!==e)),this.#c.length}getPassagesByTag(e){return this.#c.filter((r=>r.tags.some((r=>e===r))))}getPassageByName(e){const r=this.#c.find((r=>r.name===e));return void 0!==r?r:null}size(){return this.#c.length}toJSON(){const e={name:this.name,tagColors:this.tagColors,ifid:this.IFID,start:this.start,formatVersion:this.formatVersion,metadata:this.metadata,format:this.format,creator:this.creator,creatorVersion:this.creatorVersion,zoom:this.zoom,style:this.storyStylesheet,script:this.storyJavaScript,passages:[]};return this.passages.forEach((r=>{e.passages.push({name:r.name,tags:r.tags,metadata:r.metadata,text:r.text})})),JSON.stringify(e,null,4)}toTwee(){let e=":: StoryData\n";const r={};return null===this.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/)?(r.ifid=I(),console.warn("Warning: IFID is not in UUIDv4 format! A new IFID was generated.")):r.ifid=this.IFID,""!==this.format&&(r.format=this.format),""!==this.formatVersion&&(r["format-version"]=this.formatVersion),0!==this.zoom&&(r.zoom=this.zoom),""!==this.start&&(r.start=this.start),Object.keys(this.tagColors).length>0&&(r["tag-colors"]=this.tagColors),e+=`${JSON.stringify(r,void 0,2)}`,e+="\n\n",e+=":: StoryTitle\n"+this.name,e+="\n\n",this.#m.length>0&&(e+=":: StoryStylesheet [stylesheet]\n"+this.#m+"\n\n"),this.#g.length>0&&(e+=":: StoryJavaScript [script]\n"+this.#g+"\n\n"),this.passages.forEach((r=>{e+=r.toTwee()})),e}toTwine2HTML(){let e=this.passages,r=`<tw-storydata name="${f(this.name)}"`;""!==this.IFID?r+=` ifid="${this.IFID}"`:r+=` ifid="${I()}"`;let t=1,s=1;e.forEach((e=>{e.name===this.start&&(s=t),t++})),0===e.length&&(s=0),r+=` startnode="${s}"`,""!==this.creator&&(r+=` creator="${f(this.creator)}"`),""!==this.creatorVersion&&(r+=` creator-version="${this.creatorVersion}"`),1!==this.zoom&&(r+=` zoom="${this.zoom}"`),""!==this.format&&(r+=` format="${this.format}"`),""!==this.formatVersion&&(r+=` format-version="${this.formatVersion}"`),r+=" options hidden>\n";const o=e.filter((e=>e.tags.includes("stylesheet")));e=e.filter((e=>!e.tags.includes("stylesheet"))),o.length>0&&(r+='\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">',o.forEach((e=>{r+=e.text})),r+="</style>\n"),this.#m.length>0&&(r+=`\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">${this.#m}</style>\n`);const a=e.filter((e=>e.tags.includes("script")));return e=e.filter((e=>!e.tags.includes("script"))),a.length>0&&(r+='\t<script role="script" id="twine-user-script" type="text/twine-javascript">',a.forEach((e=>{r+=e.text})),r+="<\/script>\n"),this.#g.length>0&&(r+=`\t<script role="script" id="twine-user-script" type="text/twine-javascript">${this.#g}<\/script>\n`),t=1,this.passages.forEach((e=>{r+=e.toTwine2HTML(t),t++})),Object.keys(this.tagColors).forEach((e=>{r+=`\t<tw-tag name="${e}" color="${this.tagColors[e]}"></tw-tag>\n`})),r+="</tw-storydata>",r}toTwine1HTML(){let e="";return this.passages.forEach((r=>{e+=`\t${r.toTwine1HTML()}`})),e}}function L(e){return"string"!=typeof e?e:e.replace(/\\(.)/g,"$1")}function T(e){return"string"!=typeof e?e:e.replace(/\\/g,"\\\\").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\{/g,"\\{").replace(/\}/g,"\\}")}function x(e,r){for(let t=e.length-1;t>=0;t--)if(e[t]===r){let r=0;for(let s=t-1;s>=0&&"\\"===e[s];s--)r++;if(r%2==0)return t}return-1}var R=t(589);class N{#e="Untitled Story Format";#f="";#d="";#E="";#w="";#y="";#b="";#v=!1;#O="";constructor(e="Untitled Story Format",r="",t="",s="",o="",a="",i="",n=!1,l=""){this.name=e,this.version=r,this.description=t,this.author=s,this.image=o,this.url=a,this.license=i,this.proofing=n,this.source=l}get name(){return this.#e}set name(e){if("string"!=typeof e)throw new TypeError("Name must be a string!");this.#e=e}get version(){return this.#f}set version(e){if("string"!=typeof e)throw new TypeError("Version must be a string!");this.#f=e}get description(){return this.#d}set description(e){if("string"!=typeof e)throw new TypeError("Description must be a string!");this.#d=e}get author(){return this.#E}set author(e){if("string"!=typeof e)throw new TypeError("Author must be a string!");this.#E=e}get image(){return this.#w}set image(e){if("string"!=typeof e)throw new TypeError("Image must be a string!");this.#w=e}get url(){return this.#y}set url(e){if("string"!=typeof e)throw new TypeError("URL must be a string!");this.#y=e}get license(){return this.#b}set license(e){if("string"!=typeof e)throw new TypeError("License must be a string!");this.#b=e}get proofing(){return this.#v}set proofing(e){if("boolean"!=typeof e)throw new TypeError("Proofing must be a Boolean!");this.#v=e}get source(){return this.#O}set source(e){if("string"!=typeof e)throw new TypeError("Source must be a String!");this.#O=e}toString(){return JSON.stringify(this,null,"\t")}toJSON(){let e="Untitled Story Format";if(this.name.length>0&&(e=this.name),!(0,R.valid)(this.version))throw new TypeError("ERROR: Version must be a valid semantic version!");return JSON.stringify({name:e,version:this.version,description:this.description,author:this.author,image:this.image,url:this.url,license:this.license,proofing:this.proofing,source:this.source})}}class ${constructor(e){if(this.html=e,this.doc=null,this.usingDOMParser=!1,"undefined"!=typeof DOMParser)try{const r=new DOMParser;this.doc=r.parseFromString(e,"text/html"),this.usingDOMParser=!0;const t=this.doc.querySelector("parsererror");t&&(console.warn("DOMParser encountered an error, falling back to regex parsing:",t.textContent),this.doc=this.createSimpleDOM(e),this.usingDOMParser=!1)}catch(r){console.warn("DOMParser failed, falling back to regex parsing:",r.message),this.doc=this.createSimpleDOM(e),this.usingDOMParser=!1}else this.doc=this.createSimpleDOM(e),this.usingDOMParser=!1}getElementsByTagName(e){return this.usingDOMParser&&this.doc&&this.doc.getElementsByTagName?Array.from(this.doc.getElementsByTagName(e)).map((e=>{const r={};if(e.attributes)for(let t=0;t<e.attributes.length;t++){const s=e.attributes[t];r[s.name]=s.value}return{attributes:r,innerHTML:e.innerHTML||"",rawText:e.textContent||e.innerText||""}})):"tw-storydata"===e?this.extractStoryDataElements():"tw-passagedata"===e?this.extractPassageDataElements():"style"===e?this.extractStyleElements():[]}extractStoryDataElements(){const e=/<tw-storydata[^>]*>([\s\S]*?)<\/tw-storydata>/gi,r=[];let t;for(;null!==(t=e.exec(this.html));){const e=t[0],s=this.parseAttributes(e),o=t[1];r.push({attributes:s,innerHTML:o,rawText:o})}return r}extractPassageDataElements(){const e=/<tw-passagedata[^>]*>([\s\S]*?)<\/tw-passagedata>/gi,r=[];let t;for(;null!==(t=e.exec(this.html));){const e=t[0],s=this.parseAttributes(e),o=this.extractTextContent(t[1]);r.push({attributes:s,rawText:o})}return r}extractStyleElements(){const e=/<style[^>]*>([\s\S]*?)<\/style>/gi,r=[];let t;for(;null!==(t=e.exec(this.html));){const e=t[0],s=this.parseAttributes(e),o=t[1];r.push({attributes:s,rawText:o,innerHTML:o})}return r}parseAttributes(e){const r={},t=e.match(/^<[^>]*>/);if(!t)return r;const s=t[0],o=/(\w+(?:-\w+)*)=["']([^"']*)["']/g;let a;for(;null!==(a=o.exec(s));){const e=a[2].replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&");r[a[1]]=e}let i=s;[...s.matchAll(o)].forEach((e=>{i=i.replace(e[0],"")}));const n=/(\w+(?:-\w+)*)=([^\s>]+)/g;for(;null!==(a=n.exec(i));)r[a[1]]||(r[a[1]]=a[2]);const l=/\s(\w+(?:-\w+)*)(?=\s|>|$)/g;for(;null!==(a=l.exec(s));){const e=a[1];r[e]||s.includes(`${e}=`)||e===s.match(/<(\w+)/)?.[1]||(r[e]=!0)}return r}extractTextContent(e){return e.replace(/<[^>]*>/g,"").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&").trim()}createSimpleDOM(e){return{getElementsByTagName:e=>"tw-storydata"===e?this.extractStoryDataElements():"tw-passagedata"===e?this.extractPassageDataElements():"style"===e?this.extractStyleElements():[]}}}const D={parseTwee:function(e){const r=new A;if("[object String]"!==Object.prototype.toString.call(e))throw new Error("Contents not a String");let t="";t=":"!==e[0]&&":"!==e[1]?e.slice(e.indexOf("::"),e.length):e;const s=t.split("\n::");s[0]=s[0].slice(2,s[0].length);let o=1;return s.forEach((e=>{let t="",s="",a="",i="",n=e.slice(0,e.indexOf("\n"));a=e.substring(n.length+1,e.length).trim();const l=function(e){const r=x(e,"{"),t=x(e,"}");return-1!==r&&-1!==t&&t>r?{metadata:e.slice(r,t+1),remainingHeader:e.substring(0,r)+e.substring(t+1)}:null}(n);if(l&&(s=l.metadata,n=l.remainingHeader),s.length>0)try{s=JSON.parse(s)}catch(e){console.info(`Info: Metadata could not be parsed. Setting to empty object. Reported error: ${e.message}`),s={}}else s={};const c=function(e){const r=x(e,"["),t=x(e,"]");return-1!==r&&-1!==t&&t>r?{tags:e.slice(r,t+1),remainingHeader:e.substring(0,r)+e.substring(t+1)}:null}(n);if(c&&(t=c.tags,n=c.remainingHeader),t.length>0){t=t.substring(1,t.length-1);let e=[];if(""!==t&&(e=t.split(" ")),e.length>1){const r=[];e.forEach((e=>{r.push(e.trim())})),t=r}else if(1===e.length){const e=t;t=[],t.push(e)}else t=[]}else t=[];if(t=t.filter((e=>""!==e)),n=n.trim(),!(n.length>0))throw new Error("Malformed passage header!");i=L(n),t=t.map((e=>L(e))),r.addPassage(new S(i,a,t,s,o)),o++})),r},parseJSON:function(e){let r={};const t=new A;try{r=JSON.parse(e)}catch(e){throw new Error(`Error: JSON could not be parsed! ${e.message}`)}return Object.prototype.hasOwnProperty.call(r,"name")&&(t.name=String(r.name)),Object.prototype.hasOwnProperty.call(r,"start")&&(t.start=String(r.start)),Object.prototype.hasOwnProperty.call(r,"ifid")&&(t.IFID=String(r.ifid).toUpperCase()),Object.prototype.hasOwnProperty.call(r,"format")&&(t.format=String(r.format)),Object.prototype.hasOwnProperty.call(r,"formatVersion")&&(t.formatVersion=String(r.formatVersion)),Object.prototype.hasOwnProperty.call(r,"creator")&&(t.creator=String(r.creator)),Object.prototype.hasOwnProperty.call(r,"creatorVersion")&&(t.creatorVersion=String(r.creatorVersion)),Object.prototype.hasOwnProperty.call(r,"zoom")&&(t.zoom=r.zoom),Object.prototype.hasOwnProperty.call(r,"tagColors")&&(t.tagColors=r.tagColors),Object.prototype.hasOwnProperty.call(r,"metadata")&&(t.metadata=r.metadata),Object.prototype.hasOwnProperty.call(r,"passages")&&Array.isArray(r.passages)&&r.passages.forEach((e=>{const r=new S;Object.prototype.hasOwnProperty.call(e,"name")&&(r.name=e.name),Object.prototype.hasOwnProperty.call(e,"tags")&&(r.tags=e.tags),Object.prototype.hasOwnProperty.call(e,"metadata")&&(r.metadata=e.metadata),Object.prototype.hasOwnProperty.call(e,"text")&&(r.text=e.text),t.addPassage(r)})),t},parseStoryFormat:function(e){const r=new N;if(-1!==e.indexOf("harlowe")){const r=e.lastIndexOf(',"setup": function');e=e.slice(0,r)+"}"}const t=e.indexOf("{"),s=e.lastIndexOf("}");if(-1===t||-1===s)throw new Error("Error: Unable to find Twine 2 JSON chunk!");e=e.slice(t,s+1);let o={};try{o=JSON.parse(e)}catch(e){throw new Error(`Error: Unable to parse Twine 2 JSON chunk! ${e.message}`)}return Object.prototype.hasOwnProperty.call(o,"name")&&("string"!=typeof o.name?console.warn("Warning: Processed story format's name is not a string. It will be ignored."):r.name=o.name),Object.prototype.hasOwnProperty.call(o,"author")&&("string"!=typeof o.author?console.warn("Warning: Processed story format's author is not a string. It will be ignored."):r.author=o.author),Object.prototype.hasOwnProperty.call(o,"description")&&("string"!=typeof o.description?console.warn("Warning: Processed story format's description is not a string. It will be ignored."):r.description=o.description),Object.prototype.hasOwnProperty.call(o,"image")&&("string"!=typeof o.image?console.warn("Warning: Processed story format's image is not a string. It will be ignored."):r.image=o.image),Object.prototype.hasOwnProperty.call(o,"url")&&("string"!=typeof o.url?console.warn("Warning: Processed story format's url is not a string. It will be ignored."):r.url=o.url),Object.prototype.hasOwnProperty.call(o,"license")&&("string"!=typeof o.license?console.warn("Warning: Processed story format's license is not a string. It will be ignored."):r.license=o.license),Object.prototype.hasOwnProperty.call(o,"proofing")&&("boolean"!=typeof o.proofing?console.warn("Warning: Processed story format's proofing is not a boolean. It will be ignored."):r.proofing=o.proofing),Object.prototype.hasOwnProperty.call(o,"version")?"string"!=typeof o.version?console.warn("Warning: Processed story format's version is not a string! It will be ignored."):(0,R.valid)(o.version)?r.version=o.version:console.warn("Warning: Processed story format's version is not semantic! It will be ignored."):console.warn("Warning: Processed story format does not have version property!"),Object.prototype.hasOwnProperty.call(o,"source")?"string"!=typeof o.source?console.warn("Warning: Processed story format's source is not a string! It will be ignored."):r.source=o.source:console.warn("Warning: Processed story format does not have source property!"),r},parseTwine2HTML:function(e){const r=new A;if("string"!=typeof e)throw new TypeError("TypeError: Content is not a string!");let t=null;const s=new $(e),o=s.getElementsByTagName("tw-storydata");if(0===o.length)throw new TypeError("TypeError: Not Twine 2 HTML content!");const a=o[0];if(Object.prototype.hasOwnProperty.call(a.attributes,"name")){const e=a.attributes.name;"string"==typeof e&&e.trim().length>0?r.name=e.trim():console.warn("Warning: The name attribute is empty or invalid on tw-storydata!")}else console.warn("Warning: The name attribute is missing from tw-storydata!");if(Object.prototype.hasOwnProperty.call(a.attributes,"ifid")){const e=a.attributes.ifid;"string"==typeof e&&e.trim().length>0?r.IFID=e.trim():console.warn("Warning: The ifid attribute is empty or invalid on tw-storydata!")}else console.warn("Warning: The ifid attribute is missing from tw-storydata!");if(r.IFID&&null===r.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/)&&console.warn("Warning: The IFID is not in valid UUIDv4 formatting on tw-storydata!"),Object.prototype.hasOwnProperty.call(a.attributes,"creator")&&(r.creator=a.attributes.creator),Object.prototype.hasOwnProperty.call(a.attributes,"creator-version")&&(r.creatorVersion=a.attributes["creator-version"]),Object.prototype.hasOwnProperty.call(a.attributes,"format")&&(r.format=a.attributes.format),Object.prototype.hasOwnProperty.call(a.attributes,"format-version")&&(r.formatVersion=a.attributes["format-version"]),Object.prototype.hasOwnProperty.call(a.attributes,"startnode")&&(t=a.attributes.startnode),Object.prototype.hasOwnProperty.call(a.attributes,"zoom")&&(r.zoom=Number(a.attributes.zoom)),Object.prototype.hasOwnProperty.call(a.attributes,"options")){const e=a.attributes.options;e.length>0&&e.split(",").forEach((e=>{const[t,s]=e.split(":");t&&s&&(r.metadata[t.trim()]=s.trim())}))}return Object.prototype.hasOwnProperty.call(a.attributes,"hidden")&&(r.metadata.hidden=a.attributes.hidden),s.getElementsByTagName("style").forEach((e=>{const t=e.innerHTML||e.rawText||"",s=/tw-story-tag-(.+?)\s*{\s*color:\s*(.+?)\s*}/g;let o;for(;null!==(o=s.exec(t));){const e=o[1],t=o[2];r.tagColors[e]=t}})),s.getElementsByTagName("tw-passagedata").forEach((e=>{const s=e.attributes,o=function(e){var r=d.level,t=void 0===r?"all":r,s=d.scope,o=void 0===s?"xml"===t?"strict":"body":s;if(!e)return"";var a=b[t][o],i=h[t].entities,n="attribute"===o,p="strict"===o;return e.replace(a,(function(e){return function(e,r,t,s){var o=e,a=e[e.length-1];if(t&&"="===a)o=e;else if(s&&";"!==a)o=e;else{var i=r[e];if(i)o=i;else if("&"===e[0]&&"#"===e[1]){var n=e[2],p="x"==n||"X"==n?parseInt(e.substr(3),16):parseInt(e.substr(2));o=p>=1114111?O:p>65535?c(p):v(l[p]||p)}}return o}(e,i,n,p)}))}(e.rawText);if(!Object.prototype.hasOwnProperty.call(s,"name"))return void console.warn("Warning: Cannot parse passage data without name!");const a=s.name;if(!Object.prototype.hasOwnProperty.call(s,"pid"))throw new Error("Error: Passages are required to have PID!");let i=null;Object.prototype.hasOwnProperty.call(s,"position")&&(i=s.position);let n=null;Object.prototype.hasOwnProperty.call(s,"size")&&(n=s.size);let p=[];Object.prototype.hasOwnProperty.call(s,"tags")&&s.tags.length>0&&'""'!==s.tags&&(p=s.tags.split(" ").filter((e=>""!==e)));const u={};null!==i&&(u.position=i),null!==n&&(u.size=n);const g=s.pid;t===g&&(r.start=a),r.addPassage(new S(a,o,p,u))})),r},compileTwine2HTML:function(e,r){if(!(e instanceof A))throw new Error("Error: story must be a Story object!");if(!(r instanceof N))throw new Error("storyFormat must be a StoryFormat object!");if(""===r.source)throw new Error("StoryFormat source empty string!");if(null===e.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[89ABab][0-9A-F]{3}-[0-9A-F]{12}$/))throw new Error("Story IFID is invalid!");if(""===e.name)throw new Error("Story name empty string!");const t=e.toTwine2HTML();return r.source=r.source.replaceAll(/{{STORY_NAME}}/gm,e.name),r.source=r.source.replaceAll(/{{STORY_DATA}}/gm,t),r.source},generateIFID:I,Story:A,Passage:S,StoryFormat:N,version:"2.3.3"},q=D,P="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t.g?t.g:"undefined"!=typeof self?self:null;return P&&(P.Extwee=D),s.default})()));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(r,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Extwee=e():r.Extwee=e()}(this,(()=>(()=>{"use strict";var r={d:(e,t)=>{for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}};r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(r){if("object"==typeof window)return window}}(),r.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e);var e={};r.d(e,{default:()=>x});var t=function(){return t=Object.assign||function(r){for(var e,t=1,a=arguments.length;t<a;t++)for(var s in e=arguments[t])Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=e[s]);return r},t.apply(this,arguments)};function a(r,e){for(var a={},s={},o=r.split("~~"),i=!1,n=0;o.length>n;n++){for(var l=o[n].split("~"),c=0;c<l.length;c+=2){var u=l[c],p=l[c+1],g="&"+u+";";a[g]=p,i&&(a["&"+u]=p),s[p]=g}i=!0}return e?{entities:t(t({},a),e.entities),characters:t(t({},s),e.characters)}:{entities:a,characters:s}}var s={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/∉|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/·|℗|⋇|⪧|⩺|⋗|⦕|⩼|⪆|⥸|⋗|⋛|⪌|≷|≳|⪦|⩹|⋖|⋋|⋉|⥶|⩻|⦖|◃|⊴|◂|∉|⋹̸|⋵̸|∉|⋷|⋶|∌|∌|⋾|⋽|∥|⊠|⨱|⨰|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},o={};o.xml=a("lt~<~gt~>~quot~\"~apos~'~amp~&"),o.html4=a("apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~~zwj~~lrm~~rlm~~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~\"~amp~&~lt~<~gt~>"),o.html5=a('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~~InvisibleTimes~~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~~NegativeThickSpace~~NegativeThinSpace~~NegativeVeryThinSpace~~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~Nfr~𝔑~NoBreak~~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~\t~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~ ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',o.html4),String.fromCodePoint;var i=String.prototype.codePointAt?function(r,e){return r.codePointAt(e)}:function(r,e){return 1024*(r.charCodeAt(e)-55296)+r.charCodeAt(e+1)-56320+65536},n=function(){return n=Object.assign||function(r){for(var e,t=1,a=arguments.length;t<a;t++)for(var s in e=arguments[t])Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=e[s]);return r},n.apply(this,arguments)},l=n(n({},o),{all:o.html5}),c={specialChars:/[<>'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g},u={mode:"specialChars",level:"all",numeric:"decimal"};function p(r,e){var t=void 0===e?u:e,a=t.mode,s=void 0===a?"specialChars":a,o=t.numeric,n=void 0===o?"decimal":o,p=t.level;if(!r)return"";var g=c[s],h=l[void 0===p?"all":p].characters,d="hexadecimal"===n;return String.prototype.replace.call(r,g,(function(r){var e=h[r];if(!e){var t=r.length>1?i(r,0):r.charCodeAt(0);e=(d?"&#x"+t.toString(16):"&#"+t)+";"}return e}))}var g=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,h=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,d={xml:{strict:g,attribute:h,body:s.xml},html4:{strict:g,attribute:h,body:s.html4},html5:{strict:g,attribute:h,body:s.html5}};function m(){return crypto.randomUUID().toUpperCase()}(n(n({},d),{all:d.html5}),String.fromCharCode)(65533);class f{#r="Untitled Story";#e="";#t="";#a="";#s="";#o=1;#i=[];#n="";#l="";#c=null;#u={};#p="";#g="";constructor(r="Untitled Story"){this.name=r,this.#n="extwee",this.#l="2.3.9",this.#c={}}get name(){return this.#r}set name(r){if("string"!=typeof r)throw new Error("Story name must be a string");this.#r=r}get tagColors(){return this.#u}set tagColors(r){if(!(r instanceof Object))throw new Error("Tag colors must be an object!");this.#u=r}get IFID(){return this.#t}set IFID(r){if("string"!=typeof r)throw new Error("IFID must be a String!");this.#t=r}get start(){return this.#e}set start(r){if("string"!=typeof r)throw new Error("start (passage name) must be a String!");this.#e=r}get formatVersion(){return this.#s}set formatVersion(r){if("string"!=typeof r)throw new Error("Story format version must be a String!");this.#s=r}get metadata(){return this.#c}set metadata(r){if("object"!=typeof r)throw new Error("Story metadata must be Object!");this.#c=r}get format(){return this.#a}set format(r){if("string"!=typeof r)throw new Error("Story format must be a String!");this.#a=r}get creator(){return this.#n}set creator(r){if("string"!=typeof r)throw new Error("Creator must be String");this.#n=r}get creatorVersion(){return this.#l}set creatorVersion(r){if("string"!=typeof r)throw new Error("Creator version must be a string!");this.#l=r}get zoom(){return this.#o}set zoom(r){if("number"!=typeof r)throw new Error("Zoom level must be a Number!");this.#o=Number(Number.parseFloat(r).toFixed(2))}get passages(){return this.#i}set passages(r){if(!Array.isArray(r))throw new Error("Passages must be an Array!");if(!r.every((r=>r instanceof y)))throw new Error("Passages must be an Array of Passage objects!");this.#i=r}get storyStylesheet(){return this.#g}set storyStylesheet(r){if("string"!=typeof r)throw new Error("Story stylesheet must be a string!");this.#g=r}get storyJavaScript(){return this.#p}set storyJavaScript(r){if("string"!=typeof r)throw new Error("Story JavaScript must be a string!");this.#p=r}addPassage(r){if(!(r instanceof y))throw new Error("Can only add Passages to the story!");if(null!==this.getPassageByName(r.name))return console.warn(`Warning: A passage with the name "${r.name}" already exists!`),this.#i.length;if("StoryData"===r.name){try{const e=JSON.parse(r.text);Object.prototype.hasOwnProperty.call(e,"ifid")&&(this.IFID=e.ifid),Object.prototype.hasOwnProperty.call(e,"format")&&(this.format=e.format),Object.prototype.hasOwnProperty.call(e,"format-version")&&(this.formatVersion=e["format-version"]),Object.prototype.hasOwnProperty.call(e,"zoom")&&(this.zoom=e.zoom),Object.prototype.hasOwnProperty.call(e,"start")&&(this.start=e.start),Object.prototype.hasOwnProperty.call(e,"tag-colors")&&(this.tagColors=e["tag-colors"])}catch(r){}return this.#i.length}return"StoryTitle"===r.name?(this.name=r.text,this.#i.length):("Start"===r.name&&""==this.start&&(this.start=r.name),r.tags.includes("script")?(this.#p+=r.text,this.#i.length):r.tags.includes("stylesheet")?(this.#g+=r.text,this.#i.length):this.#i.push(r))}removePassageByName(r){return this.#i=this.#i.filter((e=>e.name!==r)),this.#i.length}getPassagesByTag(r){return this.#i.filter((e=>e.tags.some((e=>r===e))))}getPassageByName(r){const e=this.#i.find((e=>e.name===r));return void 0!==e?e:null}size(){return this.#i.length}toJSON(){const r={name:this.name,tagColors:this.tagColors,ifid:this.IFID,start:this.start,formatVersion:this.formatVersion,metadata:this.metadata,format:this.format,creator:this.creator,creatorVersion:this.creatorVersion,zoom:this.zoom,style:this.storyStylesheet,script:this.storyJavaScript,passages:[]};return this.passages.forEach((e=>{r.passages.push({name:e.name,tags:e.tags,metadata:e.metadata,text:e.text})})),JSON.stringify(r,null,4)}toTwee(){let r=":: StoryData\n";const e={};return null===this.IFID.match(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/)?(e.ifid=m(),console.warn("Warning: IFID is not in UUIDv4 format! A new IFID was generated.")):e.ifid=this.IFID,""!==this.format&&(e.format=this.format),""!==this.formatVersion&&(e["format-version"]=this.formatVersion),0!==this.zoom&&(e.zoom=this.zoom),""!==this.start&&(e.start=this.start),Object.keys(this.tagColors).length>0&&(e["tag-colors"]=this.tagColors),r+=`${JSON.stringify(e,void 0,2)}`,r+="\n\n",r+=":: StoryTitle\n"+this.name,r+="\n\n",this.#g.length>0&&(r+=":: StoryStylesheet [stylesheet]\n"+this.#g+"\n\n"),this.#p.length>0&&(r+=":: StoryJavaScript [script]\n"+this.#p+"\n\n"),this.passages.forEach((e=>{r+=e.toTwee()})),r}toTwine2HTML(){let r=this.passages,e=`<tw-storydata name="${p(this.name)}"`;""!==this.IFID?e+=` ifid="${this.IFID}"`:e+=` ifid="${m()}"`;let t=1,a=1;r.forEach((r=>{r.name===this.start&&(a=t),t++})),0===r.length&&(a=0),e+=` startnode="${a}"`,""!==this.creator&&(e+=` creator="${p(this.creator)}"`),""!==this.creatorVersion&&(e+=` creator-version="${this.creatorVersion}"`),1!==this.zoom&&(e+=` zoom="${this.zoom}"`),""!==this.format&&(e+=` format="${this.format}"`),""!==this.formatVersion&&(e+=` format-version="${this.formatVersion}"`),e+=" options hidden>\n";const s=r.filter((r=>r.tags.includes("stylesheet")));r=r.filter((r=>!r.tags.includes("stylesheet"))),s.length>0&&(e+='\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">',s.forEach((r=>{e+=r.text})),e+="</style>\n"),this.#g.length>0&&(e+=`\t<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">${this.#g}</style>\n`);const o=r.filter((r=>r.tags.includes("script")));return r=r.filter((r=>!r.tags.includes("script"))),o.length>0&&(e+='\t<script role="script" id="twine-user-script" type="text/twine-javascript">',o.forEach((r=>{e+=r.text})),e+="<\/script>\n"),this.#p.length>0&&(e+=`\t<script role="script" id="twine-user-script" type="text/twine-javascript">${this.#p}<\/script>\n`),t=1,this.passages.forEach((r=>{e+=r.toTwine2HTML(t),t++})),Object.keys(this.tagColors).forEach((r=>{e+=`\t<tw-tag name="${r}" color="${this.tagColors[r]}"></tw-tag>\n`})),e+="</tw-storydata>",e}toTwine1HTML(){let r="";return this.passages.forEach((e=>{r+=`\t${e.toTwine1HTML()}`})),r}}function b(r){return"string"!=typeof r?r:r.replace(/\\/g,"\\\\").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\{/g,"\\{").replace(/\}/g,"\\}")}class y{#r="";#h=[];#c={};#d="";constructor(r="",e="",t=[],a={}){this.name=r,this.tags=t,this.metadata=a,this.text=e}get name(){return this.#r}set name(r){if("string"!=typeof r)throw new Error("Name must be a String!");this.#r=r}get tags(){return this.#h}set tags(r){if(!Array.isArray(r))throw new Error("Tags must be an array!");this.#h=r}get metadata(){return this.#c}set metadata(r){if("object"!=typeof r)throw new Error("Metadata should be an object literal!");this.#c=r}get text(){return this.#d}set text(r){if("string"!=typeof r)throw new Error("Text should be a String!");this.#d=r}toTwee(){let r="";r+=`:: ${b(this.name)}`,this.tags.length>0&&(r+=` [${this.tags.map((r=>b(r))).join(" ")}]`),Object.keys(this.metadata).length>0&&(r+=` ${JSON.stringify(this.metadata)}`);const e=this.text.split("\n");for(let r=0;r<e.length;r++)e[r].startsWith("::")&&(e[r]=`\\${e[r]}`);return r+=`\n${e.join("\n")}\n\n`,r}toJSON(){const r={name:this.name,tags:this.tags,metadata:this.metadata,text:this.text};return JSON.stringify(r)}toTwine2HTML(r=1){let e="\t<tw-passagedata";return e+=` pid="${r}"`,e+=` name="${p(this.name)}"`,e+=` tags="${p(this.#h.join(" "))}" `,Object.prototype.hasOwnProperty.call(this.#c,"position")&&(e+=` position="${this.#c.position}" `),Object.prototype.hasOwnProperty.call(this.#c,"size")&&(e+=`size="${this.#c.size}" `),e+=`>${this.text}</tw-passagedata>\n`,e}toTwine1HTML(){let r="\t<div";return r+=` tiddler="${p(this.name)}"`,r+=` tags="${p(this.#h.join(" "))}" `,r+=' modifier="extwee"',Object.prototype.hasOwnProperty.call(this.#c,"position")?r+=` twine-position="${this.#c.position}"`:r+=' twine-position="10,10"',r+=`>${this.#d}</div>`,r}}class w{constructor(r){if(this.html=r,this.doc=null,this.usingDOMParser=!1,"undefined"!=typeof DOMParser)try{const e=new DOMParser;this.doc=e.parseFromString(r,"text/html"),this.usingDOMParser=!0;const t=this.doc.querySelector("parsererror");t&&(console.warn("DOMParser encountered an error, falling back to regex parsing:",t.textContent),this.doc=this.createSimpleDOM(r),this.usingDOMParser=!1)}catch(e){console.warn("DOMParser failed, falling back to regex parsing:",e.message),this.doc=this.createSimpleDOM(r),this.usingDOMParser=!1}else this.doc=this.createSimpleDOM(r),this.usingDOMParser=!1}querySelector(r){return this.usingDOMParser&&this.doc&&this.doc.querySelector?this.doc.querySelector(r):"#storeArea"===r?this.html.match(/<div[^>]*id=["']storeArea["'][^>]*>/i)?{found:!0}:null:"#store-area"===r&&this.html.match(/<div[^>]*id=["']store-area["'][^>]*>/i)?{found:!0}:null}querySelectorAll(r){return this.usingDOMParser&&this.doc&&this.doc.querySelectorAll?Array.from(this.doc.querySelectorAll(r)).map((r=>{const e={};if(r.attributes)for(let t=0;t<r.attributes.length;t++){const a=r.attributes[t];e[a.name]=a.value}return{attributes:e,rawText:r.textContent||r.innerText||""}})):"[tiddler]"===r?this.extractTiddlerElements():[]}extractTiddlerElements(){const r=/<div[^>]*tiddler=["']([^"']+)["'][^>]*>([\s\S]*?)<\/div>/gi,e=[];let t;for(;null!==(t=r.exec(this.html));){const r=t[0],a=this.parseAttributes(r),s=this.extractTextContent(t[2]);e.push({attributes:a,rawText:s})}return e}parseAttributes(r){const e={},t=r.match(/tiddler=["']([^"']+)["']/i);t&&(e.tiddler=t[1]);const a=r.match(/tags=["']([^"']*)["']/i);a&&(e.tags=a[1]);const s=r.match(/twine-position=["']([^"']+)["']/i);s&&(e["twine-position"]=s[1]);const o=r.match(/modifier=["']([^"']+)["']/i);return o&&(e.modifier=o[1]),e}extractTextContent(r){return r.replace(/<[^>]*>/g,"").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&").trim()}createSimpleDOM(r){return{querySelector:e=>"#storeArea"===e&&r.includes('id="storeArea"')||"#store-area"===e&&r.includes('id="store-area"')?{found:!0}:null,querySelectorAll:r=>"[tiddler]"===r?this.extractTiddlerElements():[]}}}function q(r){const e=new f,t=new w(r);let a=t.querySelector("#storeArea");if(null===a&&(a=t.querySelector("#store-area"),null==a))throw new Error("Cannot find #storeArea or #store-area!");const s=t.querySelectorAll("[tiddler]");for(const r of s){const t=r.attributes,a=r.rawText;let s=null;Object.prototype.hasOwnProperty.call(t,"twine-position")&&(s=t["twine-position"]);const o=t.tiddler;"StoryTitle"===o&&(e.name=a);let i=[];Object.prototype.hasOwnProperty.call(t,"tags")&&(t.tags.length>0&&'""'!==t.tags&&(i=t.tags,i=i.split(" ")),i=i.filter((r=>""!==r)));const n={};null!==s&&(n.position=s),Object.prototype.hasOwnProperty.call(t,"modifier")&&(e.creator=t.modifier),e.addPassage(new y(o,a,i,n))}return e}function v(r,e="",t="",a="",s="",o={jquery:"",modernizr:""}){if(!(r instanceof f))throw new TypeError("Error: story must be a Story object!");return t=(t=(t=(t=(t=(t=(t=t.replaceAll(/"VERSION"/gm,r.creator)).replaceAll(/"TIME"/gm,new Date)).replaceAll(/"ENGINE"/gm,e)).replaceAll(`"${a.toUpperCase()}"`,s)).replaceAll(/"STORY_SIZE"/gm,`"${r.size()}"`)).replaceAll(/"STORY"/gm,r.toTwine1HTML())).replaceAll(/"START_AT"/gm,"''"),Object.prototype.hasOwnProperty.call(o,"jquery")&&(t=t.replaceAll(/"JQUERY"/gm,o.jquery)),Object.prototype.hasOwnProperty.call(o,"modernizr")&&(t=t.replaceAll(/"MODERNIZR"/gm,o.modernizr)),t}const x={parseTwine1HTML:q,compileTwine1HTML:v,parse:q,compile:v},S="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==r.g?r.g:"undefined"!=typeof self?self:null;return S&&(S.Extwee=S.Extwee||{},S.Extwee.parseTwine1HTML=q,S.Extwee.compileTwine1HTML=v),e.default})()));
|