extwee 2.3.11 → 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/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 -274
- package/test/Objects/SnowmanCompatibility.test.js +0 -111
- 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
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Extwee Story Format Compiler Demo</title>
|
|
7
|
-
|
|
8
|
-
<!-- Bootstrap CSS for styling -->
|
|
9
|
-
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
10
|
-
|
|
11
|
-
<!-- Custom CSS -->
|
|
12
|
-
<link href="./index.css" rel="stylesheet">
|
|
13
|
-
</head>
|
|
14
|
-
<body>
|
|
15
|
-
<div class="demo-container">
|
|
16
|
-
<!-- Header -->
|
|
17
|
-
<div class="demo-header">
|
|
18
|
-
<h1 class="mb-3">Example Extwee Story Format Compiler</h1>
|
|
19
|
-
<p class="lead mb-0">Compile Twee code with different Twine story formats</p>
|
|
20
|
-
</div>
|
|
21
|
-
|
|
22
|
-
<!-- Instructions -->
|
|
23
|
-
<div class="demo-section">
|
|
24
|
-
<h3>📝 How to Use</h3>
|
|
25
|
-
<ol>
|
|
26
|
-
<li><strong>Select a Story Format:</strong> Choose from Harlowe, SugarCube, Snowman, or Chapbook</li>
|
|
27
|
-
<li><strong>Enter Twee Code:</strong> Write or paste your Twee story code in the text area</li>
|
|
28
|
-
<li><strong>Compile:</strong> Click the "Compile Story" button to generate the HTML output</li>
|
|
29
|
-
</ol>
|
|
30
|
-
|
|
31
|
-
<div class="example-twee">
|
|
32
|
-
<strong>Example Twee Code:</strong><br>
|
|
33
|
-
<code>:: Start<br>
|
|
34
|
-
This is the beginning of your story.<br>
|
|
35
|
-
<br>
|
|
36
|
-
[[Continue to the next passage->Next]]<br>
|
|
37
|
-
<br>
|
|
38
|
-
:: Next<br>
|
|
39
|
-
This is the second passage of your story.<br>
|
|
40
|
-
<br>
|
|
41
|
-
The End.
|
|
42
|
-
</code>
|
|
43
|
-
</div>
|
|
44
|
-
<div>
|
|
45
|
-
<p>Similar to Twine, this page will automatically assign an IFID to your story.</p>
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|
|
48
|
-
|
|
49
|
-
<!-- Main Demo Interface -->
|
|
50
|
-
<div class="demo-section">
|
|
51
|
-
<div class="row">
|
|
52
|
-
<div class="col-md-4 mb-3">
|
|
53
|
-
<label for="storyFormat" class="form-label"><strong>Story Format</strong></label>
|
|
54
|
-
<select id="storyFormat" class="form-select">
|
|
55
|
-
<option value="">Select a story format...</option>
|
|
56
|
-
<option value="harlowe" data-version="3.3.9">Harlowe (3.3.9)</option>
|
|
57
|
-
<option value="sugarcube" data-version="2.37.3">SugarCube (2.37.3)</option>
|
|
58
|
-
<option value="snowman" data-version="2.0.2">Snowman (2.0.2)</option>
|
|
59
|
-
<option value="chapbook" data-version="2.3.0">Chapbook (2.3.0)</option>
|
|
60
|
-
</select>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<div class="col-md-8 mb-3">
|
|
64
|
-
<div class="d-flex justify-content-between align-items-center">
|
|
65
|
-
<label for="tweeCode" class="form-label"><strong>Twee Code</strong></label>
|
|
66
|
-
<button id="loadExample" class="btn btn-sm btn-outline-secondary">Load Example</button>
|
|
67
|
-
</div>
|
|
68
|
-
<textarea id="tweeCode" class="form-control" rows="15"
|
|
69
|
-
placeholder="Enter your Twee code here..."></textarea>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
|
-
<div class="row">
|
|
74
|
-
<div class="col-12 text-center">
|
|
75
|
-
<button id="compileBtn" class="btn btn-primary btn-lg" disabled>
|
|
76
|
-
<span id="compileSpinner" class="spinner-border spinner-border-sm me-2" style="display: none;"></span>
|
|
77
|
-
<span id="compileBtnText">Compile Story</span>
|
|
78
|
-
</button>
|
|
79
|
-
</div>
|
|
80
|
-
</div>
|
|
81
|
-
</div>
|
|
82
|
-
|
|
83
|
-
<!-- Output Section -->
|
|
84
|
-
<div class="demo-section">
|
|
85
|
-
<h4>📄 Compiled Output</h4>
|
|
86
|
-
<div id="outputContainer" class="output-container">
|
|
87
|
-
<div class="loading">Select a story format and enter Twee code, then click "Compile Story" to see the output here.</div>
|
|
88
|
-
</div>
|
|
89
|
-
|
|
90
|
-
<div class="row mt-3">
|
|
91
|
-
<div class="col-6">
|
|
92
|
-
<button id="downloadBtn" class="btn btn-success w-100" style="display: none;">
|
|
93
|
-
📥 Download HTML File
|
|
94
|
-
</button>
|
|
95
|
-
</div>
|
|
96
|
-
<div class="col-6">
|
|
97
|
-
<button id="previewBtn" class="btn btn-info w-100" style="display: none;">
|
|
98
|
-
👁️ Preview in New Tab
|
|
99
|
-
</button>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
|
|
104
|
-
<!-- Footer -->
|
|
105
|
-
<div class="demo-section">
|
|
106
|
-
<div class="row">
|
|
107
|
-
<div class="col-md-12">
|
|
108
|
-
<h5>About This Demo</h5>
|
|
109
|
-
<p>This demo uses the <strong>Extwee</strong> web build to compile Twee code with story formats loaded dynamically from the <a href="https://github.com/videlais/story-formats-archive" target="_blank">Story Formats Archive</a>.</p>
|
|
110
|
-
</div>
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
</div>
|
|
114
|
-
|
|
115
|
-
<!-- Load Dependencies -->
|
|
116
|
-
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
117
|
-
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
118
|
-
|
|
119
|
-
<!-- Load Local Extwee build -->
|
|
120
|
-
<script src="./extwee.core.min.js"></script>
|
|
121
|
-
|
|
122
|
-
<script>
|
|
123
|
-
$(document).ready(function() {
|
|
124
|
-
let storyFormats = {};
|
|
125
|
-
let currentCompiledHTML = '';
|
|
126
|
-
|
|
127
|
-
// Load story formats index
|
|
128
|
-
async function loadStoryFormatsIndex() {
|
|
129
|
-
try {
|
|
130
|
-
const response = await fetch('https://raw.githubusercontent.com/videlais/story-formats-archive/docs/official/index.json');
|
|
131
|
-
// Convert to JSON.
|
|
132
|
-
const data = await response.json();
|
|
133
|
-
// Use Twine 2 formats only.
|
|
134
|
-
storyFormats = data.twine2;
|
|
135
|
-
// Show versions on console
|
|
136
|
-
console.log('Loaded story formats index:', storyFormats);
|
|
137
|
-
|
|
138
|
-
} catch (error) {
|
|
139
|
-
console.error('Failed to load story formats index:', error);
|
|
140
|
-
showError('Failed to load story formats. Please check your internet connection.');
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Update format info when selection changes
|
|
145
|
-
$('#storyFormat').on('change', function() {
|
|
146
|
-
const selectedFormat = $(this).val();
|
|
147
|
-
const $compileBtn = $('#compileBtn');
|
|
148
|
-
const $formatInfo = $('#formatInfo');
|
|
149
|
-
|
|
150
|
-
if (selectedFormat) {
|
|
151
|
-
$compileBtn.prop('disabled', false);
|
|
152
|
-
$formatInfo.show();
|
|
153
|
-
} else {
|
|
154
|
-
$compileBtn.prop('disabled', true);
|
|
155
|
-
$formatInfo.hide();
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
// Load example code
|
|
160
|
-
$('#loadExample').on('click', function() {
|
|
161
|
-
const exampleCode = `:: Start
|
|
162
|
-
Welcome to your interactive story!
|
|
163
|
-
|
|
164
|
-
You find yourself at a crossroads in a mysterious forest.
|
|
165
|
-
|
|
166
|
-
[[Take the left path->LeftPath]]
|
|
167
|
-
[[Take the right path->RightPath]]
|
|
168
|
-
|
|
169
|
-
:: LeftPath
|
|
170
|
-
You venture down the left path and discover a hidden cottage.
|
|
171
|
-
|
|
172
|
-
The door creaks open as you approach...
|
|
173
|
-
|
|
174
|
-
[[Enter the cottage->Cottage]]
|
|
175
|
-
[[Return to the crossroads->Start]]
|
|
176
|
-
|
|
177
|
-
:: RightPath
|
|
178
|
-
The right path leads to a sparkling stream.
|
|
179
|
-
|
|
180
|
-
The water is crystal clear and you can see fish swimming below.
|
|
181
|
-
|
|
182
|
-
[[Follow the stream->Stream]]
|
|
183
|
-
[[Return to the crossroads->Start]]
|
|
184
|
-
|
|
185
|
-
:: Cottage
|
|
186
|
-
Inside the cottage, you find an old book on a dusty table.
|
|
187
|
-
|
|
188
|
-
As you open it, magical words begin to glow on the pages...
|
|
189
|
-
|
|
190
|
-
*The End*
|
|
191
|
-
|
|
192
|
-
:: Stream
|
|
193
|
-
You follow the stream until you reach a beautiful waterfall.
|
|
194
|
-
|
|
195
|
-
Behind the waterfall, you discover a secret cave filled with treasure!
|
|
196
|
-
|
|
197
|
-
*The End*`;
|
|
198
|
-
|
|
199
|
-
$('#tweeCode').val(exampleCode);
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Show error message
|
|
203
|
-
|
|
204
|
-
// Escape HTML helper to prevent XSS
|
|
205
|
-
function escapeHtml(str) {
|
|
206
|
-
return String(str)
|
|
207
|
-
.replace(/&/g, "&")
|
|
208
|
-
.replace(/</g, "<")
|
|
209
|
-
.replace(/>/g, ">")
|
|
210
|
-
.replace(/"/g, """)
|
|
211
|
-
.replace(/'/g, "'");
|
|
212
|
-
}
|
|
213
|
-
function showError(message) {
|
|
214
|
-
// Escape the error message to prevent XSS
|
|
215
|
-
$('#outputContainer').html(`<div class="error">❌ Error: ${escapeHtml(message)}</div>`);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// Show success message
|
|
219
|
-
function showSuccess(message) {
|
|
220
|
-
$('#outputContainer').html(`<div class="success">✅ ${message}</div>`);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Compile story
|
|
224
|
-
$('#compileBtn').on('click', async function() {
|
|
225
|
-
const selectedFormat = $('#storyFormat').val();
|
|
226
|
-
const formatVersion = $('#storyFormat option:selected').data('version');
|
|
227
|
-
let tweeCode = $('#tweeCode').val().trim();
|
|
228
|
-
|
|
229
|
-
// Check if the input contains the "StoryData" passage
|
|
230
|
-
const hasStoryData = /::\s*StoryData/i.test(tweeCode);
|
|
231
|
-
// If it doesn't, we will add a default one
|
|
232
|
-
// and generate a new IFID
|
|
233
|
-
if (hasStoryData == false) {
|
|
234
|
-
|
|
235
|
-
const ifid = Extwee.generateIFID();
|
|
236
|
-
const storyDataPassage = `:: StoryData
|
|
237
|
-
{"ifid": "${ifid}"}`;
|
|
238
|
-
// Append to the start of the Twee code
|
|
239
|
-
tweeCode = storyDataPassage + '\n\n' + tweeCode;
|
|
240
|
-
console.log('Added StoryData passage with IFID:', ifid);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
if (!selectedFormat) {
|
|
244
|
-
showError('Please select a story format.');
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
if (!tweeCode) {
|
|
249
|
-
showError('Please enter some Twee code.');
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Show loading state
|
|
254
|
-
const $btn = $(this);
|
|
255
|
-
const $spinner = $('#compileSpinner');
|
|
256
|
-
const $btnText = $('#compileBtnText');
|
|
257
|
-
|
|
258
|
-
$btn.prop('disabled', true);
|
|
259
|
-
$spinner.show();
|
|
260
|
-
$btnText.text('Compiling...');
|
|
261
|
-
$('#outputContainer').html('<div class="loading">🔄 Loading story format and compiling...</div>');
|
|
262
|
-
|
|
263
|
-
try {
|
|
264
|
-
// Fetch the latest version of the selected format
|
|
265
|
-
const formatData = storyFormats[selectedFormat];
|
|
266
|
-
let formatUrl = `https://raw.githubusercontent.com/videlais/story-formats-archive/docs/official/twine2/${selectedFormat}/${formatVersion}/format.js`;
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
console.log('Fetching format from:', formatUrl);
|
|
270
|
-
|
|
271
|
-
// Fetch the story format
|
|
272
|
-
const formatResponse = await fetch(formatUrl);
|
|
273
|
-
if (!formatResponse.ok) {
|
|
274
|
-
throw new Error(`Failed to fetch story format: ${formatResponse.status}`);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
const formatCode = await formatResponse.text();
|
|
278
|
-
console.log('Story format loaded, size:', formatCode.length);
|
|
279
|
-
|
|
280
|
-
// Parse the story format
|
|
281
|
-
const storyFormat = Extwee.parseStoryFormat(formatCode);
|
|
282
|
-
console.log('Story format parsed:', storyFormat.name, storyFormat.version);
|
|
283
|
-
|
|
284
|
-
// Parse the Twee code
|
|
285
|
-
const story = Extwee.parseTwee(tweeCode);
|
|
286
|
-
console.log('Story parsed, passages:', story.passages.length);
|
|
287
|
-
|
|
288
|
-
// Set story format info
|
|
289
|
-
story.format = storyFormat.name;
|
|
290
|
-
story.formatVersion = storyFormat.version;
|
|
291
|
-
|
|
292
|
-
// Compile to HTML
|
|
293
|
-
const compiledHTML = Extwee.compileTwine2HTML(story, storyFormat);
|
|
294
|
-
currentCompiledHTML = compiledHTML;
|
|
295
|
-
|
|
296
|
-
// Show the compiled output (truncated for display)
|
|
297
|
-
const displayHTML = compiledHTML.length > 2000
|
|
298
|
-
? compiledHTML.substring(0, 2000) + '\n\n... (output truncated, full HTML available for download) ...'
|
|
299
|
-
: compiledHTML;
|
|
300
|
-
|
|
301
|
-
$('#outputContainer').html(`<div class="success">✅ Story compiled successfully!</div><pre>${escapeHtml(displayHTML)}</pre>`);
|
|
302
|
-
|
|
303
|
-
// Show download and preview buttons
|
|
304
|
-
$('#downloadBtn, #previewBtn').show();
|
|
305
|
-
|
|
306
|
-
} catch (error) {
|
|
307
|
-
console.error('Compilation error:', error);
|
|
308
|
-
showError(error.message || 'An unexpected error occurred during compilation.');
|
|
309
|
-
} finally {
|
|
310
|
-
// Reset button state
|
|
311
|
-
$btn.prop('disabled', false);
|
|
312
|
-
$spinner.hide();
|
|
313
|
-
$btnText.text('Compile Story');
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
// Download compiled HTML
|
|
318
|
-
$('#downloadBtn').on('click', function() {
|
|
319
|
-
if (!currentCompiledHTML) {
|
|
320
|
-
showError('No compiled HTML available for download.');
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
const blob = new Blob([currentCompiledHTML], { type: 'text/html' });
|
|
325
|
-
const url = URL.createObjectURL(blob);
|
|
326
|
-
const a = document.createElement('a');
|
|
327
|
-
a.href = url;
|
|
328
|
-
a.download = 'compiled-story.html';
|
|
329
|
-
document.body.appendChild(a);
|
|
330
|
-
a.click();
|
|
331
|
-
document.body.removeChild(a);
|
|
332
|
-
URL.revokeObjectURL(url);
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
// Preview compiled HTML
|
|
336
|
-
$('#previewBtn').on('click', function() {
|
|
337
|
-
if (!currentCompiledHTML) {
|
|
338
|
-
showError('No compiled HTML available for preview.');
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
const previewWindow = window.open('', '_blank');
|
|
343
|
-
previewWindow.document.write(currentCompiledHTML);
|
|
344
|
-
previewWindow.document.close();
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
// Utility function to escape HTML
|
|
348
|
-
function escapeHtml(text) {
|
|
349
|
-
const div = document.createElement('div');
|
|
350
|
-
div.textContent = text;
|
|
351
|
-
return div.innerHTML;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
// Initialize
|
|
355
|
-
loadStoryFormatsIndex();
|
|
356
|
-
});
|
|
357
|
-
</script>
|
|
358
|
-
</body>
|
|
359
|
-
</html>
|
|
@@ -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,n=t(638),i=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=i(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&&!n(e,String(o),t))return null;if(p&&!n(e,String(p),t))return null;for(const s of r)if(!n(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&&!n(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&&!n(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=i(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=i(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,n=t(311),i=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 n(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(i(e,r,h))return!1;for(let t=0;t<r.set.length;++t){const s=r.set[t];let n=null,i=null;if(s.forEach((e=>{e.semver===a&&(e=new o(">=0.0.0")),n=n||e,i=i||e,g(e.semver,n.semver,h)?n=e:f(e.semver,i.semver,h)&&(i=e)})),n.operator===d||n.operator===E)return!1;if((!i.operator||i.operator===d)&&m(e,i.semver))return!1;if(i.operator===E&&f(e,i.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),n=t(89),i=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 n(e,t,c);case"<":return i(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:n}=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[n.COERCERTLFULL]:a[n.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[n.COERCEFULL]:a[n.COERCE]);if(null===t)return null;const i=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(`${i}.${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 n=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">=":n&&!a(r,n)||(n=r);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}})),!n||t&&!a(t,n)||(t=n)}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,n=null,i=null;try{i=new o(r,t)}catch(e){return null}return e.forEach((e=>{i.test(e)&&(a&&1!==n.compare(e)||(a=e,n=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=n(r),e instanceof o)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new o(e.raw,r);if(e instanceof i)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 n=e.split(" ").map((e=>b(e,this.options))).join(" ").split(/\s+/).map((e=>x(e,this.options)));s&&(n=n.filter((e=>(l("loose invalid filter",e,this.options),!!e.match(p[u.COMPARATORLOOSE]))))),l("range list",n);const c=new Map,w=n.map((e=>new i(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)),n=t(587),i=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=R(e,r),l("xrange",e),e=T(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 n;return l("tilde",e,r,t,s,o,a),v(t)?n="":v(s)?n=`>=${t}.0.0 <${+t+1}.0.0-0`:v(o)?n=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:a?(l("replaceTilde pr",a),n=`>=${t}.${s}.${o}-${a} <${t}.${+s+1}.0-0`):n=`>=${t}.${s}.${o} <${t}.${+s+1}.0-0`,l("tilde return",n),n}))},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,n)=>{let i;return l("caret",e,r,t,o,a,n),v(t)?i="":v(o)?i=`>=${t}.0.0${s} <${+t+1}.0.0-0`:v(a)?i="0"===t?`>=${t}.${o}.0${s} <${t}.${+o+1}.0-0`:`>=${t}.${o}.0${s} <${+t+1}.0.0-0`:n?(l("replaceCaret pr",n),i="0"===t?"0"===o?`>=${t}.${o}.${a}-${n} <${t}.${o}.${+a+1}-0`:`>=${t}.${o}.${a}-${n} <${t}.${+o+1}.0-0`:`>=${t}.${o}.${a}-${n} <${+t+1}.0.0-0`):(l("no pr"),i="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",i),i}))},R=(e,r)=>(l("replaceXRanges",e,r),e.split(/\s+/).map((e=>L(e,r))).join(" ")),L=(e,r)=>{e=e.trim();const t=r.loose?p[u.XRANGELOOSE]:p[u.XRANGE];return e.replace(t,((t,s,o,a,n,i)=>{l("xRange",e,t,s,o,a,n,i);const c=v(o),p=c||v(a),u=p||v(n),h=u;return"="===s&&h&&(s=""),i=r.includePrerelease?"-0":"",c?t=">"===s||"<"===s?"<0.0.0-0":"*":s&&h?(p&&(a=0),n=0,">"===s?(s=">=",p?(o=+o+1,a=0,n=0):(a=+a+1,n=0)):"<="===s&&(s="<",p?o=+o+1:a=+a+1),"<"===s&&(i="-0"),t=`${s+o}.${a}.${n}${i}`):p?t=`>=${o}.0.0${i} <${+o+1}.0.0-0`:u&&(t=`>=${o}.${a}.0${i} <${o}.${+a+1}.0-0`),l("xRange return",t),t}))},T=(e,r)=>(l("replaceStars",e,r),e.trim().replace(p[u.STAR],"")),x=(e,r)=>(l("replaceGTE0",e,r),e.trim().replace(p[r.includePrerelease?u.GTE0PRE:u.GTE0],"")),N=e=>(r,t,s,o,a,n,i,l,c,p,u,h)=>`${t=v(s)?"":v(o)?`>=${s}.0.0${e?"-0":""}`:v(a)?`>=${s}.${o}.0${e?"-0":""}`:n?`>=${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!==i.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 n=null,i=null;const l=e.sort(((e,r)=>o(e,r,t)));for(const e of l)s(e,r,t)?(i=e,n||(n=e)):(i&&a.push([n,i]),i=null,n=null);n&&a.push([n,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),n=t(123),i=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),R=t(89),L=t(200),T=t(111),x=t(170),N=t(904),$=t(311),D=t(638),q=t(631),P=t(628),F=t(270),C=t(261),U=t(636),_=t(75),j=t(571),k=t(342),V=t(780),M=t(525),G=t(32);e.exports={parse:i,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:R,lte:L,cmp:T,coerce:x,Comparator:N,Range:$,satisfies:D,toComparators:q,maxSatisfying:P,minSatisfying:F,minVersion:C,validRange:U,outside:_,gtr:j,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:n.compareIdentifiers,rcompareIdentifiers:n.rcompareIdentifiers}},628:(e,r,t)=>{const s=t(908),o=t(311);e.exports=(e,r,t)=>{let a=null,n=null,i=null;try{i=new o(r,t)}catch(e){return null}return e.forEach((e=>{i.test(e)&&(a&&-1!==n.compare(e)||(a=e,n=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),n=t(272),i=(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++;n(e,o,r),u[e]=o,c[o]=r,p[o]=s,i[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 n=a>0,i=n?t:o,l=n?o:t,c=!!i.prerelease.length;if(l.prerelease.length&&!c){if(!l.patch&&!l.minor)return"major";if(0===l.compareMain(i))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?n[i.COMPARATORLOOSE]:n[i.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:n,t:i}=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:n,t:i}=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?n[i.LOOSE]:n[i.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?n[i.PRERELEASELOOSE]:n[i.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.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r);var s={};t.d(s,{default:()=>se});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("~~"),n=!1,i=0;a.length>i;i++){for(var l=a[i].split("~"),c=0;c<l.length;c+=2){var p=l[c],u=l[c+1],h="&"+p+";";t[h]=u,n&&(t["&"+p]=u),s[u]=h}n=!0}return r?{entities:o(o({},t),r.entities),characters:o(o({},s),r.characters)}:{entities:t,characters:s}}var n={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},i={};i.xml=a("lt~<~gt~>~quot~\"~apos~'~amp~&"),i.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~>"),i.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~®',i.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({},i),{all:i.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,n=void 0===a?"decimal":a,i=t.level;if(!e)return"";var l=g[o],c=h[void 0===i?"all":i].characters,u="hexadecimal"===n;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:n.xml},html4:{strict:E,attribute:w,body:n.html4},html5:{strict:E,attribute:w,body:n.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+=`:: ${Z(this.name)}`,this.tags.length>0&&(e+=` [${this.tags.map((e=>Z(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+=`>${f(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+=`>${f(this.#s)}</div>`,e}}const I=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i,A=function(e){if(!function(e){return"string"==typeof e&&I.test(e)}(e))throw TypeError("Invalid UUID");let r;return Uint8Array.of((r=parseInt(e.slice(0,8),16))>>>24,r>>>16&255,r>>>8&255,255&r,(r=parseInt(e.slice(9,13),16))>>>8,255&r,(r=parseInt(e.slice(14,18),16))>>>8,255&r,(r=parseInt(e.slice(19,23),16))>>>8,255&r,(r=parseInt(e.slice(24,36),16))/1099511627776&255,r/4294967296&255,r>>>24&255,r>>>16&255,r>>>8&255,255&r)},R=[];for(let e=0;e<256;++e)R.push((e+256).toString(16).slice(1));function L(e,r=0){return(R[e[r+0]]+R[e[r+1]]+R[e[r+2]]+R[e[r+3]]+"-"+R[e[r+4]]+R[e[r+5]]+"-"+R[e[r+6]]+R[e[r+7]]+"-"+R[e[r+8]]+R[e[r+9]]+"-"+R[e[r+10]]+R[e[r+11]]+R[e[r+12]]+R[e[r+13]]+R[e[r+14]]+R[e[r+15]]).toLowerCase()}let T;const x=new Uint8Array(16);function N(e){return 14+(e+64>>>9<<4)+1}function $(e,r){const t=(65535&e)+(65535&r);return(e>>16)+(r>>16)+(t>>16)<<16|65535&t}function D(e,r,t,s,o,a){return $((n=$($(r,e),$(s,a)))<<(i=o)|n>>>32-i,t);var n,i}function q(e,r,t,s,o,a,n){return D(r&t|~r&s,e,r,o,a,n)}function P(e,r,t,s,o,a,n){return D(r&s|t&~s,e,r,o,a,n)}function F(e,r,t,s,o,a,n){return D(r^t^s,e,r,o,a,n)}function C(e,r,t,s,o,a,n){return D(t^(r|~s),e,r,o,a,n)}const U=function(e){return function(e){const r=new Uint8Array(4*e.length);for(let t=0;t<4*e.length;t++)r[t]=e[t>>2]>>>t%4*8&255;return r}(function(e,r){const t=new Uint32Array(N(r)).fill(0);t.set(e),t[r>>5]|=128<<r%32,t[t.length-1]=r,e=t;let s=1732584193,o=-271733879,a=-1732584194,n=271733878;for(let r=0;r<e.length;r+=16){const t=s,i=o,l=a,c=n;s=q(s,o,a,n,e[r],7,-680876936),n=q(n,s,o,a,e[r+1],12,-389564586),a=q(a,n,s,o,e[r+2],17,606105819),o=q(o,a,n,s,e[r+3],22,-1044525330),s=q(s,o,a,n,e[r+4],7,-176418897),n=q(n,s,o,a,e[r+5],12,1200080426),a=q(a,n,s,o,e[r+6],17,-1473231341),o=q(o,a,n,s,e[r+7],22,-45705983),s=q(s,o,a,n,e[r+8],7,1770035416),n=q(n,s,o,a,e[r+9],12,-1958414417),a=q(a,n,s,o,e[r+10],17,-42063),o=q(o,a,n,s,e[r+11],22,-1990404162),s=q(s,o,a,n,e[r+12],7,1804603682),n=q(n,s,o,a,e[r+13],12,-40341101),a=q(a,n,s,o,e[r+14],17,-1502002290),o=q(o,a,n,s,e[r+15],22,1236535329),s=P(s,o,a,n,e[r+1],5,-165796510),n=P(n,s,o,a,e[r+6],9,-1069501632),a=P(a,n,s,o,e[r+11],14,643717713),o=P(o,a,n,s,e[r],20,-373897302),s=P(s,o,a,n,e[r+5],5,-701558691),n=P(n,s,o,a,e[r+10],9,38016083),a=P(a,n,s,o,e[r+15],14,-660478335),o=P(o,a,n,s,e[r+4],20,-405537848),s=P(s,o,a,n,e[r+9],5,568446438),n=P(n,s,o,a,e[r+14],9,-1019803690),a=P(a,n,s,o,e[r+3],14,-187363961),o=P(o,a,n,s,e[r+8],20,1163531501),s=P(s,o,a,n,e[r+13],5,-1444681467),n=P(n,s,o,a,e[r+2],9,-51403784),a=P(a,n,s,o,e[r+7],14,1735328473),o=P(o,a,n,s,e[r+12],20,-1926607734),s=F(s,o,a,n,e[r+5],4,-378558),n=F(n,s,o,a,e[r+8],11,-2022574463),a=F(a,n,s,o,e[r+11],16,1839030562),o=F(o,a,n,s,e[r+14],23,-35309556),s=F(s,o,a,n,e[r+1],4,-1530992060),n=F(n,s,o,a,e[r+4],11,1272893353),a=F(a,n,s,o,e[r+7],16,-155497632),o=F(o,a,n,s,e[r+10],23,-1094730640),s=F(s,o,a,n,e[r+13],4,681279174),n=F(n,s,o,a,e[r],11,-358537222),a=F(a,n,s,o,e[r+3],16,-722521979),o=F(o,a,n,s,e[r+6],23,76029189),s=F(s,o,a,n,e[r+9],4,-640364487),n=F(n,s,o,a,e[r+12],11,-421815835),a=F(a,n,s,o,e[r+15],16,530742520),o=F(o,a,n,s,e[r+2],23,-995338651),s=C(s,o,a,n,e[r],6,-198630844),n=C(n,s,o,a,e[r+7],10,1126891415),a=C(a,n,s,o,e[r+14],15,-1416354905),o=C(o,a,n,s,e[r+5],21,-57434055),s=C(s,o,a,n,e[r+12],6,1700485571),n=C(n,s,o,a,e[r+3],10,-1894986606),a=C(a,n,s,o,e[r+10],15,-1051523),o=C(o,a,n,s,e[r+1],21,-2054922799),s=C(s,o,a,n,e[r+8],6,1873313359),n=C(n,s,o,a,e[r+15],10,-30611744),a=C(a,n,s,o,e[r+6],15,-1560198380),o=C(o,a,n,s,e[r+13],21,1309151649),s=C(s,o,a,n,e[r+4],6,-145523070),n=C(n,s,o,a,e[r+11],10,-1120210379),a=C(a,n,s,o,e[r+2],15,718787259),o=C(o,a,n,s,e[r+9],21,-343485551),s=$(s,t),o=$(o,i),a=$(a,l),n=$(n,c)}return Uint32Array.of(s,o,a,n)}(function(e){if(0===e.length)return new Uint32Array;const r=new Uint32Array(N(8*e.length)).fill(0);for(let t=0;t<e.length;t++)r[t>>2]|=(255&e[t])<<t%4*8;return r}(e),8*e.length))},_="6ba7b810-9dad-11d1-80b4-00c04fd430c8",j="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function k(e,r,t,s,o,a){const n="string"==typeof t?function(e){e=unescape(encodeURIComponent(e));const r=new Uint8Array(e.length);for(let t=0;t<e.length;++t)r[t]=e.charCodeAt(t);return r}(t):t,i="string"==typeof s?A(s):s;if("string"==typeof s&&(s=A(s)),16!==s?.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+n.length);if(l.set(i),l.set(n,i.length),l=r(l),l[6]=15&l[6]|e,l[8]=63&l[8]|128,o){a=a||0;for(let e=0;e<16;++e)o[a+e]=l[e];return o}return L(l)}function V(e,r,t,s){return k(48,U,e,r,t,s)}V.DNS=_,V.URL=j;const M={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};const G=function(e,r,t){return!M.randomUUID||r||e?function(e,r,t){const s=(e=e||{}).random??e.rng?.()??function(){if(!T){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");T=crypto.getRandomValues.bind(crypto)}return T(x)}();if(s.length<16)throw new Error("Random bytes length must be >= 16");if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,r){if((t=t||0)<0||t+16>r.length)throw new RangeError(`UUID byte range ${t}:${t+15} is out of buffer bounds`);for(let e=0;e<16;++e)r[t+e]=s[e];return r}return L(s)}(e,r,t):M.randomUUID()};function B(e,r,t,s){switch(e){case 0:return r&t^~r&s;case 1:case 3:return r^t^s;case 2:return r&t^r&s^t&s}}function H(e,r){return e<<r|e>>>32-r}const z=function(e){const r=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520],s=new Uint8Array(e.length+1);s.set(e),s[e.length]=128;const o=(e=s).length/4+2,a=Math.ceil(o/16),n=new Array(a);for(let r=0;r<a;++r){const t=new Uint32Array(16);for(let s=0;s<16;++s)t[s]=e[64*r+4*s]<<24|e[64*r+4*s+1]<<16|e[64*r+4*s+2]<<8|e[64*r+4*s+3];n[r]=t}n[a-1][14]=8*(e.length-1)/Math.pow(2,32),n[a-1][14]=Math.floor(n[a-1][14]),n[a-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<a;++e){const s=new Uint32Array(80);for(let r=0;r<16;++r)s[r]=n[e][r];for(let e=16;e<80;++e)s[e]=H(s[e-3]^s[e-8]^s[e-14]^s[e-16],1);let o=t[0],a=t[1],i=t[2],l=t[3],c=t[4];for(let e=0;e<80;++e){const t=Math.floor(e/20),n=H(o,5)+B(t,a,i,l)+c+r[t]+s[e]>>>0;c=l,l=i,i=H(a,30)>>>0,a=o,o=n}t[0]=t[0]+o>>>0,t[1]=t[1]+a>>>0,t[2]=t[2]+i>>>0,t[3]=t[3]+l>>>0,t[4]=t[4]+c>>>0}return Uint8Array.of(t[0]>>24,t[0]>>16,t[0]>>8,t[0],t[1]>>24,t[1]>>16,t[1]>>8,t[1],t[2]>>24,t[2]>>16,t[2]>>8,t[2],t[3]>>24,t[3]>>16,t[3]>>8,t[3],t[4]>>24,t[4]>>16,t[4]>>8,t[4])};function X(e,r,t,s){return k(80,z,e,r,t,s)}function J(){return G().toUpperCase()}X.DNS=_,X.URL=j;class W{#e="Untitled Story";#o="";#a="";#n="";#i="";#l=1;#c=[];#p="";#u="";#t=null;#h={};#g="";#m="";constructor(e="Untitled Story"){this.name=e,this.#p="extwee",this.#u="2.3.6",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.#i}set formatVersion(e){if("string"!=typeof e)throw new Error("Story format version must be a String!");this.#i=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.#n}set format(e){if("string"!=typeof e)throw new Error("Story format must be a String!");this.#n=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),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=J(),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="${J()}"`;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 Y(e){return"string"!=typeof e?e:e.replace(/\\(.)/g,"$1")}function Z(e){return"string"!=typeof e?e:e.replace(/\\/g,"\\\\").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\{/g,"\\{").replace(/\}/g,"\\}")}function Q(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 K=t(589);class ee{#e="Untitled Story Format";#f="";#d="";#E="";#w="";#y="";#b="";#v=!1;#O="";constructor(e="Untitled Story Format",r="",t="",s="",o="",a="",n="",i=!1,l=""){this.name=e,this.version=r,this.description=t,this.author=s,this.image=o,this.url=a,this.license=n,this.proofing=i,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,K.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 re{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 n=s;[...s.matchAll(o)].forEach((e=>{n=n.replace(e[0],"")}));const i=/(\w+(?:-\w+)*)=([^\s>]+)/g;for(;null!==(a=i.exec(n));)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 te={parseTwee:function(e){const r=new W;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="",n="",i=e.slice(0,e.indexOf("\n"));a=e.substring(i.length+1,e.length).trim();const l=function(e){const r=Q(e,"{"),t=Q(e,"}");return-1!==r&&-1!==t&&t>r?{metadata:e.slice(r,t+1),remainingHeader:e.substring(0,r)+e.substring(t+1)}:null}(i);if(l&&(s=l.metadata,i=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=Q(e,"["),t=Q(e,"]");return-1!==r&&-1!==t&&t>r?{tags:e.slice(r,t+1),remainingHeader:e.substring(0,r)+e.substring(t+1)}:null}(i);if(c&&(t=c.tags,i=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)),i=i.trim(),!(i.length>0))throw new Error("Malformed passage header!");n=Y(i),t=t.map((e=>Y(e))),r.addPassage(new S(n,a,t,s,o)),o++})),r},parseJSON:function(e){let r={};const t=new W;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 ee;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,K.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 W;if("string"!=typeof e)throw new TypeError("TypeError: Content is not a string!");let t=null;const s=new re(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],n=h[t].entities,i="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 n=r[e];if(n)o=n;else if("&"===e[0]&&"#"===e[1]){var i=e[2],p="x"==i||"X"==i?parseInt(e.substr(3),16):parseInt(e.substr(2));o=p>=1114111?O:p>65535?c(p):v(l[p]||p)}}return o}(e,n,i,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 n=null;Object.prototype.hasOwnProperty.call(s,"position")&&(n=s.position);let i=null;Object.prototype.hasOwnProperty.call(s,"size")&&(i=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!==n&&(u.position=n),null!==i&&(u.size=i);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 W))throw new Error("Error: story must be a Story object!");if(!(r instanceof ee))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:J,Story:W,Passage:S,StoryFormat:ee,version:"2.3.3"},se=te,oe="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:null;return oe&&(oe.Extwee=te),s.default})()));
|