From 329c62c1fe0f3ba9cca3eea5d17eda8703a1baf5 Mon Sep 17 00:00:00 2001 From: dogukanakar Date: Sat, 27 Nov 2021 23:41:53 +0300 Subject: [PATCH 01/17] #173 started fronted app with django admin and copied the frontend to there --- backend/frontend/.babelrc | 10 + backend/frontend/__init__.py | 0 backend/frontend/admin.py | 3 + backend/frontend/apps.py | 6 + backend/frontend/migrations/__init__.py | 0 backend/frontend/models.py | 3 + .../frontend/node_modules/he/LICENSE-MIT.txt | 20 + backend/frontend/node_modules/he/README.md | 379 ++ backend/frontend/node_modules/he/bin/he | 148 + backend/frontend/node_modules/he/he.js | 345 ++ backend/frontend/node_modules/he/man/he.1 | 78 + backend/frontend/node_modules/he/package.json | 58 + backend/frontend/node_modules/ip/.jscsrc | 46 + backend/frontend/node_modules/ip/.jshintrc | 89 + backend/frontend/node_modules/ip/.npmignore | 2 + backend/frontend/node_modules/ip/.travis.yml | 15 + backend/frontend/node_modules/ip/README.md | 90 + backend/frontend/node_modules/ip/package.json | 21 + .../frontend/node_modules/ip/test/api-test.js | 407 ++ backend/frontend/node_modules/ms/index.js | 162 + backend/frontend/node_modules/ms/license.md | 21 + backend/frontend/node_modules/ms/package.json | 37 + backend/frontend/node_modules/ms/readme.md | 60 + .../frontend/node_modules/qs/test/.eslintrc | 17 + .../frontend/node_modules/qs/test/index.js | 7 + .../frontend/node_modules/qs/test/parse.js | 676 ++++ .../node_modules/qs/test/stringify.js | 679 ++++ .../frontend/node_modules/qs/test/utils.js | 136 + backend/frontend/package.json | 43 + backend/frontend/src/App.js | 37 + .../src/Controllers/LoginController.js | 41 + .../src/Controllers/ProfileController.js | 12 + .../src/Controllers/SampleEventController.js | 40 + .../src/Controllers/SignUpController.js | 15 + .../src/Controllers/SportsController.js | 18 + .../src/Views/Create Event/CreateEventPage.js | 231 ++ .../frontend/src/Views/Create Event/Index.js | 10 + backend/frontend/src/Views/Home/EventCard.js | 54 + backend/frontend/src/Views/Home/Home.css | 0 backend/frontend/src/Views/Home/Home.js | 74 + backend/frontend/src/Views/Home/Index.js | 10 + .../src/Views/Home/SportsEventCard.js | 30 + .../frontend/src/Views/Home/SportsInfoCard.js | 31 + .../src/Views/Login/ForgotPassword.js | 167 + backend/frontend/src/Views/Login/Index.js | 12 + backend/frontend/src/Views/Login/Login.js | 100 + backend/frontend/src/Views/Shared/Header.js | 151 + backend/frontend/src/Views/Shared/Layout.js | 24 + backend/frontend/src/Views/Signup/Index.js | 385 ++ backend/frontend/src/index.html | 13 + backend/frontend/src/index.js | 9 + .../src/logos/reb und (192 x 192 px).png | Bin 0 -> 7708 bytes .../src/logos/reb und (250 x 150 px).png | Bin 0 -> 10454 bytes .../src/logos/reb und (350 x 75 px).png | Bin 0 -> 9000 bytes .../src/logos/reb und (480 x 60 px).png | Bin 0 -> 8921 bytes .../src/logos/reb und(400 x 100 px).png | Bin 0 -> 10364 bytes backend/frontend/src/logos/reb und.png | Bin 0 -> 30440 bytes backend/frontend/static/frontend/bundle.js | 3578 +++++++++++++++++ backend/frontend/static/frontend/index.html | 13 + .../frontend/templates/frontend/index.html | 17 + backend/frontend/tests.py | 3 + backend/frontend/views.py | 5 + backend/frontend/webpack.config.js | 41 + 63 files changed, 8679 insertions(+) create mode 100644 backend/frontend/.babelrc create mode 100644 backend/frontend/__init__.py create mode 100644 backend/frontend/admin.py create mode 100644 backend/frontend/apps.py create mode 100644 backend/frontend/migrations/__init__.py create mode 100644 backend/frontend/models.py create mode 100644 backend/frontend/node_modules/he/LICENSE-MIT.txt create mode 100644 backend/frontend/node_modules/he/README.md create mode 100755 backend/frontend/node_modules/he/bin/he create mode 100644 backend/frontend/node_modules/he/he.js create mode 100644 backend/frontend/node_modules/he/man/he.1 create mode 100644 backend/frontend/node_modules/he/package.json create mode 100644 backend/frontend/node_modules/ip/.jscsrc create mode 100644 backend/frontend/node_modules/ip/.jshintrc create mode 100644 backend/frontend/node_modules/ip/.npmignore create mode 100644 backend/frontend/node_modules/ip/.travis.yml create mode 100644 backend/frontend/node_modules/ip/README.md create mode 100644 backend/frontend/node_modules/ip/package.json create mode 100644 backend/frontend/node_modules/ip/test/api-test.js create mode 100644 backend/frontend/node_modules/ms/index.js create mode 100644 backend/frontend/node_modules/ms/license.md create mode 100644 backend/frontend/node_modules/ms/package.json create mode 100644 backend/frontend/node_modules/ms/readme.md create mode 100644 backend/frontend/node_modules/qs/test/.eslintrc create mode 100644 backend/frontend/node_modules/qs/test/index.js create mode 100644 backend/frontend/node_modules/qs/test/parse.js create mode 100644 backend/frontend/node_modules/qs/test/stringify.js create mode 100644 backend/frontend/node_modules/qs/test/utils.js create mode 100644 backend/frontend/package.json create mode 100644 backend/frontend/src/App.js create mode 100644 backend/frontend/src/Controllers/LoginController.js create mode 100644 backend/frontend/src/Controllers/ProfileController.js create mode 100644 backend/frontend/src/Controllers/SampleEventController.js create mode 100644 backend/frontend/src/Controllers/SignUpController.js create mode 100644 backend/frontend/src/Controllers/SportsController.js create mode 100644 backend/frontend/src/Views/Create Event/CreateEventPage.js create mode 100644 backend/frontend/src/Views/Create Event/Index.js create mode 100644 backend/frontend/src/Views/Home/EventCard.js create mode 100644 backend/frontend/src/Views/Home/Home.css create mode 100644 backend/frontend/src/Views/Home/Home.js create mode 100644 backend/frontend/src/Views/Home/Index.js create mode 100644 backend/frontend/src/Views/Home/SportsEventCard.js create mode 100644 backend/frontend/src/Views/Home/SportsInfoCard.js create mode 100644 backend/frontend/src/Views/Login/ForgotPassword.js create mode 100644 backend/frontend/src/Views/Login/Index.js create mode 100644 backend/frontend/src/Views/Login/Login.js create mode 100644 backend/frontend/src/Views/Shared/Header.js create mode 100644 backend/frontend/src/Views/Shared/Layout.js create mode 100644 backend/frontend/src/Views/Signup/Index.js create mode 100644 backend/frontend/src/index.html create mode 100644 backend/frontend/src/index.js create mode 100644 backend/frontend/src/logos/reb und (192 x 192 px).png create mode 100644 backend/frontend/src/logos/reb und (250 x 150 px).png create mode 100644 backend/frontend/src/logos/reb und (350 x 75 px).png create mode 100644 backend/frontend/src/logos/reb und (480 x 60 px).png create mode 100644 backend/frontend/src/logos/reb und(400 x 100 px).png create mode 100644 backend/frontend/src/logos/reb und.png create mode 100644 backend/frontend/static/frontend/bundle.js create mode 100644 backend/frontend/static/frontend/index.html create mode 100644 backend/frontend/templates/frontend/index.html create mode 100644 backend/frontend/tests.py create mode 100644 backend/frontend/views.py create mode 100644 backend/frontend/webpack.config.js diff --git a/backend/frontend/.babelrc b/backend/frontend/.babelrc new file mode 100644 index 00000000..fea9a270 --- /dev/null +++ b/backend/frontend/.babelrc @@ -0,0 +1,10 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-react"], + "plugins": [ + ["@babel/plugin-transform-runtime", + { + "regenerator": true + } + ] + ] +} diff --git a/backend/frontend/__init__.py b/backend/frontend/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/frontend/admin.py b/backend/frontend/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/backend/frontend/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/backend/frontend/apps.py b/backend/frontend/apps.py new file mode 100644 index 00000000..04f7b898 --- /dev/null +++ b/backend/frontend/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class FrontendConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'frontend' diff --git a/backend/frontend/migrations/__init__.py b/backend/frontend/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/frontend/models.py b/backend/frontend/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/backend/frontend/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/backend/frontend/node_modules/he/LICENSE-MIT.txt b/backend/frontend/node_modules/he/LICENSE-MIT.txt new file mode 100644 index 00000000..a41e0a7e --- /dev/null +++ b/backend/frontend/node_modules/he/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/backend/frontend/node_modules/he/README.md b/backend/frontend/node_modules/he/README.md new file mode 100644 index 00000000..b2223a91 --- /dev/null +++ b/backend/frontend/node_modules/he/README.md @@ -0,0 +1,379 @@ +# he [![Build status](https://travis-ci.org/mathiasbynens/he.svg?branch=master)](https://travis-ci.org/mathiasbynens/he) [![Code coverage status](https://codecov.io/github/mathiasbynens/he/coverage.svg?branch=master)](https://codecov.io/github/mathiasbynens/he?branch=master) [![Dependency status](https://gemnasium.com/mathiasbynens/he.svg)](https://gemnasium.com/mathiasbynens/he) + +_he_ (for “HTML entities”) is a robust HTML entity encoder/decoder written in JavaScript. It supports [all standardized named character references as per HTML](https://html.spec.whatwg.org/multipage/syntax.html#named-character-references), handles [ambiguous ampersands](https://mathiasbynens.be/notes/ambiguous-ampersands) and other edge cases [just like a browser would](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references), has an extensive test suite, and — contrary to many other JavaScript solutions — _he_ handles astral Unicode symbols just fine. [An online demo is available.](https://mothereff.in/html-entities) + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install he +``` + +Via [Bower](http://bower.io/): + +```bash +bower install he +``` + +Via [Component](https://github.com/component/component): + +```bash +component install mathiasbynens/he +``` + +In a browser: + +```html + +``` + +In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/): + +```js +var he = require('he'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('he.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'he': 'path/to/he' + } + }, + ['he'], + function(he) { + console.log(he); + } +); +``` + +## API + +### `he.version` + +A string representing the semantic version number. + +### `he.encode(text, options)` + +This function takes a string of text and encodes (by default) any symbols that aren’t printable ASCII symbols and `&`, `<`, `>`, `"`, `'`, and `` ` ``, replacing them with character references. + +```js +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +As long as the input string contains [allowed code points](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream) only, the return value of this function is always valid HTML. Any [(invalid) code points that cannot be represented using a character reference](https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides) in the input are not encoded: + +```js +he.encode('foo \0 bar'); +// → 'foo \0 bar' +``` + +However, enabling [the `strict` option](https://github.com/mathiasbynens/he#strict) causes invalid code points to throw an exception. With `strict` enabled, `he.encode` either throws (if the input contains invalid code points) or returns a string of valid HTML. + +The `options` object is optional. It recognizes the following properties: + +#### `useNamedReferences` + +The default value for the `useNamedReferences` option is `false`. This means that `encode()` will not use any named character references (e.g. `©`) in the output — hexadecimal escapes (e.g. `©`) will be used instead. Set it to `true` to enable the use of named references. + +**Note that if compatibility with older browsers is a concern, this option should remain disabled.** + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly disallow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': false +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly allow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `decimal` + +The default value for the `decimal` option is `false`. If the option is enabled, `encode` will generally use decimal escapes (e.g. `©`) rather than hexadecimal escapes (e.g. `©`). Beside of this replacement, the basic behavior remains the same when combined with other options. For example: if both options `useNamedReferences` and `decimal` are enabled, named references (e.g. `©`) are used over decimal escapes. HTML entities without a named reference are encoded using decimal escapes. + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly disable decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'decimal': false +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly enable decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'decimal': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly allow named references and decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': true, + 'decimal': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `encodeEverything` + +The default value for the `encodeEverything` option is `false`. This means that `encode()` will not use any character references for printable ASCII symbols that don’t need escaping. Set it to `true` to encode every symbol in the input string. When set to `true`, this option takes precedence over `allowUnsafeSymbols` (i.e. setting the latter to `true` in such a case has no effect). + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly encode all symbols: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// This setting can be combined with the `useNamedReferences` option: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true, + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `encode()` will encode any HTML text content you feed it, even if it contains any symbols that cause [parse errors](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.encode('\x01'); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable error-tolerant mode: +he.encode('\x01', { + 'strict': false +}); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable strict mode: +he.encode('\x01', { + 'strict': true +}); +// → Parse error +``` + +#### `allowUnsafeSymbols` + +The default value for the `allowUnsafeSymbols` option is `false`. This means that characters that are unsafe for use in HTML content (`&`, `<`, `>`, `"`, `'`, and `` ` ``) will be encoded. When set to `true`, only non-ASCII characters will be encoded. If the `encodeEverything` option is set to `true`, this option will be ignored. + +```js +he.encode('foo © and & ampersand', { + 'allowUnsafeSymbols': true +}); +// → 'foo © and & ampersand' +``` + +#### Overriding default `encode` options globally + +The global default setting can be overridden by modifying the `he.encode.options` object. This saves you from passing in an `options` object for every call to `encode` if you want to use the non-default setting. + +```js +// Read the global default setting: +he.encode.options.useNamedReferences; +// → `false` by default + +// Override the global default setting: +he.encode.options.useNamedReferences = true; + +// Using the global default setting, which is now `true`: +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +### `he.decode(html, options)` + +This function takes a string of HTML and decodes any named and numerical character references in it using [the algorithm described in section 12.2.4.69 of the HTML spec](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). + +```js +he.decode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +The `options` object is optional. It recognizes the following properties: + +#### `isAttributeValue` + +The default value for the `isAttributeValue` option is `false`. This means that `decode()` will decode the string as if it were used in [a text context in an HTML document](https://html.spec.whatwg.org/multipage/syntax.html#data-state). HTML has different rules for [parsing character references in attribute values](https://html.spec.whatwg.org/multipage/syntax.html#character-reference-in-attribute-value-state) — set this option to `true` to treat the input string as if it were used as an attribute value. + +```js +// Using the global default setting (defaults to `false`, i.e. HTML text context): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML text context: +he.decode('foo&bar', { + 'isAttributeValue': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML attribute value context: +he.decode('foo&bar', { + 'isAttributeValue': true +}); +// → 'foo&bar' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `decode()` will decode any HTML text content you feed it, even if it contains any entities that cause [parse errors](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable error-tolerant mode: +he.decode('foo&bar', { + 'strict': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable strict mode: +he.decode('foo&bar', { + 'strict': true +}); +// → Parse error +``` + +#### Overriding default `decode` options globally + +The global default settings for the `decode` function can be overridden by modifying the `he.decode.options` object. This saves you from passing in an `options` object for every call to `decode` if you want to use a non-default setting. + +```js +// Read the global default setting: +he.decode.options.isAttributeValue; +// → `false` by default + +// Override the global default setting: +he.decode.options.isAttributeValue = true; + +// Using the global default setting, which is now `true`: +he.decode('foo&bar'); +// → 'foo&bar' +``` + +### `he.escape(text)` + +This function takes a string of text and escapes it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, `'`, and `` ` ``. + +```js +he.escape(''); +// → '<img src='x' onerror="prompt(1)">' +``` + +### `he.unescape(html, options)` + +`he.unescape` is an alias for `he.decode`. It takes a string of HTML and decodes any named and numerical character references in it. + +### Using the `he` binary + +To use the `he` binary in your shell, simply install _he_ globally using npm: + +```bash +npm install -g he +``` + +After that you will be able to encode/decode HTML entities from the command line: + +```bash +$ he --encode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --encode --use-named-refs 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --decode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz +``` + +Read a local text file, encode it for use in an HTML text context, and save the result to a new file: + +```bash +$ he --encode < foo.txt > foo-escaped.html +``` + +Or do the same with an online text file: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --encode > escaped.html +``` + +Or, the opposite — read a local file containing a snippet of HTML in a text context, decode it back to plain text, and save the result to a new file: + +```bash +$ he --decode < foo-escaped.html > foo.txt +``` + +Or do the same with an online HTML snippet: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --decode > decoded.txt +``` + +See `he --help` for the full list of options. + +## Support + +_he_ has been tested in at least: + +* Chrome 27-50 +* Firefox 3-45 +* Safari 4-9 +* Opera 10-12, 15–37 +* IE 6–11 +* Edge +* Narwhal 0.3.2 +* Node.js v0.10, v0.12, v4, v5 +* PhantomJS 1.9.0 +* Rhino 1.7RC4 +* RingoJS 0.8-0.11 + +## Unit tests & code coverage + +After cloning this repository, run `npm install` to install the dependencies needed for he development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +## Acknowledgements + +Thanks to [Simon Pieters](https://simon.html5.org/) ([@zcorpan](https://twitter.com/zcorpan)) for the many suggestions. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_he_ is available under the [MIT](https://mths.be/mit) license. diff --git a/backend/frontend/node_modules/he/bin/he b/backend/frontend/node_modules/he/bin/he new file mode 100755 index 00000000..cfdfd6c3 --- /dev/null +++ b/backend/frontend/node_modules/he/bin/he @@ -0,0 +1,148 @@ +#!/usr/bin/env node +(function() { + + var fs = require('fs'); + var he = require('../he.js'); + var strings = process.argv.splice(2); + var stdin = process.stdin; + var data; + var timeout; + var action; + var options = {}; + var log = console.log; + + var main = function() { + var option = strings[0]; + var count = 0; + + if (/^(?:-h|--help|undefined)$/.test(option)) { + log( + 'he v%s - https://mths.be/he', + he.version + ); + log([ + '\nUsage:\n', + '\the [--escape] string', + '\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] [--decimal] string', + '\the [--decode] [--attribute] [--strict] string', + '\the [-v | --version]', + '\the [-h | --help]', + '\nExamples:\n', + '\the --escape \\', + '\techo \'© 𝌆\' | he --decode' + ].join('\n')); + return process.exit(option ? 0 : 1); + } + + if (/^(?:-v|--version)$/.test(option)) { + log('v%s', he.version); + return process.exit(0); + } + + strings.forEach(function(string) { + // Process options + if (string == '--escape') { + action = 'escape'; + return; + } + if (string == '--encode') { + action = 'encode'; + return; + } + if (string == '--use-named-refs') { + action = 'encode'; + options.useNamedReferences = true; + return; + } + if (string == '--everything') { + action = 'encode'; + options.encodeEverything = true; + return; + } + if (string == '--allow-unsafe') { + action = 'encode'; + options.allowUnsafeSymbols = true; + return; + } + if (string == '--decimal') { + action = 'encode'; + options.decimal = true; + return; + } + if (string == '--decode') { + action = 'decode'; + return; + } + if (string == '--attribute') { + action = 'decode'; + options.isAttributeValue = true; + return; + } + if (string == '--strict') { + action = 'decode'; + options.strict = true; + return; + } + // Process string(s) + var result; + if (!action) { + log('Error: he requires at least one option and a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + try { + result = he[action](string, options); + log(result); + count++; + } catch(error) { + log(error.message + '\n'); + log('Error: failed to %s.', action); + log('If you think this is a bug in he, please report it:'); + log('https://github.com/mathiasbynens/he/issues/new'); + log( + '\nStack trace using he@%s:\n', + he.version + ); + log(error.stack); + return process.exit(1); + } + }); + if (!count) { + log('Error: he requires a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple strings were passed in. + return process.exit(0); + }; + + if (stdin.isTTY) { + // handle shell arguments + main(); + } else { + // Either the script is called from within a non-TTY context, or `stdin` + // content is being piped in. + if (!process.stdout.isTTY) { + // The script was called from a non-TTY context. This is a rather uncommon + // use case we don’t actively support. However, we don’t want the script + // to wait forever in such cases, so… + timeout = setTimeout(function() { + // …if no piped data arrived after a whole minute, handle shell + // arguments instead. + main(); + }, 60000); + } + data = ''; + stdin.on('data', function(chunk) { + clearTimeout(timeout); + data += chunk; + }); + stdin.on('end', function() { + strings.push(data.trim()); + main(); + }); + stdin.resume(); + } + +}()); diff --git a/backend/frontend/node_modules/he/he.js b/backend/frontend/node_modules/he/he.js new file mode 100644 index 00000000..14a58e9d --- /dev/null +++ b/backend/frontend/node_modules/he/he.js @@ -0,0 +1,345 @@ +/*! https://mths.be/he v1.2.0 by @mathias | MIT license */ +;(function(root) { + + // Detect free variables `exports`. + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module`. + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + // All astral symbols. + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides + var regexAsciiWhitelist = /[\x01-\x7F]/g; + // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides. + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'}; + + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g; + var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'}; + var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'}; + var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; + var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var has = function(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function(array, value) { + var index = -1; + var length = array.length; + while (++index < length) { + if (array[index] == value) { + return true; + } + } + return false; + }; + + var merge = function(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + var key; + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + return result; + }; + + // Modified version of `ucs2encode`; see https://mths.be/punycode. + var codePointToSymbol = function(codePoint, strict) { + var output = ''; + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.” + if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + return '\uFFFD'; + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + return decodeMapNumeric[codePoint]; + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function(codePoint) { + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }; + + var decEscape = function(codePoint) { + return '&#' + codePoint + ';'; + }; + + var parseError = function(message) { + throw Error('Parse error: ' + message); + }; + + /*--------------------------------------------------------------------------*/ + + var encode = function(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + var escapeCodePoint = options.decimal ? decEscape : hexEscape; + + var escapeBmpSymbol = function(symbol) { + return escapeCodePoint(symbol.charCodeAt(0)); + }; + + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function(symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + return escapeBmpSymbol(symbol); + }); + // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + if (useNamedReferences) { + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒') + .replace(/fj/g, 'fj'); + } + // Encode non-ASCII symbols. + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } + // Note: any remaining non-ASCII symbols are handled outside of the `if`. + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function(string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } + // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒'); + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, escapeBmpSymbol); + } + return string + // Encode astral symbols. + .replace(regexAstralSymbols, function($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return escapeCodePoint(codePoint); + }) + // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, escapeBmpSymbol); + }; + // Expose default options (so they can be overridden globally). + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false, + 'decimal' : false + }; + + var decode = function(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) { + var codePoint; + var semicolon; + var decDigits; + var hexDigits; + var reference; + var next; + + if ($1) { + reference = $1; + // Note: there is no need to check `has(decodeMap, reference)`. + return decodeMap[reference]; + } + + if ($2) { + // Decode named character references without trailing `;`, e.g. `&`. + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $2; + next = $3; + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + return $0; + } else { + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + // Note: there is no need to check `has(decodeMapLegacy, reference)`. + return decodeMapLegacy[reference] + (next || ''); + } + } + + if ($4) { + // Decode decimal escapes, e.g. `𝌆`. + decDigits = $4; + semicolon = $5; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(decDigits, 10); + return codePointToSymbol(codePoint, strict); + } + + if ($6) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $6; + semicolon = $7; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } + + // If we’re still here, `if ($7)` is implied; it’s an ambiguous + // ampersand for sure. https://mths.be/notes/ambiguous-ampersands + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + return $0; + }); + }; + // Expose default options (so they can be overridden globally). + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function(string) { + return string.replace(regexEscape, function($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + + /*--------------------------------------------------------------------------*/ + + var he = { + 'version': '1.2.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return he; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = he; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { // in Rhino or a web browser + root.he = he; + } + +}(this)); diff --git a/backend/frontend/node_modules/he/man/he.1 b/backend/frontend/node_modules/he/man/he.1 new file mode 100644 index 00000000..7696628a --- /dev/null +++ b/backend/frontend/node_modules/he/man/he.1 @@ -0,0 +1,78 @@ +.Dd April 5, 2016 +.Dt he 1 +.Sh NAME +.Nm he +.Nd encode/decode HTML entities just like a browser would +.Sh SYNOPSIS +.Nm +.Op Fl -escape Ar string +.br +.Op Fl -encode Ar string +.br +.Op Fl -encode Fl -use-named-refs Fl -everything Fl -allow-unsafe Ar string +.br +.Op Fl -decode Ar string +.br +.Op Fl -decode Fl -attribute Ar string +.br +.Op Fl -decode Fl -strict Ar string +.br +.Op Fl v | -version +.br +.Op Fl h | -help +.Sh DESCRIPTION +.Nm +encodes/decodes HTML entities in strings just like a browser would. +.Sh OPTIONS +.Bl -ohang -offset +.It Sy "--escape" +Take a string of text and escape it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, and `'`. +.It Sy "--encode" +Take a string of text and encode any symbols that aren't printable ASCII symbols and that can be replaced with character references. For example, it would turn `©` into `©`, but it wouldn't turn `+` into `+` since there is no point in doing so. Additionally, it replaces any remaining non-ASCII symbols with a hexadecimal escape sequence (e.g. `𝌆`). The return value of this function is always valid HTML. +.It Sy "--encode --use-named-refs" +Enable the use of named character references (like `©`) in the output. If compatibility with older browsers is a concern, don't use this option. +.It Sy "--encode --everything" +Encode every symbol in the input string, even safe printable ASCII symbols. +.It Sy "--encode --allow-unsafe" +Encode non-ASCII characters only. This leaves unsafe HTML/XML symbols like `&`, `<`, `>`, `"`, and `'` intact. +.It Sy "--encode --decimal" +Use decimal digits rather than hexadecimal digits for encoded character references, e.g. output `©` instead of `©`. +.It Sy "--decode" +Takes a string of HTML and decode any named and numerical character references in it using the algorithm described in the HTML spec. +.It Sy "--decode --attribute" +Parse the input as if it was an HTML attribute value rather than a string in an HTML text content. +.It Sy "--decode --strict" +Throw an error if an invalid character reference is encountered. +.It Sy "-v, --version" +Print he's version. +.It Sy "-h, --help" +Show the help screen. +.El +.Sh EXIT STATUS +The +.Nm he +utility exits with one of the following values: +.Pp +.Bl -tag -width flag -compact +.It Li 0 +.Nm +did what it was instructed to do successfully; either it encoded/decoded the input and printed the result, or it printed the version or usage message. +.It Li 1 +.Nm +encountered an error. +.El +.Sh EXAMPLES +.Bl -ohang -offset +.It Sy "he --escape ''" +Print an escaped version of the given string that is safe for use in HTML text contexts, escaping only `&`, `<`, `>`, `"`, and `'`. +.It Sy "he --decode '©𝌆'" +Print the decoded version of the given HTML string. +.It Sy "echo\ '©𝌆'\ |\ he --decode" +Print the decoded version of the HTML string that gets piped in. +.El +.Sh BUGS +he's bug tracker is located at . +.Sh AUTHOR +Mathias Bynens +.Sh WWW + diff --git a/backend/frontend/node_modules/he/package.json b/backend/frontend/node_modules/he/package.json new file mode 100644 index 00000000..76eff317 --- /dev/null +++ b/backend/frontend/node_modules/he/package.json @@ -0,0 +1,58 @@ +{ + "name": "he", + "version": "1.2.0", + "description": "A robust HTML entities encoder/decoder with full Unicode support.", + "homepage": "https://mths.be/he", + "main": "he.js", + "bin": "bin/he", + "keywords": [ + "string", + "entities", + "entity", + "html", + "encode", + "decode", + "unicode" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/he.git" + }, + "bugs": "https://github.com/mathiasbynens/he/issues", + "files": [ + "LICENSE-MIT.txt", + "he.js", + "bin/", + "man/" + ], + "directories": { + "bin": "bin", + "man": "man", + "test": "tests" + }, + "scripts": { + "test": "node tests/tests.js", + "build": "grunt build" + }, + "devDependencies": { + "codecov.io": "^0.1.6", + "grunt": "^0.4.5", + "grunt-cli": "^1.3.1", + "grunt-shell": "^1.1.1", + "grunt-template": "^0.2.3", + "istanbul": "^0.4.2", + "jsesc": "^1.0.0", + "lodash": "^4.8.2", + "qunit-extras": "^1.4.5", + "qunitjs": "~1.11.0", + "regenerate": "^1.2.1", + "regexgen": "^1.3.0", + "requirejs": "^2.1.22", + "sort-object": "^3.0.2" + } +} diff --git a/backend/frontend/node_modules/ip/.jscsrc b/backend/frontend/node_modules/ip/.jscsrc new file mode 100644 index 00000000..dbaae205 --- /dev/null +++ b/backend/frontend/node_modules/ip/.jscsrc @@ -0,0 +1,46 @@ +{ + "disallowKeywordsOnNewLine": [ "else" ], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleLineStrings": true, + "disallowMultipleVarDecl": true, + "disallowNewlineBeforeBlockStatements": true, + "disallowQuotedKeysInObjects": true, + "disallowSpaceAfterObjectKeys": true, + "disallowSpaceAfterPrefixUnaryOperators": true, + "disallowSpaceBeforePostfixUnaryOperators": true, + "disallowSpacesInCallExpression": true, + "disallowTrailingComma": true, + "disallowTrailingWhitespace": true, + "disallowYodaConditions": true, + + "requireCommaBeforeLineBreak": true, + "requireOperatorBeforeLineBreak": true, + "requireSpaceAfterBinaryOperators": true, + "requireSpaceAfterKeywords": [ "if", "for", "while", "else", "try", "catch" ], + "requireSpaceAfterLineComment": true, + "requireSpaceBeforeBinaryOperators": true, + "requireSpaceBeforeBlockStatements": true, + "requireSpaceBeforeKeywords": [ "else", "catch" ], + "requireSpaceBeforeObjectValues": true, + "requireSpaceBetweenArguments": true, + "requireSpacesInAnonymousFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "requireSpacesInFunctionDeclaration": { + "beforeOpeningCurlyBrace": true + }, + "requireSpacesInFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "requireSpacesInConditionalExpression": true, + "requireSpacesInForStatement": true, + "requireSpacesInsideArrayBrackets": "all", + "requireSpacesInsideObjectBrackets": "all", + "requireDotNotation": true, + + "maximumLineLength": 80, + "validateIndentation": 2, + "validateLineBreaks": "LF", + "validateParameterSeparator": ", ", + "validateQuoteMarks": "'" +} diff --git a/backend/frontend/node_modules/ip/.jshintrc b/backend/frontend/node_modules/ip/.jshintrc new file mode 100644 index 00000000..7e973902 --- /dev/null +++ b/backend/frontend/node_modules/ip/.jshintrc @@ -0,0 +1,89 @@ +{ + // JSHint Default Configuration File (as on JSHint website) + // See http://jshint.com/docs/ for more details + + "maxerr" : 50, // {int} Maximum error before stopping + + // Enforcing + "bitwise" : false, // true: Prohibit bitwise operators (&, |, ^, etc.) + "camelcase" : false, // true: Identifiers must be in camelCase + "curly" : false, // true: Require {} for every new block or scope + "eqeqeq" : true, // true: Require triple equals (===) for comparison + "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty() + "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc. + "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` + "indent" : 2, // {int} Number of spaces to use for indentation + "latedef" : true, // true: Require variables/functions to be defined before being used + "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()` + "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` + "noempty" : false, // true: Prohibit use of empty blocks + "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters. + "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment) + "plusplus" : false, // true: Prohibit use of `++` & `--` + "quotmark" : "single", // Quotation mark consistency: + // false : do nothing (default) + // true : ensure whatever is used is consistent + // "single" : require single quotes + // "double" : require double quotes + "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) + "unused" : true, // true: Require all defined variables be used + "strict" : true, // true: Requires all functions run in ES5 Strict Mode + "maxparams" : false, // {int} Max number of formal params allowed per function + "maxdepth" : 3, // {int} Max depth of nested blocks (within functions) + "maxstatements" : false, // {int} Max number statements per function + "maxcomplexity" : false, // {int} Max cyclomatic complexity per function + "maxlen" : false, // {int} Max number of characters per line + + // Relaxing + "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons) + "boss" : false, // true: Tolerate assignments where comparisons would be expected + "debug" : false, // true: Allow debugger statements e.g. browser breakpoints. + "eqnull" : false, // true: Tolerate use of `== null` + "es5" : false, // true: Allow ES5 syntax (ex: getters and setters) + "esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`) + "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) + // (ex: `for each`, multiple try/catch, function expression…) + "evil" : false, // true: Tolerate use of `eval` and `new Function()` + "expr" : false, // true: Tolerate `ExpressionStatement` as Programs + "funcscope" : false, // true: Tolerate defining variables inside control statements + "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') + "iterator" : false, // true: Tolerate using the `__iterator__` property + "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block + "laxbreak" : false, // true: Tolerate possibly unsafe line breakings + "laxcomma" : false, // true: Tolerate comma-first style coding + "loopfunc" : false, // true: Tolerate functions being defined in loops + "multistr" : false, // true: Tolerate multi-line strings + "noyield" : false, // true: Tolerate generator functions with no yield statement in them. + "notypeof" : false, // true: Tolerate invalid typeof operator values + "proto" : false, // true: Tolerate using the `__proto__` property + "scripturl" : false, // true: Tolerate script-targeted URLs + "shadow" : true, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` + "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation + "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` + "validthis" : false, // true: Tolerate using this in a non-constructor function + + // Environments + "browser" : true, // Web Browser (window, document, etc) + "browserify" : true, // Browserify (node.js code in the browser) + "couch" : false, // CouchDB + "devel" : true, // Development/debugging (alert, confirm, etc) + "dojo" : false, // Dojo Toolkit + "jasmine" : false, // Jasmine + "jquery" : false, // jQuery + "mocha" : true, // Mocha + "mootools" : false, // MooTools + "node" : true, // Node.js + "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) + "prototypejs" : false, // Prototype and Scriptaculous + "qunit" : false, // QUnit + "rhino" : false, // Rhino + "shelljs" : false, // ShellJS + "worker" : false, // Web Workers + "wsh" : false, // Windows Scripting Host + "yui" : false, // Yahoo User Interface + + // Custom Globals + "globals" : { + "module": true + } // additional predefined global variables +} diff --git a/backend/frontend/node_modules/ip/.npmignore b/backend/frontend/node_modules/ip/.npmignore new file mode 100644 index 00000000..1ca95717 --- /dev/null +++ b/backend/frontend/node_modules/ip/.npmignore @@ -0,0 +1,2 @@ +node_modules/ +npm-debug.log diff --git a/backend/frontend/node_modules/ip/.travis.yml b/backend/frontend/node_modules/ip/.travis.yml new file mode 100644 index 00000000..a3a8fad6 --- /dev/null +++ b/backend/frontend/node_modules/ip/.travis.yml @@ -0,0 +1,15 @@ +sudo: false +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "4" + - "6" + +before_install: + - travis_retry npm install -g npm@2.14.5 + - travis_retry npm install + +script: + - npm test diff --git a/backend/frontend/node_modules/ip/README.md b/backend/frontend/node_modules/ip/README.md new file mode 100644 index 00000000..22e5819f --- /dev/null +++ b/backend/frontend/node_modules/ip/README.md @@ -0,0 +1,90 @@ +# IP +[![](https://badge.fury.io/js/ip.svg)](https://www.npmjs.com/package/ip) + +IP address utilities for node.js + +## Installation + +### npm +```shell +npm install ip +``` + +### git + +```shell +git clone https://github.com/indutny/node-ip.git +``` + +## Usage +Get your ip address, compare ip addresses, validate ip addresses, etc. + +```js +var ip = require('ip'); + +ip.address() // my ip address +ip.isEqual('::1', '::0:1'); // true +ip.toBuffer('127.0.0.1') // Buffer([127, 0, 0, 1]) +ip.toString(new Buffer([127, 0, 0, 1])) // 127.0.0.1 +ip.fromPrefixLen(24) // 255.255.255.0 +ip.mask('192.168.1.134', '255.255.255.0') // 192.168.1.0 +ip.cidr('192.168.1.134/26') // 192.168.1.128 +ip.not('255.255.255.0') // 0.0.0.255 +ip.or('192.168.1.134', '0.0.0.255') // 192.168.1.255 +ip.isPrivate('127.0.0.1') // true +ip.isV4Format('127.0.0.1'); // true +ip.isV6Format('::ffff:127.0.0.1'); // true + +// operate on buffers in-place +var buf = new Buffer(128); +var offset = 64; +ip.toBuffer('127.0.0.1', buf, offset); // [127, 0, 0, 1] at offset 64 +ip.toString(buf, offset, 4); // '127.0.0.1' + +// subnet information +ip.subnet('192.168.1.134', '255.255.255.192') +// { networkAddress: '192.168.1.128', +// firstAddress: '192.168.1.129', +// lastAddress: '192.168.1.190', +// broadcastAddress: '192.168.1.191', +// subnetMask: '255.255.255.192', +// subnetMaskLength: 26, +// numHosts: 62, +// length: 64, +// contains: function(addr){...} } +ip.cidrSubnet('192.168.1.134/26') +// Same as previous. + +// range checking +ip.cidrSubnet('192.168.1.134/26').contains('192.168.1.190') // true + + +// ipv4 long conversion +ip.toLong('127.0.0.1'); // 2130706433 +ip.fromLong(2130706433); // '127.0.0.1' +``` + +### License + +This software is licensed under the MIT License. + +Copyright Fedor Indutny, 2012. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/backend/frontend/node_modules/ip/package.json b/backend/frontend/node_modules/ip/package.json new file mode 100644 index 00000000..c783fdd4 --- /dev/null +++ b/backend/frontend/node_modules/ip/package.json @@ -0,0 +1,21 @@ +{ + "name": "ip", + "version": "1.1.5", + "author": "Fedor Indutny ", + "homepage": "https://github.com/indutny/node-ip", + "repository": { + "type": "git", + "url": "http://github.com/indutny/node-ip.git" + }, + "main": "lib/ip", + "devDependencies": { + "jscs": "^2.1.1", + "jshint": "^2.8.0", + "mocha": "~1.3.2" + }, + "scripts": { + "test": "jscs lib/*.js test/*.js && jshint lib/*.js && mocha --reporter spec test/*-test.js", + "fix": "jscs lib/*.js test/*.js --fix" + }, + "license": "MIT" +} diff --git a/backend/frontend/node_modules/ip/test/api-test.js b/backend/frontend/node_modules/ip/test/api-test.js new file mode 100644 index 00000000..2e390f98 --- /dev/null +++ b/backend/frontend/node_modules/ip/test/api-test.js @@ -0,0 +1,407 @@ +'use strict'; + +var ip = require('..'); +var assert = require('assert'); +var net = require('net'); +var os = require('os'); + +describe('IP library for node.js', function() { + describe('toBuffer()/toString() methods', function() { + it('should convert to buffer IPv4 address', function() { + var buf = ip.toBuffer('127.0.0.1'); + assert.equal(buf.toString('hex'), '7f000001'); + assert.equal(ip.toString(buf), '127.0.0.1'); + }); + + it('should convert to buffer IPv4 address in-place', function() { + var buf = new Buffer(128); + var offset = 64; + ip.toBuffer('127.0.0.1', buf, offset); + assert.equal(buf.toString('hex', offset, offset + 4), '7f000001'); + assert.equal(ip.toString(buf, offset, 4), '127.0.0.1'); + }); + + it('should convert to buffer IPv6 address', function() { + var buf = ip.toBuffer('::1'); + assert(/(00){15,15}01/.test(buf.toString('hex'))); + assert.equal(ip.toString(buf), '::1'); + assert.equal(ip.toString(ip.toBuffer('1::')), '1::'); + assert.equal(ip.toString(ip.toBuffer('abcd::dcba')), 'abcd::dcba'); + }); + + it('should convert to buffer IPv6 address in-place', function() { + var buf = new Buffer(128); + var offset = 64; + ip.toBuffer('::1', buf, offset); + assert(/(00){15,15}01/.test(buf.toString('hex', offset, offset + 16))); + assert.equal(ip.toString(buf, offset, 16), '::1'); + assert.equal(ip.toString(ip.toBuffer('1::', buf, offset), + offset, 16), '1::'); + assert.equal(ip.toString(ip.toBuffer('abcd::dcba', buf, offset), + offset, 16), 'abcd::dcba'); + }); + + it('should convert to buffer IPv6 mapped IPv4 address', function() { + var buf = ip.toBuffer('::ffff:127.0.0.1'); + assert.equal(buf.toString('hex'), '00000000000000000000ffff7f000001'); + assert.equal(ip.toString(buf), '::ffff:7f00:1'); + + buf = ip.toBuffer('ffff::127.0.0.1'); + assert.equal(buf.toString('hex'), 'ffff000000000000000000007f000001'); + assert.equal(ip.toString(buf), 'ffff::7f00:1'); + + buf = ip.toBuffer('0:0:0:0:0:ffff:127.0.0.1'); + assert.equal(buf.toString('hex'), '00000000000000000000ffff7f000001'); + assert.equal(ip.toString(buf), '::ffff:7f00:1'); + }); + }); + + describe('fromPrefixLen() method', function() { + it('should create IPv4 mask', function() { + assert.equal(ip.fromPrefixLen(24), '255.255.255.0'); + }); + it('should create IPv6 mask', function() { + assert.equal(ip.fromPrefixLen(64), 'ffff:ffff:ffff:ffff::'); + }); + it('should create IPv6 mask explicitly', function() { + assert.equal(ip.fromPrefixLen(24, 'IPV6'), 'ffff:ff00::'); + }); + }); + + describe('not() method', function() { + it('should reverse bits in address', function() { + assert.equal(ip.not('255.255.255.0'), '0.0.0.255'); + }); + }); + + describe('or() method', function() { + it('should or bits in ipv4 addresses', function() { + assert.equal(ip.or('0.0.0.255', '192.168.1.10'), '192.168.1.255'); + }); + it('should or bits in ipv6 addresses', function() { + assert.equal(ip.or('::ff', '::abcd:dcba:abcd:dcba'), + '::abcd:dcba:abcd:dcff'); + }); + it('should or bits in mixed addresses', function() { + assert.equal(ip.or('0.0.0.255', '::abcd:dcba:abcd:dcba'), + '::abcd:dcba:abcd:dcff'); + }); + }); + + describe('mask() method', function() { + it('should mask bits in address', function() { + assert.equal(ip.mask('192.168.1.134', '255.255.255.0'), '192.168.1.0'); + assert.equal(ip.mask('192.168.1.134', '::ffff:ff00'), '::ffff:c0a8:100'); + }); + + it('should not leak data', function() { + for (var i = 0; i < 10; i++) + assert.equal(ip.mask('::1', '0.0.0.0'), '::'); + }); + }); + + describe('subnet() method', function() { + // Test cases calculated with http://www.subnet-calculator.com/ + var ipv4Subnet = ip.subnet('192.168.1.134', '255.255.255.192'); + + it('should compute ipv4 network address', function() { + assert.equal(ipv4Subnet.networkAddress, '192.168.1.128'); + }); + + it('should compute ipv4 network\'s first address', function() { + assert.equal(ipv4Subnet.firstAddress, '192.168.1.129'); + }); + + it('should compute ipv4 network\'s last address', function() { + assert.equal(ipv4Subnet.lastAddress, '192.168.1.190'); + }); + + it('should compute ipv4 broadcast address', function() { + assert.equal(ipv4Subnet.broadcastAddress, '192.168.1.191'); + }); + + it('should compute ipv4 subnet number of addresses', function() { + assert.equal(ipv4Subnet.length, 64); + }); + + it('should compute ipv4 subnet number of addressable hosts', function() { + assert.equal(ipv4Subnet.numHosts, 62); + }); + + it('should compute ipv4 subnet mask', function() { + assert.equal(ipv4Subnet.subnetMask, '255.255.255.192'); + }); + + it('should compute ipv4 subnet mask\'s length', function() { + assert.equal(ipv4Subnet.subnetMaskLength, 26); + }); + + it('should know whether a subnet contains an address', function() { + assert.equal(ipv4Subnet.contains('192.168.1.180'), true); + }); + + it('should know whether a subnet does not contain an address', function() { + assert.equal(ipv4Subnet.contains('192.168.1.195'), false); + }); + }); + + describe('subnet() method with mask length 32', function() { + // Test cases calculated with http://www.subnet-calculator.com/ + var ipv4Subnet = ip.subnet('192.168.1.134', '255.255.255.255'); + it('should compute ipv4 network\'s first address', function() { + assert.equal(ipv4Subnet.firstAddress, '192.168.1.134'); + }); + + it('should compute ipv4 network\'s last address', function() { + assert.equal(ipv4Subnet.lastAddress, '192.168.1.134'); + }); + + it('should compute ipv4 subnet number of addressable hosts', function() { + assert.equal(ipv4Subnet.numHosts, 1); + }); + }); + + describe('subnet() method with mask length 31', function() { + // Test cases calculated with http://www.subnet-calculator.com/ + var ipv4Subnet = ip.subnet('192.168.1.134', '255.255.255.254'); + it('should compute ipv4 network\'s first address', function() { + assert.equal(ipv4Subnet.firstAddress, '192.168.1.134'); + }); + + it('should compute ipv4 network\'s last address', function() { + assert.equal(ipv4Subnet.lastAddress, '192.168.1.135'); + }); + + it('should compute ipv4 subnet number of addressable hosts', function() { + assert.equal(ipv4Subnet.numHosts, 2); + }); + }); + + describe('cidrSubnet() method', function() { + // Test cases calculated with http://www.subnet-calculator.com/ + var ipv4Subnet = ip.cidrSubnet('192.168.1.134/26'); + + it('should compute an ipv4 network address', function() { + assert.equal(ipv4Subnet.networkAddress, '192.168.1.128'); + }); + + it('should compute an ipv4 network\'s first address', function() { + assert.equal(ipv4Subnet.firstAddress, '192.168.1.129'); + }); + + it('should compute an ipv4 network\'s last address', function() { + assert.equal(ipv4Subnet.lastAddress, '192.168.1.190'); + }); + + it('should compute an ipv4 broadcast address', function() { + assert.equal(ipv4Subnet.broadcastAddress, '192.168.1.191'); + }); + + it('should compute an ipv4 subnet number of addresses', function() { + assert.equal(ipv4Subnet.length, 64); + }); + + it('should compute an ipv4 subnet number of addressable hosts', function() { + assert.equal(ipv4Subnet.numHosts, 62); + }); + + it('should compute an ipv4 subnet mask', function() { + assert.equal(ipv4Subnet.subnetMask, '255.255.255.192'); + }); + + it('should compute an ipv4 subnet mask\'s length', function() { + assert.equal(ipv4Subnet.subnetMaskLength, 26); + }); + + it('should know whether a subnet contains an address', function() { + assert.equal(ipv4Subnet.contains('192.168.1.180'), true); + }); + + it('should know whether a subnet contains an address', function() { + assert.equal(ipv4Subnet.contains('192.168.1.195'), false); + }); + + }); + + describe('cidr() method', function() { + it('should mask address in CIDR notation', function() { + assert.equal(ip.cidr('192.168.1.134/26'), '192.168.1.128'); + assert.equal(ip.cidr('2607:f0d0:1002:51::4/56'), '2607:f0d0:1002::'); + }); + }); + + describe('isEqual() method', function() { + it('should check if addresses are equal', function() { + assert(ip.isEqual('127.0.0.1', '::7f00:1')); + assert(!ip.isEqual('127.0.0.1', '::7f00:2')); + assert(ip.isEqual('127.0.0.1', '::ffff:7f00:1')); + assert(!ip.isEqual('127.0.0.1', '::ffaf:7f00:1')); + assert(ip.isEqual('::ffff:127.0.0.1', '::ffff:127.0.0.1')); + assert(ip.isEqual('::ffff:127.0.0.1', '127.0.0.1')); + }); + }); + + + describe('isPrivate() method', function() { + it('should check if an address is localhost', function() { + assert.equal(ip.isPrivate('127.0.0.1'), true); + }); + + it('should check if an address is from a 192.168.x.x network', function() { + assert.equal(ip.isPrivate('192.168.0.123'), true); + assert.equal(ip.isPrivate('192.168.122.123'), true); + assert.equal(ip.isPrivate('192.162.1.2'), false); + }); + + it('should check if an address is from a 172.16.x.x network', function() { + assert.equal(ip.isPrivate('172.16.0.5'), true); + assert.equal(ip.isPrivate('172.16.123.254'), true); + assert.equal(ip.isPrivate('171.16.0.5'), false); + assert.equal(ip.isPrivate('172.25.232.15'), true); + assert.equal(ip.isPrivate('172.15.0.5'), false); + assert.equal(ip.isPrivate('172.32.0.5'), false); + }); + + it('should check if an address is from a 169.254.x.x network', function() { + assert.equal(ip.isPrivate('169.254.2.3'), true); + assert.equal(ip.isPrivate('169.254.221.9'), true); + assert.equal(ip.isPrivate('168.254.2.3'), false); + }); + + it('should check if an address is from a 10.x.x.x network', function() { + assert.equal(ip.isPrivate('10.0.2.3'), true); + assert.equal(ip.isPrivate('10.1.23.45'), true); + assert.equal(ip.isPrivate('12.1.2.3'), false); + }); + + it('should check if an address is from a private IPv6 network', function() { + assert.equal(ip.isPrivate('fd12:3456:789a:1::1'), true); + assert.equal(ip.isPrivate('fe80::f2de:f1ff:fe3f:307e'), true); + assert.equal(ip.isPrivate('::ffff:10.100.1.42'), true); + assert.equal(ip.isPrivate('::FFFF:172.16.200.1'), true); + assert.equal(ip.isPrivate('::ffff:192.168.0.1'), true); + }); + + it('should check if an address is from the internet', function() { + assert.equal(ip.isPrivate('165.225.132.33'), false); // joyent.com + }); + + it('should check if an address is a loopback IPv6 address', function() { + assert.equal(ip.isPrivate('::'), true); + assert.equal(ip.isPrivate('::1'), true); + assert.equal(ip.isPrivate('fe80::1'), true); + }); + }); + + describe('loopback() method', function() { + describe('undefined', function() { + it('should respond with 127.0.0.1', function() { + assert.equal(ip.loopback(), '127.0.0.1') + }); + }); + + describe('ipv4', function() { + it('should respond with 127.0.0.1', function() { + assert.equal(ip.loopback('ipv4'), '127.0.0.1') + }); + }); + + describe('ipv6', function() { + it('should respond with fe80::1', function() { + assert.equal(ip.loopback('ipv6'), 'fe80::1') + }); + }); + }); + + describe('isLoopback() method', function() { + describe('127.0.0.1', function() { + it('should respond with true', function() { + assert.ok(ip.isLoopback('127.0.0.1')) + }); + }); + + describe('127.8.8.8', function () { + it('should respond with true', function () { + assert.ok(ip.isLoopback('127.8.8.8')) + }); + }); + + describe('8.8.8.8', function () { + it('should respond with false', function () { + assert.equal(ip.isLoopback('8.8.8.8'), false); + }); + }); + + describe('fe80::1', function() { + it('should respond with true', function() { + assert.ok(ip.isLoopback('fe80::1')) + }); + }); + + describe('::1', function() { + it('should respond with true', function() { + assert.ok(ip.isLoopback('::1')) + }); + }); + + describe('::', function() { + it('should respond with true', function() { + assert.ok(ip.isLoopback('::')) + }); + }); + }); + + describe('address() method', function() { + describe('undefined', function() { + it('should respond with a private ip', function() { + assert.ok(ip.isPrivate(ip.address())); + }); + }); + + describe('private', function() { + [ undefined, 'ipv4', 'ipv6' ].forEach(function(family) { + describe(family, function() { + it('should respond with a private ip', function() { + assert.ok(ip.isPrivate(ip.address('private', family))); + }); + }); + }); + }); + + var interfaces = os.networkInterfaces(); + + Object.keys(interfaces).forEach(function(nic) { + describe(nic, function() { + [ undefined, 'ipv4' ].forEach(function(family) { + describe(family, function() { + it('should respond with an ipv4 address', function() { + var addr = ip.address(nic, family); + assert.ok(!addr || net.isIPv4(addr)); + }); + }); + }); + + describe('ipv6', function() { + it('should respond with an ipv6 address', function() { + var addr = ip.address(nic, 'ipv6'); + assert.ok(!addr || net.isIPv6(addr)); + }); + }) + }); + }); + }); + + describe('toLong() method', function() { + it('should respond with a int', function() { + assert.equal(ip.toLong('127.0.0.1'), 2130706433); + assert.equal(ip.toLong('255.255.255.255'), 4294967295); + }); + }); + + describe('fromLong() method', function() { + it('should repond with ipv4 address', function() { + assert.equal(ip.fromLong(2130706433), '127.0.0.1'); + assert.equal(ip.fromLong(4294967295), '255.255.255.255'); + }); + }) +}); diff --git a/backend/frontend/node_modules/ms/index.js b/backend/frontend/node_modules/ms/index.js new file mode 100644 index 00000000..c4498bcc --- /dev/null +++ b/backend/frontend/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} diff --git a/backend/frontend/node_modules/ms/license.md b/backend/frontend/node_modules/ms/license.md new file mode 100644 index 00000000..69b61253 --- /dev/null +++ b/backend/frontend/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/backend/frontend/node_modules/ms/package.json b/backend/frontend/node_modules/ms/package.json new file mode 100644 index 00000000..eea666e1 --- /dev/null +++ b/backend/frontend/node_modules/ms/package.json @@ -0,0 +1,37 @@ +{ + "name": "ms", + "version": "2.1.2", + "description": "Tiny millisecond conversion utility", + "repository": "zeit/ms", + "main": "./index", + "files": [ + "index.js" + ], + "scripts": { + "precommit": "lint-staged", + "lint": "eslint lib/* bin/*", + "test": "mocha tests.js" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "license": "MIT", + "devDependencies": { + "eslint": "4.12.1", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1" + } +} diff --git a/backend/frontend/node_modules/ms/readme.md b/backend/frontend/node_modules/ms/readme.md new file mode 100644 index 00000000..9a1996b1 --- /dev/null +++ b/backend/frontend/node_modules/ms/readme.md @@ -0,0 +1,60 @@ +# ms + +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/backend/frontend/node_modules/qs/test/.eslintrc b/backend/frontend/node_modules/qs/test/.eslintrc new file mode 100644 index 00000000..9ebbb921 --- /dev/null +++ b/backend/frontend/node_modules/qs/test/.eslintrc @@ -0,0 +1,17 @@ +{ + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "consistent-return": 2, + "function-paren-newline": 0, + "max-lines": 0, + "max-lines-per-function": 0, + "max-nested-callbacks": [2, 3], + "max-statements": 0, + "no-buffer-constructor": 0, + "no-extend-native": 0, + "no-magic-numbers": 0, + "object-curly-newline": 0, + "sort-keys": 0 + } +} diff --git a/backend/frontend/node_modules/qs/test/index.js b/backend/frontend/node_modules/qs/test/index.js new file mode 100644 index 00000000..5e6bc8fb --- /dev/null +++ b/backend/frontend/node_modules/qs/test/index.js @@ -0,0 +1,7 @@ +'use strict'; + +require('./parse'); + +require('./stringify'); + +require('./utils'); diff --git a/backend/frontend/node_modules/qs/test/parse.js b/backend/frontend/node_modules/qs/test/parse.js new file mode 100644 index 00000000..89677899 --- /dev/null +++ b/backend/frontend/node_modules/qs/test/parse.js @@ -0,0 +1,676 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('parse()', function (t) { + t.test('parses a simple string', function (st) { + st.deepEqual(qs.parse('0=foo'), { 0: 'foo' }); + st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); + st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); + st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); + st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); + st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); + st.deepEqual(qs.parse('foo'), { foo: '' }); + st.deepEqual(qs.parse('foo='), { foo: '' }); + st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); + st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); + st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); + st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); + st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); + st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); + st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); + st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + st.end(); + }); + + t.test('allows enabling dot notation', function (st) { + st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); + st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); + t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); + t.deepEqual( + qs.parse('a[b][c][d][e][f][g][h]=i'), + { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, + 'defaults to a depth of 5' + ); + + t.test('only parses one level when depth = 1', function (st) { + st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); + st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); + st.end(); + }); + + t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); + + t.test('parses an explicit array', function (st) { + st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); + st.end(); + }); + + t.test('parses a mix of simple and explicit arrays', function (st) { + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + + st.end(); + }); + + t.test('parses a nested array', function (st) { + st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); + st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); + st.end(); + }); + + t.test('allows to specify array indices', function (st) { + st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); + st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } }); + st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); + st.end(); + }); + + t.test('limits specific array indices to arrayLimit', function (st) { + st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] }); + st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); + + t.test('supports encoded = signs', function (st) { + st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); + st.end(); + }); + + t.test('is ok with url encoded strings', function (st) { + st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); + st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); + st.end(); + }); + + t.test('allows brackets in the value', function (st) { + st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); + st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); + st.end(); + }); + + t.test('allows empty values', function (st) { + st.deepEqual(qs.parse(''), {}); + st.deepEqual(qs.parse(null), {}); + st.deepEqual(qs.parse(undefined), {}); + st.end(); + }); + + t.test('transforms arrays to objects', function (st) { + st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } }); + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } }); + st.end(); + }); + + t.test('transforms arrays to objects (dot notation)', function (st) { + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); + st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); + st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + st.end(); + }); + + t.test('correctly prunes undefined values when converting an array to an object', function (st) { + st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } }); + st.end(); + }); + + t.test('supports malformed uri characters', function (st) { + st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); + st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); + st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); + st.end(); + }); + + t.test('doesn\'t produce empty keys', function (st) { + st.deepEqual(qs.parse('_r=1&'), { _r: '1' }); + st.end(); + }); + + t.test('cannot access Object prototype', function (st) { + qs.parse('constructor[prototype][bad]=bad'); + qs.parse('bad[constructor][prototype][bad]=bad'); + st.equal(typeof Object.prototype.bad, 'undefined'); + st.end(); + }); + + t.test('parses arrays of objects', function (st) { + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); + st.end(); + }); + + t.test('allows for empty strings in arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); + + st.deepEqual( + qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 20 + array indices: null then empty string works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 0 + array brackets: null then empty string works' + ); + + st.deepEqual( + qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 20 + array indices: empty string then null works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 0 + array brackets: empty string then null works' + ); + + st.deepEqual( + qs.parse('a[]=&a[]=b&a[]=c'), + { a: ['', 'b', 'c'] }, + 'array brackets: empty strings work' + ); + st.end(); + }); + + t.test('compacts sparse arrays', function (st) { + st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] }); + st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] }); + st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] }); + st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] }); + st.end(); + }); + + t.test('parses semi-parsed strings', function (st) { + st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); + st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); + st.end(); + }); + + t.test('parses buffers correctly', function (st) { + var b = SaferBuffer.from('test'); + st.deepEqual(qs.parse({ a: b }), { a: b }); + st.end(); + }); + + t.test('parses jquery-param strings', function (st) { + // readable = 'filter[0][]=int1&filter[0][]==&filter[0][]=77&filter[]=and&filter[2][]=int2&filter[2][]==&filter[2][]=8' + var encoded = 'filter%5B0%5D%5B%5D=int1&filter%5B0%5D%5B%5D=%3D&filter%5B0%5D%5B%5D=77&filter%5B%5D=and&filter%5B2%5D%5B%5D=int2&filter%5B2%5D%5B%5D=%3D&filter%5B2%5D%5B%5D=8'; + var expected = { filter: [['int1', '=', '77'], 'and', ['int2', '=', '8']] }; + st.deepEqual(qs.parse(encoded), expected); + st.end(); + }); + + t.test('continues parsing when no parent is found', function (st) { + st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); + st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); + st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); + st.end(); + }); + + t.test('does not error when parsing a very long array', function (st) { + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str = str + '&' + str; + } + + st.doesNotThrow(function () { + qs.parse(str); + }); + + st.end(); + }); + + t.test('should not throw when a native prototype has an enumerable property', function (st) { + Object.prototype.crash = ''; + Array.prototype.crash = ''; + st.doesNotThrow(qs.parse.bind(null, 'a=b')); + st.deepEqual(qs.parse('a=b'), { a: 'b' }); + st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + st.end(); + }); + + t.test('parses a string with an alternative string delimiter', function (st) { + st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('parses a string with an alternative RegExp delimiter', function (st) { + st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not use non-splittable objects as delimiters', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding parameter limit', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); + st.end(); + }); + + t.test('allows setting the parameter limit to Infinity', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding array limit', function (st) { + st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } }); + st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } }); + st.end(); + }); + + t.test('allows disabling array parsing', function (st) { + var indices = qs.parse('a[0]=b&a[1]=c', { parseArrays: false }); + st.deepEqual(indices, { a: { 0: 'b', 1: 'c' } }); + st.equal(Array.isArray(indices.a), false, 'parseArrays:false, indices case is not an array'); + + var emptyBrackets = qs.parse('a[]=b', { parseArrays: false }); + st.deepEqual(emptyBrackets, { a: { 0: 'b' } }); + st.equal(Array.isArray(emptyBrackets.a), false, 'parseArrays:false, empty brackets case is not an array'); + + st.end(); + }); + + t.test('allows for query string prefix', function (st) { + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' }); + st.end(); + }); + + t.test('parses an object', function (st) { + var input = { + 'user[name]': { 'pop[bob]': 3 }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses string with comma as array divider', function (st) { + st.deepEqual(qs.parse('foo=bar,tee', { comma: true }), { foo: ['bar', 'tee'] }); + st.deepEqual(qs.parse('foo[bar]=coffee,tee', { comma: true }), { foo: { bar: ['coffee', 'tee'] } }); + st.deepEqual(qs.parse('foo=', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true, strictNullHandling: true }), { foo: null }); + st.end(); + }); + + t.test('parses an object in dot notation', function (st) { + var input = { + 'user.name': { 'pop[bob]': 3 }, + 'user.email.': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input, { allowDots: true }); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object and not child values', function (st) { + var input = { + 'user[name]': { 'pop[bob]': { test: 3 } }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': { test: 3 } }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('does not blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + st.deepEqual(result, { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not crash when parsing circular references', function (st) { + var a = {}; + a.b = a; + + var parsed; + + st.doesNotThrow(function () { + parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + st.equal('bar' in parsed.foo, true); + st.equal('baz' in parsed.foo, true); + st.equal(parsed.foo.bar, 'baz'); + st.deepEqual(parsed.foo.baz, a); + st.end(); + }); + + t.test('does not crash when parsing deep objects', function (st) { + var parsed; + var str = 'foo'; + + for (var i = 0; i < 5000; i++) { + str += '[p]'; + } + + str += '=bar'; + + st.doesNotThrow(function () { + parsed = qs.parse(str, { depth: 5000 }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + + var depth = 0; + var ref = parsed.foo; + while ((ref = ref.p)) { + depth += 1; + } + + st.equal(depth, 5000, 'parsed is 5000 properties deep'); + + st.end(); + }); + + t.test('parses null objects correctly', { skip: !Object.create }, function (st) { + var a = Object.create(null); + a.b = 'c'; + + st.deepEqual(qs.parse(a), { b: 'c' }); + var result = qs.parse({ a: a }); + st.equal('a' in result, true, 'result has "a" property'); + st.deepEqual(result.a, a); + st.end(); + }); + + t.test('parses dates correctly', function (st) { + var now = new Date(); + st.deepEqual(qs.parse({ a: now }), { a: now }); + st.end(); + }); + + t.test('parses regular expressions correctly', function (st) { + var re = /^test$/; + st.deepEqual(qs.parse({ a: re }), { a: re }); + st.end(); + }); + + t.test('does not allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {}); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {}); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: false }), + {}, + 'bare "toString" results in {}' + ); + + st.end(); + }); + + t.test('can allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: true }), + { toString: '' }, + 'bare "toString" results in { toString: "" }' + ); + + st.end(); + }); + + t.test('params starting with a closing bracket', function (st) { + st.deepEqual(qs.parse(']=toString'), { ']': 'toString' }); + st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' }); + st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' }); + st.end(); + }); + + t.test('params starting with a starting bracket', function (st) { + st.deepEqual(qs.parse('[=toString'), { '[': 'toString' }); + st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' }); + st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' }); + st.end(); + }); + + t.test('add keys to objects', function (st) { + st.deepEqual( + qs.parse('a[b]=c&a=d'), + { a: { b: 'c', d: true } }, + 'can add keys to objects' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString'), + { a: { b: 'c' } }, + 'can not overwrite prototype' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { allowPrototypes: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with allowPrototypes true' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { plainObjects: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with plainObjects true' + ); + + st.end(); + }); + + t.test('can return null objects', { skip: !Object.create }, function (st) { + var expected = Object.create(null); + expected.a = Object.create(null); + expected.a.b = 'c'; + expected.a.hasOwnProperty = 'd'; + st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); + st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); + var expectedArray = Object.create(null); + expectedArray.a = Object.create(null); + expectedArray.a[0] = 'b'; + expectedArray.a.c = 'd'; + st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); + st.end(); + }); + + t.test('can parse with custom encoding', function (st) { + st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { + decoder: function (str) { + var reg = /%([0-9A-F]{2})/ig; + var result = []; + var parts = reg.exec(str); + while (parts) { + result.push(parseInt(parts[1], 16)); + parts = reg.exec(str); + } + return String(iconv.decode(SaferBuffer.from(result), 'shift_jis')); + } + }), { 県: '大阪府' }); + st.end(); + }); + + t.test('receives the default decoder as a second argument', function (st) { + st.plan(1); + qs.parse('a', { + decoder: function (str, defaultDecoder) { + st.equal(defaultDecoder, utils.decode); + } + }); + st.end(); + }); + + t.test('throws error with wrong decoder', function (st) { + st['throws'](function () { + qs.parse({}, { decoder: 'string' }); + }, new TypeError('Decoder has to be a function.')); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.parse('a[b]=true', options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.parse('a=b', { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('parses an iso-8859-1 string if asked to', function (st) { + st.deepEqual(qs.parse('%A2=%BD', { charset: 'iso-8859-1' }), { '¢': '½' }); + st.end(); + }); + + var urlEncodedCheckmarkInUtf8 = '%E2%9C%93'; + var urlEncodedOSlashInUtf8 = '%C3%B8'; + var urlEncodedNumCheckmark = '%26%2310003%3B'; + var urlEncodedNumSmiley = '%26%239786%3B'; + + t.test('prefers an utf-8 charset specified by the utf8 sentinel to a default charset of iso-8859-1', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'iso-8859-1' }), { ø: 'ø' }); + st.end(); + }); + + t.test('prefers an iso-8859-1 charset specified by the utf8 sentinel to a default charset of utf-8', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('does not require the utf8 sentinel to be defined before the parameters whose decoding it affects', function (st) { + st.deepEqual(qs.parse('a=' + urlEncodedOSlashInUtf8 + '&utf8=' + urlEncodedNumCheckmark, { charsetSentinel: true, charset: 'utf-8' }), { a: 'ø' }); + st.end(); + }); + + t.test('should ignore an utf8 sentinel with an unknown value', function (st) { + st.deepEqual(qs.parse('utf8=foo&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to utf-8 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to iso-8859-1 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('interprets numeric entities in iso-8859-1 when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('handles a custom decoder returning `null`, in the `iso-8859-1` charset, when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=&bar=' + urlEncodedNumSmiley, { + charset: 'iso-8859-1', + decoder: function (str, defaultDecoder, charset) { + return str ? defaultDecoder(str, defaultDecoder, charset) : null; + }, + interpretNumericEntities: true + }), { foo: null, bar: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1' }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities when the charset is utf-8, even when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'utf-8', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret %uXXXX syntax in iso-8859-1 mode', function (st) { + st.deepEqual(qs.parse('%u263A=%u263A', { charset: 'iso-8859-1' }), { '%u263A': '%u263A' }); + st.end(); + }); + + t.end(); +}); diff --git a/backend/frontend/node_modules/qs/test/stringify.js b/backend/frontend/node_modules/qs/test/stringify.js new file mode 100644 index 00000000..53041c2e --- /dev/null +++ b/backend/frontend/node_modules/qs/test/stringify.js @@ -0,0 +1,679 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('stringify()', function (t) { + t.test('stringifies a querystring object', function (st) { + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: 1 }), 'a=1'); + st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); + st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); + st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); + st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); + st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); + st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); + st.end(); + }); + + t.test('stringifies falsy values', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(null, { strictNullHandling: true }), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(0), ''); + st.end(); + }); + + t.test('adds query prefix', function (st) { + st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b'); + st.end(); + }); + + t.test('with query prefix, outputs blank string given an empty object', function (st) { + st.equal(qs.stringify({}, { addQueryPrefix: true }), ''); + st.end(); + }); + + t.test('stringifies nested falsy values', function (st) { + st.equal(qs.stringify({ a: { b: { c: null } } }), 'a%5Bb%5D%5Bc%5D='); + st.equal(qs.stringify({ a: { b: { c: null } } }, { strictNullHandling: true }), 'a%5Bb%5D%5Bc%5D'); + st.equal(qs.stringify({ a: { b: { c: false } } }), 'a%5Bb%5D%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies a nested object', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies a nested object with dots notation', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); + st.end(); + }); + + t.test('stringifies an array value', function (st) { + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }), + 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma' }), + 'a=b%2Cc%2Cd', + 'comma => comma' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'default => indices' + ); + st.end(); + }); + + t.test('omits nulls when asked', function (st) { + st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); + st.end(); + }); + + t.test('omits nested nulls when asked', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('omits array indices when asked', function (st) { + st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); + st.end(); + }); + + t.test('stringifies a nested array value', function (st) { + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'comma' }), 'a%5Bb%5D=c%2Cd'); // a[b]=c,d + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.end(); + }); + + t.test('stringifies a nested array value with dots notation', function (st) { + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a.b[0]=c&a.b[1]=d', + 'indices: stringifies with dots + indices' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a.b[]=c&a.b[]=d', + 'brackets: stringifies with dots + brackets' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'comma' } + ), + 'a.b=c,d', + 'comma: stringifies with dots + comma' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false } + ), + 'a.b[0]=c&a.b[1]=d', + 'default: stringifies with dots + indices' + ); + st.end(); + }); + + t.test('stringifies an object inside an array', function (st) { + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D=c', // a[0][b]=c + 'indices => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D=c', // a[][b]=c + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }), + 'a%5B0%5D%5Bb%5D=c', + 'default => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'indices => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1', + 'brackets => brackets' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an array with mixed objects and primitives', function (st) { + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), + 'a[][b]=1&a[]=2&a[]=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an object inside an array with dots notation', function (st) { + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b=c', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false } + ), + 'a[0].b=c', + 'default => indices' + ); + + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b.c[0]=1', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b.c[]=1', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false } + ), + 'a[0].b.c[0]=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('does not omit object keys when indices = false', function (st) { + st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when indices=true', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); + st.end(); + }); + + t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); + st.end(); + }); + + t.test('stringifies a complicated object', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies an empty value', function (st) { + st.equal(qs.stringify({ a: '' }), 'a='); + st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); + + st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); + st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); + + st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); + + st.end(); + }); + + t.test('stringifies a null object', { skip: !Object.create }, function (st) { + var obj = Object.create(null); + obj.a = 'b'; + st.equal(qs.stringify(obj), 'a=b'); + st.end(); + }); + + t.test('returns an empty string for invalid input', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(''), ''); + st.end(); + }); + + t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) { + var obj = { a: Object.create(null) }; + + obj.a.b = 'c'; + st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('drops keys with a value of undefined', function (st) { + st.equal(qs.stringify({ a: undefined }), ''); + + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); + st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); + st.end(); + }); + + t.test('url encodes values', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('stringifies a date', function (st) { + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + st.equal(qs.stringify({ a: now }), str); + st.end(); + }); + + t.test('stringifies the weird object from qs', function (st) { + st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); + st.end(); + }); + + t.test('skips properties that are part of the object prototype', function (st) { + Object.prototype.crash = 'test'; + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + delete Object.prototype.crash; + st.end(); + }); + + t.test('stringifies boolean values', function (st) { + st.equal(qs.stringify({ a: true }), 'a=true'); + st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); + st.equal(qs.stringify({ b: false }), 'b=false'); + st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies buffer values', function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); + st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); + st.end(); + }); + + t.test('stringifies an object using an alternative delimiter', function (st) { + st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); + st.end(); + }); + + t.test('doesn\'t blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.stringify({ a: 'b', c: 'd' }); + global.Buffer = tempBuffer; + st.equal(result, 'a=b&c=d'); + st.end(); + }); + + t.test('selects properties when filter=array', function (st) { + st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); + st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); + + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' } + ), + 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2] } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('supports custom representations when filter=function', function (st) { + var calls = 0; + var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; + var filterFunc = function (prefix, value) { + calls += 1; + if (calls === 1) { + st.equal(prefix, '', 'prefix is empty'); + st.equal(value, obj); + } else if (prefix === 'c') { + return void 0; + } else if (value instanceof Date) { + st.equal(prefix, 'e[f]'); + return value.getTime(); + } + return value; + }; + + st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); + st.equal(calls, 5); + st.end(); + }); + + t.test('can disable uri encoding', function (st) { + st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); + st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); + st.end(); + }); + + t.test('can sort the keys', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); + st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); + st.end(); + }); + + t.test('can sort the keys at depth 3 or more too', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: sort, encode: false } + ), + 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb' + ); + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: null, encode: false } + ), + 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b' + ); + st.end(); + }); + + t.test('can stringify with custom encoding', function (st) { + st.equal(qs.stringify({ 県: '大阪府', '': '' }, { + encoder: function (str) { + if (str.length === 0) { + return ''; + } + var buf = iconv.encode(str, 'shiftjis'); + var result = []; + for (var i = 0; i < buf.length; ++i) { + result.push(buf.readUInt8(i).toString(16)); + } + return '%' + result.join('%'); + } + }), '%8c%a7=%91%e5%8d%e3%95%7b&='); + st.end(); + }); + + t.test('receives the default encoder as a second argument', function (st) { + st.plan(2); + qs.stringify({ a: 1 }, { + encoder: function (str, defaultEncoder) { + st.equal(defaultEncoder, utils.encode); + } + }); + st.end(); + }); + + t.test('throws error with wrong encoder', function (st) { + st['throws'](function () { + qs.stringify({}, { encoder: 'string' }); + }, new TypeError('Encoder has to be a function.')); + st.end(); + }); + + t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { + encoder: function (buffer) { + if (typeof buffer === 'string') { + return buffer; + } + return String.fromCharCode(buffer.readUInt8(0) + 97); + } + }), 'a=b'); + st.end(); + }); + + t.test('serializeDate option', function (st) { + var date = new Date(); + st.equal( + qs.stringify({ a: date }), + 'a=' + date.toISOString().replace(/:/g, '%3A'), + 'default is toISOString' + ); + + var mutatedDate = new Date(); + mutatedDate.toISOString = function () { + throw new SyntaxError(); + }; + st['throws'](function () { + mutatedDate.toISOString(); + }, SyntaxError); + st.equal( + qs.stringify({ a: mutatedDate }), + 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'), + 'toISOString works even when method is not locally present' + ); + + var specificDate = new Date(6); + st.equal( + qs.stringify( + { a: specificDate }, + { serializeDate: function (d) { return d.getTime() * 7; } } + ), + 'a=42', + 'custom serializeDate function called' + ); + + st.end(); + }); + + t.test('RFC 1738 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d'); + st.end(); + }); + + t.test('RFC 3986 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d'); + st.end(); + }); + + t.test('Backward compatibility to RFC 3986', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('Edge cases and unknown formats', function (st) { + ['UFO1234', false, 1234, null, {}, []].forEach( + function (format) { + st['throws']( + function () { + qs.stringify({ a: 'b c' }, { format: format }); + }, + new TypeError('Unknown format option provided.') + ); + } + ); + st.end(); + }); + + t.test('encodeValuesOnly', function (st) { + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } + ), + 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' + ); + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] } + ), + 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h' + ); + st.end(); + }); + + t.test('encodeValuesOnly - strictNullHandling', function (st) { + st.equal( + qs.stringify( + { a: { b: null } }, + { encodeValuesOnly: true, strictNullHandling: true } + ), + 'a[b]' + ); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.stringify({ a: 'b' }, { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('respects a charset of iso-8859-1', function (st) { + st.equal(qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }), '%E6=%E6'); + st.end(); + }); + + t.test('encodes unrepresentable chars as numeric entities in iso-8859-1 mode', function (st) { + st.equal(qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }), 'a=%26%239786%3B'); + st.end(); + }); + + t.test('respects an explicit charset of utf-8 (the default)', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charset: 'utf-8' }), 'a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is utf-8', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'utf-8' }), 'utf8=%E2%9C%93&a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is iso-8859-1', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }), 'utf8=%26%2310003%3B&a=%E6'); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.stringify({}, options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('strictNullHandling works with custom filter', function (st) { + var filter = function (prefix, value) { + return value; + }; + + var options = { strictNullHandling: true, filter: filter }; + st.equal(qs.stringify({ key: null }, options), 'key'); + st.end(); + }); + + t.test('strictNullHandling works with null serializeDate', function (st) { + var serializeDate = function () { + return null; + }; + var options = { strictNullHandling: true, serializeDate: serializeDate }; + var date = new Date(); + st.equal(qs.stringify({ key: date }, options), 'key'); + st.end(); + }); + + t.end(); +}); diff --git a/backend/frontend/node_modules/qs/test/utils.js b/backend/frontend/node_modules/qs/test/utils.js new file mode 100644 index 00000000..da31ce53 --- /dev/null +++ b/backend/frontend/node_modules/qs/test/utils.js @@ -0,0 +1,136 @@ +'use strict'; + +var test = require('tape'); +var inspect = require('object-inspect'); +var SaferBuffer = require('safer-buffer').Buffer; +var forEach = require('for-each'); +var utils = require('../lib/utils'); + +test('merge()', function (t) { + t.deepEqual(utils.merge(null, true), [null, true], 'merges true into null'); + + t.deepEqual(utils.merge(null, [42]), [null, 42], 'merges null into an array'); + + t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); + + var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); + t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array'); + + var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } }); + t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array'); + + var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' }); + t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array'); + + var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); + t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); + + var noOptionsNonObjectSource = utils.merge({ foo: 'baz' }, 'bar'); + t.deepEqual(noOptionsNonObjectSource, { foo: 'baz', bar: true }); + + t.test( + 'avoids invoking array setters unnecessarily', + { skip: typeof Object.defineProperty !== 'function' }, + function (st) { + var setCount = 0; + var getCount = 0; + var observed = []; + Object.defineProperty(observed, 0, { + get: function () { + getCount += 1; + return { bar: 'baz' }; + }, + set: function () { setCount += 1; } + }); + utils.merge(observed, [null]); + st.equal(setCount, 0); + st.equal(getCount, 1); + observed[0] = observed[0]; // eslint-disable-line no-self-assign + st.equal(setCount, 1); + st.equal(getCount, 2); + st.end(); + } + ); + + t.end(); +}); + +test('assign()', function (t) { + var target = { a: 1, b: 2 }; + var source = { b: 3, c: 4 }; + var result = utils.assign(target, source); + + t.equal(result, target, 'returns the target'); + t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged'); + t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched'); + + t.end(); +}); + +test('combine()', function (t) { + t.test('both arrays', function (st) { + var a = [1]; + var b = [2]; + var combined = utils.combine(a, b); + + st.deepEqual(a, [1], 'a is not mutated'); + st.deepEqual(b, [2], 'b is not mutated'); + st.notEqual(a, combined, 'a !== combined'); + st.notEqual(b, combined, 'b !== combined'); + st.deepEqual(combined, [1, 2], 'combined is a + b'); + + st.end(); + }); + + t.test('one array, one non-array', function (st) { + var aN = 1; + var a = [aN]; + var bN = 2; + var b = [bN]; + + var combinedAnB = utils.combine(aN, b); + st.deepEqual(b, [bN], 'b is not mutated'); + st.notEqual(aN, combinedAnB, 'aN + b !== aN'); + st.notEqual(a, combinedAnB, 'aN + b !== a'); + st.notEqual(bN, combinedAnB, 'aN + b !== bN'); + st.notEqual(b, combinedAnB, 'aN + b !== b'); + st.deepEqual([1, 2], combinedAnB, 'first argument is array-wrapped when not an array'); + + var combinedABn = utils.combine(a, bN); + st.deepEqual(a, [aN], 'a is not mutated'); + st.notEqual(aN, combinedABn, 'a + bN !== aN'); + st.notEqual(a, combinedABn, 'a + bN !== a'); + st.notEqual(bN, combinedABn, 'a + bN !== bN'); + st.notEqual(b, combinedABn, 'a + bN !== b'); + st.deepEqual([1, 2], combinedABn, 'second argument is array-wrapped when not an array'); + + st.end(); + }); + + t.test('neither is an array', function (st) { + var combined = utils.combine(1, 2); + st.notEqual(1, combined, '1 + 2 !== 1'); + st.notEqual(2, combined, '1 + 2 !== 2'); + st.deepEqual([1, 2], combined, 'both arguments are array-wrapped when not an array'); + + st.end(); + }); + + t.end(); +}); + +test('isBuffer()', function (t) { + forEach([null, undefined, true, false, '', 'abc', 42, 0, NaN, {}, [], function () {}, /a/g], function (x) { + t.equal(utils.isBuffer(x), false, inspect(x) + ' is not a buffer'); + }); + + var fakeBuffer = { constructor: Buffer }; + t.equal(utils.isBuffer(fakeBuffer), false, 'fake buffer is not a buffer'); + + var saferBuffer = SaferBuffer.from('abc'); + t.equal(utils.isBuffer(saferBuffer), true, 'SaferBuffer instance is a buffer'); + + var buffer = Buffer.from ? Buffer.from('abc') : new Buffer('abc'); + t.equal(utils.isBuffer(buffer), true, 'real Buffer instance is a buffer'); + t.end(); +}); diff --git a/backend/frontend/package.json b/backend/frontend/package.json new file mode 100644 index 00000000..2c5d507b --- /dev/null +++ b/backend/frontend/package.json @@ -0,0 +1,43 @@ +{ + "name": "webpack-demo", + "version": "1.0.0", + "description": "", + "private": true, + "scripts": { + "dev": "webpack --mode development --entry ./src/index.js --output-path ./static/frontend", + "build": "webpack --mode production --entry ./src/index.js --output-path ./static/frontend", + "start": "webpack serve --config ./webpack.config.js --mode development --open" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.0", + "@babel/preset-env": "^7.16.0", + "@babel/runtime": "^7.16.0", + "babel-loader": "^8.2.3", + "html-webpack-plugin": "^5.5.0", + "webpack": "^5.62.1", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.4.0" + }, + "dependencies": { + "@babel/preset-react": "^7.16.0", + "@date-io/date-fns": "^1.3.13", + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@material-ui/icons": "^4.11.2", + "@mui/icons-material": "^5.1.0", + "@mui/lab": "^5.0.0-alpha.54", + "@mui/material": "^5.0.6", + "@mui/styles": "^5.1.0", + "date-fns": "^2.25.0", + "joi": "^17.4.2", + "lodash": "^4.17.21", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-router-dom": "^6.0.1", + "url-loader": "^4.1.1" + } +} diff --git a/backend/frontend/src/App.js b/backend/frontend/src/App.js new file mode 100644 index 00000000..00a61df2 --- /dev/null +++ b/backend/frontend/src/App.js @@ -0,0 +1,37 @@ +import React from 'react'; +import { + Route, + Routes, + useHistory +} from "react-router-dom"; + +import Home from './Views/Home/Index' +import Login from './Views/Login/Index' +import Layout from './Views/Shared/Layout' +import CreateEventPage from "./Views/Create Event/CreateEventPage"; +import Signup from './Views/Signup/Index' +import ResetPasswordPage from "./Views/Login/ForgotPassword"; + + + + +const App = () => { + console.log("sa") + return ( + + + }> + }/> + }/> + }/> + }/> + } /> + } /> + }/> + + + + ) +} + +export default App diff --git a/backend/frontend/src/Controllers/LoginController.js b/backend/frontend/src/Controllers/LoginController.js new file mode 100644 index 00000000..3662c379 --- /dev/null +++ b/backend/frontend/src/Controllers/LoginController.js @@ -0,0 +1,41 @@ +export function obtainToken(username_in, password_in){ + const options = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username:username_in,password:password_in}) + } + return fetch("http://34.122.205.8/api/token/obtain/",options) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) +} +export function refreshToken(refresh_token){ + const options = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({refresh:refresh_token}) + } + return fetch("http://34.122.205.8/api/token/refresh/",options) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) +} + +export function postResetPassword(email){ + const options = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ email: email}) + } + return fetch("http://34.122.205.8/api/password/reset/",options) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) +} +export function postResetPasswordConfirmation(newPassword,token){ + const options = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password: newPassword, token: token}) + } + return fetch("http://34.122.205.8/api/password/reset/confirm/",options) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) +} diff --git a/backend/frontend/src/Controllers/ProfileController.js b/backend/frontend/src/Controllers/ProfileController.js new file mode 100644 index 00000000..76a9cae5 --- /dev/null +++ b/backend/frontend/src/Controllers/ProfileController.js @@ -0,0 +1,12 @@ +const GetProfile = username =>{ + + const options = { + method: 'GET', + headers: { 'Accept': 'application/json','Content-Type': 'application/json'}, + } + return fetch("http://34.122.205.8/api/users/"+username,options) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) +} + +export default GetProfile \ No newline at end of file diff --git a/backend/frontend/src/Controllers/SampleEventController.js b/backend/frontend/src/Controllers/SampleEventController.js new file mode 100644 index 00000000..ce9be0f4 --- /dev/null +++ b/backend/frontend/src/Controllers/SampleEventController.js @@ -0,0 +1,40 @@ + + +export async function getSampleEvents(){ + const events = []; + events.push({ + title:"Beginner Friendly Tennis Match", + type: "Tennis", + username:"hatice_gun", + avatar: "../Images/11500.jpg", + desc: "Beginners are welcome", + location: "Etiler Tennis Club", + date: "13/11/2021 15:00-16:00" + }); + events.push({ + title:"Beginner Friendly Tennis Match", + type: "Tennis", + username:"hatice_gun", + avatar: "../Images/11500.jpg", + desc: "Beginners are welcome", + location: "Etiler Tennis Club", + date: "13/11/2021 15:00-16:00" + }); + events.push({ + title:"Beginner Friendly Tennis Match", + type: "Tennis", + username:"hatice_gun", + avatar: "../Images/11500.jpg", + desc: "Beginners are welcome", + location: "Etiler Tennis Club", + date: "13/11/2021 15:00-16:00" + }); + for(let event of events){ + const data = await fetch("https://sports.api.decathlon.com/sports/"+event.type.toLowerCase(), + {headers: {'Accept-Language': 'en-US'}}) + .then(response=>response.json()) + event["image"] = data.data.relationships.images.data[0].url + } + console.log(events); + return events +}; \ No newline at end of file diff --git a/backend/frontend/src/Controllers/SignUpController.js b/backend/frontend/src/Controllers/SignUpController.js new file mode 100644 index 00000000..31c08199 --- /dev/null +++ b/backend/frontend/src/Controllers/SignUpController.js @@ -0,0 +1,15 @@ + + +const SignUpFunction = values =>{ + + const options = { + method: 'POST', + headers: { 'Accept': 'application/json','Content-Type': 'application/json'}, + body: JSON.stringify(values) + } + return fetch("http://34.122.205.8/api/user/create/",options) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) +} + +export default SignUpFunction \ No newline at end of file diff --git a/backend/frontend/src/Controllers/SportsController.js b/backend/frontend/src/Controllers/SportsController.js new file mode 100644 index 00000000..85a466bf --- /dev/null +++ b/backend/frontend/src/Controllers/SportsController.js @@ -0,0 +1,18 @@ + + +export function getSports(){ + const indices = [8,15,23,19,39,26,27,21,60,5,3,24] + return fetch("https://sports.api.decathlon.com/sports?parents_only=True",{headers: {'Accept-Language': 'en-US'}}) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) + .then(r=>{return indices.map(i => r.data[i]);}) + .then(r=>r.map(d=>({img:d.relationships.images.data[0].url, title:d.attributes.name, desc:d.attributes.description}))) +} +export function getSportsList(){ + return fetch("https://sports.api.decathlon.com/sports?parents_only=true&has_icon=true&has_hecathlon_id=true", + {headers: {'Accept-Language': 'en-US'}}) + .then(response=>response.json()) + .then(r=>{console.log(r); return r}) + .then(r=>r.data.map(d=>({label:d.attributes.name}))) +} + diff --git a/backend/frontend/src/Views/Create Event/CreateEventPage.js b/backend/frontend/src/Views/Create Event/CreateEventPage.js new file mode 100644 index 00000000..5cf882a5 --- /dev/null +++ b/backend/frontend/src/Views/Create Event/CreateEventPage.js @@ -0,0 +1,231 @@ +import * as React from "react"; +import Button from "@mui/material/Button"; +import {Grid, Paper, TextField, Typography, Box, SvgIcon, Container, Divider} from "@mui/material"; +import {makeStyles, createStyles} from '@mui/styles' +import {Link} from 'react-router-dom' +import Joi from 'joi' +import TimePicker from '@mui/lab/TimePicker'; +import LocalizationProvider from '@mui/lab/LocalizationProvider'; +import AdapterDateFns from '@mui/lab/AdapterDateFns'; +import DatePicker from '@mui/lab/DatePicker' +import {Autocomplete} from "@mui/lab"; +import {useEffect, useState} from "react"; +import {getSportsList} from "../../Controllers/SportsController"; + +const initialState = { + title: { + value: "", + changed: false, + error: undefined + }, + description: { + value: "", + changed: false, + error: undefined + }, + location: { + value: "", + changed: false, + error: undefined + }, + minAge: { + value: 18, + changed: false, + error: undefined + }, + maxAge: { + value: 80, + changed: false, + error: undefined + }, + playerCapacity: { + value: 2, + changed: false, + error: undefined + }, + spectatorCapacity: { + value: 0, + changed: false, + error: undefined + }, + +} + + + +export default function CreateEventPage(props){ + const paperStyle = {padding:20, height: '76vh', width:500, margin:"20px auto", background: "#e4f2f7"}; + const textFieldStyle = {backgroundColor: 'white', marginTop: 10, marginBottom: 10} + const inputStyle = {height:"10mm",fontSize:"5px"} + const typographyStyle = {paddingBottom:5,color:'#4c4c4c'} + const [date, setDate] = React.useState(null); + const [timeStart, setTimeStart] = React.useState(null ); + const [timeEnd, setTimeEnd] = React.useState( null ); + const [ sport, setSport ] = React.useState(""); + const [options, setOptions] = React.useState([{}]); + const [skill, setSkill] = React.useState(null); + const skillOptions = [{label: "Beginner"},{label: "Preintermediate"},{label: "Intermediate"}, + {label: "Advanced"},{label: "Expert"}] + const [inputs, setInputs] = useState(initialState) + const getValue = inputs => ({ + title: inputs.title.value, + description: inputs.description.value, + location: inputs.location.value, + minAge: inputs.minAge.value, + maxAge: inputs.maxAge.value, + playerCapacity: inputs.playerCapacity.value, + spectatorCapacity: inputs.spectatorCapacity.value + }) + const handleChange = e=>{ + const newInputs = {...inputs} + const value = getValue(newInputs) + value[e.target.id] = e.target.value + newInputs[e.target.id] = { + value: e.target.value, + changed: true + } + setInputs(newInputs) + } + useEffect(_=>{ + getSportsList().then(r=>setOptions(r.sort(function (a, b) { + return a.label.localeCompare(b.label);}) + )).catch(console.log) + }, []) + const getSport = (event,val) => { + setSport(val); + } + const getSkillInput = (event,val) =>{ + setSkill(val); + } + const handleDateChange = (newValue) => { + setDate(newValue); + }; + const handleStartChange = (newValue) => { + setTimeStart(newValue); + }; + const handleEndChange = (newValue) => { + setTimeEnd(newValue); + } + function createEvent(){ + + } + return( + + +
+ + Create a new event + + + + + + value ? setInput(value.label) : setInput(event.target.value)} + renderInput={params => { + return ( + + )}} onInputChange={getSport}/> + + + + + + + + + + } + /> + + + + + } + /> + + + + + } + /> + + + + + + value ? setSkill(value.label) : setSkill(event.target.value)} + renderInput={params => { + return ( + + )}} onInputChange={getSkillInput}/> + + + + + + + + + + + + + + + + + + + +
+
+
); +} diff --git a/backend/frontend/src/Views/Create Event/Index.js b/backend/frontend/src/Views/Create Event/Index.js new file mode 100644 index 00000000..8e06bada --- /dev/null +++ b/backend/frontend/src/Views/Create Event/Index.js @@ -0,0 +1,10 @@ +import React from 'react'; +import CreateEventPage from "./CreateEventPage"; + +const CreateEvent = () => { + return ( + + ) +} + +export default CreateEvent diff --git a/backend/frontend/src/Views/Home/EventCard.js b/backend/frontend/src/Views/Home/EventCard.js new file mode 100644 index 00000000..93fcd117 --- /dev/null +++ b/backend/frontend/src/Views/Home/EventCard.js @@ -0,0 +1,54 @@ +import {Card, CardActionArea, CardContent, CardMedia, Grid, Stack, Typography} from "@mui/material"; +import * as React from "react"; +import Button from "@mui/material/Button"; +import IconButton from "@mui/material/IconButton"; +import LocationOnIcon from '@mui/icons-material/LocationOn'; +import Avatar from '@mui/material/Avatar'; +import DateRangeIcon from '@mui/icons-material/DateRange'; +import GroupIcon from '@mui/icons-material/Group'; +import AssessmentIcon from '@mui/icons-material/Assessment'; +export default function EventInfoCard(props){ + const typoStyle = {fontSize:13,display:"flex", flexDirection: "column", justifyContent: "center"} + return ( + + + + + + {props.title} + + + {props.desc} + + + + + + + + {props.username} + + + + + + {props.location} + + + + + + {props.date} + + + + + + + ); +} diff --git a/backend/frontend/src/Views/Home/Home.css b/backend/frontend/src/Views/Home/Home.css new file mode 100644 index 00000000..e69de29b diff --git a/backend/frontend/src/Views/Home/Home.js b/backend/frontend/src/Views/Home/Home.js new file mode 100644 index 00000000..75dbccd1 --- /dev/null +++ b/backend/frontend/src/Views/Home/Home.js @@ -0,0 +1,74 @@ +import './Home.css'; +import * as React from 'react'; +import { styled, alpha } from '@mui/material/styles'; +import {Card, CardActionArea, CardContent, CardMedia, Grid, Typography} from '@mui/material'; +import {useEffect, useState} from "react"; +import {getSports} from "../../Controllers/SportsController"; +import SportsInfoCard from "./SportsInfoCard"; +import IconButton from "@mui/material/IconButton"; +import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'; +import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'; +import {getSampleEvents} from "../../Controllers/SampleEventController"; +import EventInfoCard from "./EventCard"; +function Homepage() { + const [sports, setSports] = useState([{}]) + const [events, setEvents] = useState([{}]) + const [sportIndex, setSportIndex] = useState((0)) + const [eventIndex, setEventIndex] = useState((0)) + useEffect(_=>{ + getSports().then(r=>setSports(r)) + .catch(console.log) + getSampleEvents().then(r=>setEvents(r)) + .catch(console.log) + }, []) + return ( +
+

+ Discover Sports +

+
+ { + setSportIndex(sportIndex>2?sportIndex-3:0);}}> + + + + {sports.slice(sportIndex,sportIndex+3).map(s=>( + + + ) + )} + + { + setSportIndex(sportIndex<9?sportIndex+3:9);}}> + + +
+

+ Browse Events +

+
+ { + setEventIndex(eventIndex>2?eventIndex-3:0);}}> + + + + {events.slice(eventIndex,eventIndex+3).map(s=>( + + + ) + )} + + { + setEventIndex(eventIndex<9?eventIndex+3:9);}}> + + +
+
+ ); +} + +export default Homepage; diff --git a/backend/frontend/src/Views/Home/Index.js b/backend/frontend/src/Views/Home/Index.js new file mode 100644 index 00000000..07bee0eb --- /dev/null +++ b/backend/frontend/src/Views/Home/Index.js @@ -0,0 +1,10 @@ +import React from 'react'; +import Button from '@mui/material/Button'; +import Homepage from './Home' +const Home = () => { + return ( + + ) +} + +export default Home diff --git a/backend/frontend/src/Views/Home/SportsEventCard.js b/backend/frontend/src/Views/Home/SportsEventCard.js new file mode 100644 index 00000000..300b66ad --- /dev/null +++ b/backend/frontend/src/Views/Home/SportsEventCard.js @@ -0,0 +1,30 @@ +import {Card, CardActionArea, CardContent, CardMedia, Typography} from "@mui/material"; +import * as React from "react"; +import Button from "@mui/material/Button"; + + +export default function EventInfo(props){ + return ( + + + + + + {props.title} + + + {props.desc} + + + + + + ); +} diff --git a/backend/frontend/src/Views/Home/SportsInfoCard.js b/backend/frontend/src/Views/Home/SportsInfoCard.js new file mode 100644 index 00000000..0488c9ea --- /dev/null +++ b/backend/frontend/src/Views/Home/SportsInfoCard.js @@ -0,0 +1,31 @@ +import {Card, CardActionArea, CardContent, CardMedia, Typography} from "@mui/material"; +import * as React from "react"; +import Button from "@mui/material/Button"; + + +export default function SportsInfoCard(props){ + return ( + + + + + + {props.title} + + + {props.desc} + + + + + + + ); +} diff --git a/backend/frontend/src/Views/Login/ForgotPassword.js b/backend/frontend/src/Views/Login/ForgotPassword.js new file mode 100644 index 00000000..13779826 --- /dev/null +++ b/backend/frontend/src/Views/Login/ForgotPassword.js @@ -0,0 +1,167 @@ +import * as React from "react"; +import Button from "@mui/material/Button"; +import {Grid, Paper, TextField, Typography, Box, SvgIcon} from "@mui/material"; +import {Link} from 'react-router-dom' +import {Icon} from '@mui/material'; +import Joi from 'joi' +import {postResetPassword,postResetPasswordConfirmation} from "../../Controllers/LoginController"; +import {useState} from "react"; +import {Alert} from "@mui/lab"; + + +const initialState = { + status: { + value: 0, + changed: false + }, + email: { + value: "", + changed: false, + error: undefined + }, + token:{ + value: "", + changed: false, + error: undefined + }, + password:{ + value: "", + changed: false, + error: undefined + }, + repeat:{ + value: "", + changed: false, + error: undefined + } + +} +export default function ResetPasswordPage(props){ + const paperStyle = {padding:20, height: '60vh', width:300, margin:"20px auto", background: "#EFF1F3"}; + const textFieldStyle = {backgroundColor: 'white',marginTop:10,marginBottom:10} + const inputStyle = {height:"10mm",fontSize:"5px"} + const typographyStyle = {fontSize:14, marginBottom:2,marginTop:2, marginLeft: 1} + const [state, setState] = useState(initialState) + const getValue = state => ({ + email: state.email.value + }) + const handleChange = e=>{ + const newState = {...state} + const value = getValue(newState) + value[e.target.id] = e.target.value + newState[e.target.id] = { + value: e.target.value, + changed: true + } + setState(newState) + } + function handleClick() { + postResetPassword(state.email.value) + .then(function(r){ + if(r.status===undefined){ + const newState = {...state} + newState.status.value = 1 + newState.email.error = "Your email address is invalid" + setState(newState) + } + else{ + const newState = {...state} + newState.status.value = 2 + setState(newState) + } + }) + } + function handleResetClick() { + postResetPasswordConfirmation(state.password.value,state.token.value) + .then(function(r){ + if(r.status===undefined){ + const newState = {...state} + newState.status.value = 3 + newState.token.error = "Your token is incorrect" + setState(newState) + } + else{ + const newState = {...state} + newState.status.value = 4 + setState(newState) + } + }) + } + return ( + + Reset your password + + +
+ + {state.status.value===0?( + + + + ) : state.status.value===1?( +
+ + + + + {state.email.error} + +
+ ): state.status.value===2?( +
+ + We sent an email with a reset token to your email address + + + + + + + +
+ ):state.status.value===3?( +
+ + + + + + + + {state.token.error} + +
+ ):( +
+ + + + + {"You have successfully reset your password."} + +
+ )} +
+
+
+ + ); +} diff --git a/backend/frontend/src/Views/Login/Index.js b/backend/frontend/src/Views/Login/Index.js new file mode 100644 index 00000000..e3cbbcbe --- /dev/null +++ b/backend/frontend/src/Views/Login/Index.js @@ -0,0 +1,12 @@ +import React from 'react'; +import LoginPage from './Login' + +const Login = () => { + return ( + + + + ) +} + +export default Login diff --git a/backend/frontend/src/Views/Login/Login.js b/backend/frontend/src/Views/Login/Login.js new file mode 100644 index 00000000..2ba63bf5 --- /dev/null +++ b/backend/frontend/src/Views/Login/Login.js @@ -0,0 +1,100 @@ +import * as React from "react"; +import Button from "@mui/material/Button"; +import {Grid, Paper, TextField, Typography, Box, SvgIcon} from "@mui/material"; +import {Link, useNavigate} from 'react-router-dom' +import {Icon} from '@mui/material'; +import Joi from 'joi' +import {obtainToken} from "../../Controllers/LoginController"; +import {useState} from "react"; +import {Alert} from "@mui/lab"; + +const initialState = { + username: { + value: "", + changed: false, + error: undefined + }, + password:{ + value: "", + changed: false, + error: undefined + } +} +export default function LoginPage(props){ + const paperStyle = {padding:20, height: '48vh', width:280, margin:"20px auto", background: "#EFF1F3"}; + const textFieldStyle = {backgroundColor: 'white'} + const inputStyle = {height:"10mm",fontSize:"5px"} + const typographyStyle = {fontSize:14, marginBottom:2,marginTop:2, marginLeft: 1} + const [state, setState] = useState(initialState) + const navigate = useNavigate() + + const getValue = state => ({ + username: state.username.value, + password: state.password.value + }) + const handleChange = e=>{ + const newState = {...state} + const value = getValue(newState) + value[e.target.id] = e.target.value + newState[e.target.id] = { + value: e.target.value, + changed: true + } + setState(newState) + } + function handleLogin() { + obtainToken(state.username.value,state.password.value) + .then(function(r){ + if(r.detail!==undefined){ + const newState = {...state} + newState.username.error = "Check your credentials" + setState(newState) + } + else{ + navigate("/") + } + }) + + } + return ( + + + Username + + + + Password + + + + + + + + + + Forgot password? + + + + New here? + + Create a new account + + + { + state.username.error? + + {state.username.error} + :null + } + + + + ); +} diff --git a/backend/frontend/src/Views/Shared/Header.js b/backend/frontend/src/Views/Shared/Header.js new file mode 100644 index 00000000..d1095d8c --- /dev/null +++ b/backend/frontend/src/Views/Shared/Header.js @@ -0,0 +1,151 @@ +import React from 'react'; +import {Outlet, Link, useLocation} from 'react-router-dom' +import Button from "@mui/material/Button"; +import AppBar from "@mui/material/AppBar"; +import Toolbar from "@mui/material/Toolbar" +import Typography from "@mui/material/Typography" +import HomeOutlinedIcon from '@mui/icons-material/HomeOutlined'; +import AccountCircleOutlinedIcon from '@mui/icons-material/AccountCircleOutlined'; +import image from "../../logos/reb und(400 x 100 px).png"; +import makeStyles from "@mui/styles/makeStyles" +import {createStyles} from "@mui/styles"; +import { styled, alpha } from '@mui/material/styles'; +import InputBase from '@mui/material/InputBase'; +import SearchIcon from '@mui/icons-material/Search'; +import ExitToAppOutlinedIcon from '@mui/icons-material/ExitToApp'; +import NotificationsIcon from '@mui/icons-material/Notifications'; +import Badge from "@mui/material/Badge" +import {IconButton} from "@mui/material"; + + + +const Search = styled('div')(({ theme }) => ({ + position: 'relative', + borderRadius: theme.shape.borderRadius, + backgroundColor: alpha(theme.palette.common.white, 0.15), + '&:hover': { + backgroundColor: alpha(theme.palette.common.white, 0.25), + }, + marginLeft: 0, + width: '100%', + [theme.breakpoints.up('sm')]: { + marginLeft: theme.spacing(1), + width: 'auto', + }, +})); + +const SearchIconWrapper = styled('div')(({ theme }) => ({ + padding: theme.spacing(0, 2), + height: '100%', + position: 'absolute', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', +})); + +const StyledInputBase = styled(InputBase)(({ theme }) => ({ + color: 'inherit', + '& .MuiInputBase-input': { + padding: theme.spacing(1, 1, 1, 0), + // vertical padding + font size from searchIcon + paddingLeft: `calc(1em + ${theme.spacing(4)})`, + transition: theme.transitions.create('width'), + width: '100%', + [theme.breakpoints.up('sm')]: { + width: '12ch', + '&:focus': { + width: '20ch', + }, + }, + }, +})); + + +const Header = props => { + return ( + + + + ) +} + +export default Header diff --git a/backend/frontend/src/Views/Shared/Layout.js b/backend/frontend/src/Views/Shared/Layout.js new file mode 100644 index 00000000..7a507e3f --- /dev/null +++ b/backend/frontend/src/Views/Shared/Layout.js @@ -0,0 +1,24 @@ +import React from 'react'; +import {Outlet} from 'react-router-dom' +import Header from './Header' +import {createTheme, ThemeProvider} from "@mui/material/styles"; + + + +const Layout = () => { + const theme = createTheme(); + + return ( + + + +
+
+ +
+
+
+ ) +} + +export default Layout diff --git a/backend/frontend/src/Views/Signup/Index.js b/backend/frontend/src/Views/Signup/Index.js new file mode 100644 index 00000000..cddf5516 --- /dev/null +++ b/backend/frontend/src/Views/Signup/Index.js @@ -0,0 +1,385 @@ +import React, {useState} from "react"; +import Button from "@mui/material/Button"; +import CssBaseline from "@mui/material/CssBaseline"; +import TextField from "@mui/material/TextField"; +import Alert from "@mui/material/Alert"; +import Grid from "@mui/material/Grid"; +import Typography from "@mui/material/Typography"; +import { makeStyles, createStyles } from "@mui/styles"; +import Container from "@mui/material/Container"; +import Joi from 'joi' +import {useNavigate} from 'react-router-dom' +import image from '../../logos/reb und(400 x 100 px).png' +import SignUpFunction from "../../Controllers/SignUpController"; + + +const useStyles = makeStyles(theme => createStyles({ + "@global": { + body: { + backgroundColor: theme.palette.common.white + } + }, + paper: { + marginTop: theme.spacing(8), + display: "flex", + flexDirection: "column", + alignItems: "center" + }, + avatar: { + margin: theme.spacing(1), + backgroundColor: theme.palette.secondary.main + }, + form: { + width: "100%", // Fix IE 11 issue. + marginTop: theme.spacing(3) + }, + submit: { + margin: theme.spacing(3, 0, 2) + } +})); + +const schema = Joi.object({ + username: Joi.string() + .alphanum() + .min(3) + .max(30) + .required(), + + firstName: Joi.string() + .alphanum() + .min(3) + .max(30) + .required(), + + lastName: Joi.string() + .alphanum() + .min(3) + .max(30) + .required(), + bio: Joi.string() + .optional() + .min(0) + .max(300), + location: Joi.string() + .optional() + .min(0) + .max(30), + + password: Joi.string() + .pattern(new RegExp('^[a-zA-Z0-9]{8,30}$')), + + repeat_password: Joi.ref('password'), + + email: Joi.string() + .email({ minDomainSegments: 2 , tlds: { allow: ['com', 'net', "edu"] }}) +}) + .with('password', 'repeat_password'); + + +const initialState = { + username: { + value: "", + changed: false, + error: undefined + }, + + firstName: { + value: "", + changed: false, + error: undefined + }, + + lastName: { + value: "", + changed: false, + error: undefined + }, + bio: { + value: "", + changed: false, + error: undefined + }, + location: { + value: "", + changed: false, + error: undefined + }, + + password: { + value: "", + changed: false, + error: undefined + }, + + repeat_password: { + value: "", + changed: false, + error: undefined + }, + + email: { + value: "", + changed: false, + error: undefined + }, +} + +export default function SignUp() { + const classes = useStyles() + const navigate = useNavigate() + const [state, setState] = useState(initialState) + + const getValue = state => ({ + username: state.username.value, + + firstName: state.firstName.value, + + lastName: state.lastName.value, + bio: state.bio.value, + location: state.location.value, + + password: state.password.value, + + repeat_password: state.repeat_password.value, + + email: state.email.value, + + }) + const handleChange = e=>{ + const newState = {...state} + const value = getValue(newState) + value[e.target.id] = e.target.value + const result = schema.validate(value, {abortEarly: false}) + let error = undefined + if(result.error){ + const err = result.error.details.find(d=>d.path[0]===e.target.id) + if(err) + error = err.message + } + newState[e.target.id] = { + value: e.target.value, + changed: true, + error + } + setState(newState) + } + const submit = _=>{ + const value = getValue(state) + const result = schema.validate(value, {abortEarly: false}) + if(result.error)return + SignUpFunction(value).then(_=>{ + navigate("/profile/"+value.username) + } + ) + + + } + + return ( + + +
+ {"logo"}/ + + Sign up + +
+ + + + { + state.username.error? + + {state.username.error} + :null + } + + + + { + state.firstName.error? + + {state.firstName.error} + :null + } + + + + { + state.lastName.error? + + {state.lastName.error} + :null + } + + + + { + state.bio.error? + + {state.bio.error} + :null + } + + + + { + state.location.error? + + {state.location.error} + :null + } + + + + { + state.email.error? + + {state.email.error} + :null + } + + + + { + state.password.error? + + {state.password.error} + :null + } + + + + { + state.repeat_password.error? + + {state.repeat_password.error} + :null + } + + + + + + + + + + + + navigate("/login")}> + Already have an account? Sign in + + + +
+
+
+ ); +} diff --git a/backend/frontend/src/index.html b/backend/frontend/src/index.html new file mode 100644 index 00000000..b2ba5f43 --- /dev/null +++ b/backend/frontend/src/index.html @@ -0,0 +1,13 @@ + + + + + + + + + +
+
+ + diff --git a/backend/frontend/src/index.js b/backend/frontend/src/index.js new file mode 100644 index 00000000..3dfb1ac3 --- /dev/null +++ b/backend/frontend/src/index.js @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; +import {BrowserRouter} from "react-router-dom"; + +ReactDOM.render( + , + document.getElementById('app') +); diff --git a/backend/frontend/src/logos/reb und (192 x 192 px).png b/backend/frontend/src/logos/reb und (192 x 192 px).png new file mode 100644 index 0000000000000000000000000000000000000000..4966f97173b43c5f0723e702114efd40fddef861 GIT binary patch literal 7708 zcmd5>XH?VMmJhvyf^-EG5fLHu-a)E>Kq9>-^gsv@Fmw>SDouI^ks=-GMIgWxM0%4* zD3L0?_crLg<9lz``!H+f!_0?s{@MHd_V1kC&RSXLDsmQb002Oxp{}BT^+o?2 zq{LUV{-g`Z)rSnOZtMX7Q2+UJ;3e=U@op6Qa-ZWzj&pte*aVhxvxM7h@F(ait68xD@m5y!P65i1q6C~ zd-Hn>^SdGJfr65fl0X3=ppX#X6@t&>nX9L@51*?C=M@7v$1e^QsD~}W5$@^e=F0Jt z)7r+(%Ttz{o1EisYDG^^grm)Gc2^I6>t7nLpCC8m++V5;`nPPxHZB93VH^I%5v*NJ>0wyw$NV;KaKt-QAR+mJ)saeAps#l zK0!e~0ZAF)e_8su$3F}n`FLtT>s*c zSQ+5Y=(;%m6_j7X-%!iY}i2nxd=PlX9_kwU_1g;e$Z!ti4=3x#bX08xAj52*-UvNg)m& zj-NB!hv(n;_BWjj@Sk@2Uw8)pr~3X`fxp`9XYE}rT)8Fuw_8_|l%kiXgBwCl3yOfk zI83Zz)~+%?QU9sGD*Io-{~rbTsxN;>_+O6UV-5eO7Px{*{VH8I1jxMUYSW`jl_AIn;k+ zdvmwH=75jvI}3*bzVbr`Q~Dv!y=sf1JGi{s_uwbdY{hJ{s8`g|D|z7Ur=|N2*tb4K zw`#y3!t2G8@vqX~u|*lainn>IL>mjZ8X1tynnk~?-7e{+32AAvM8VIUVy!f`Q1b&b z=Vp)o!xP_`hM;Roq_>~{-%nc<8Z=(`3}eieYiwj@ed{efS{NfLhFnTRna$f8ix;!$ z*zq`6g$55e7Q(9Gd3e{!toE|ED1ipWf}%O$zL=%6deYq0igKr;Q%!v_t94k1KWG=g zMlD0~gFHCc9cL+E*%`ifEf0Pm-4Bx+1lG0Ev|PPqA8y!bT^iWIMz0E0ME}&ZUj|WzQ(_H;Cu>+ zKhN>4#m8AZO3hRhOH@7VwtFb&Oo zh+i=@Uh^|YXm=vv{zLV8`A%HBz_9RC}bOXhh=!z7+|Cs-3?izrGh>AhOaap9LZz$@YWCiq@G z{IP+K-|0z3usc{HCB@oqM@(XFc1pN?nGtV>M7!h98`-a%lC9e*g9+?ZEXWg&aV$PF zjNjRCtM+ZT>0NHd`;8mobC2Fi+PIb#J5Mh{54Korucc9P4>!O2 zeT$ynae7j}ZVHZhf=A~K0-cBFXCBH{4YHS4MEIuIo0CemMK!#_aj}ZW+Ox={ZQqzr zeekWU+xV_lo}X)KuyVc`^9n7h%3(G2Q#F%$w%uV`YU#LH$C0clHpQ6PG3C3uR*xCA z(!0s0QVe82u*;ctwWqxlBZFTm$jq(%gPx| zo==lQ1=a9K1WTGy=6h9I+k1L^`|Fu>F67dWxg^$ekS*)m=t};;gb>1)D&jp)FLqvN zePYlAi1CRuH)U@mxTp8I(y{FW-*S$=Td<(?G;Gy)NB&nmuS?w zGC|y_VyBO%C<@Hmzd3&$p%h9~xKE>3=g(lfVCKjLM{B&GP|Ps1xingU0Cx!IdOmfu&pPOECX7`zCmcgrB{xb(j7J+m7N%+ip4;mcvqorm8;wGoctcJI2?t-xZZ<`2wIU2BwcfLyxjUjASRnEx0RqJ zx+>WWhS^4~&GnSjH?@P_3}@MX4eGxwUJlSvV&Qzot(JwNSY*KoqqQL%303b}IHFM^ z-4a^uvxV80!`@N}QtY?YKMOn8t=Qo-d({TgoBc-;;<^fNtUk&h#)uOsASI3MB)1mL zHN7M)`oC=It+X%%v$nD z1(%nWR8~*zLv@5YEOJ`rb53*pw96K?X-4d@gH_l}(cu0qdeM2V;z0uJ6e`$ z!rqJU9`*Af|zFZ)(WTlV3SyC-203erc_RQne1? zL4+puI%m!zkb=3M4pm06@|;(yRLK&QKSKR^#s)b}WRE{Te9ag^lOLpvF0i@)>@rdo zi3{3s&bv*o*2=$$K$In~h@R0e-gHP3OUjg|H9(iw)Qy`7y04i+X(o0HKc$Dwi1R5N zW~cX;qV;oGSlg1Vn~SE8Ly`=_A5kHRXmb*$#LslwGWbio(2LK|VX?G>^{}ikl*jR? z@-D;((Cy109sG1X(V0C-ejpsAOIWv01uA zhszLE6Dck$q-SZCmJcs&|KVMk8z5oa8fIi1zBXxKLUJpjJ}&8r;^#&{SbN?7MG*0J}GaYsurou=BnfkO9aNxWBnp>#PzxRsd?0?>M8Bz+bk? zmi?1ObMFJtT{D`w>kI(^=!Oeg0PJc01Wvmu5H{p=!y-zdOd z_=i9JS;IEn3E0iZzDPx+Mg~7=Yq3L=tpo7IT64{R2fm@*;A@NuvZPdyKNp9+7;!e)OKDHb34D z;@0_*Ztr_7`!~!UNG#yqaQVk|-AsLt&9x1(G-tesLIFdLenK65oi-Hv0YK8ahU+t# z2w@`rWoaKJucEhAVAP+h61MBl(4Rz(8?u)|@WdZxDhLdw1=0E(ac*f&KCbl7 zHy-uDwV$hHWp_t&EQg_)(QzL(p%=*n`m7r$P(o2&QuBA;z9BU}yrXkh0LIRt+bM!~ z&MSKyKU!FZVNZW84RUx_^j!}J<4_L&i$p#xSYXyB72;%nJD$Yjk%b{(bD2*bZihUP z3olG%Vig0fBzEhc$beJy-qEC!J$}De$ZN&&u`jQ&?28PAXgS?3bg!HwYx zP2kMJZXWR#ojIkBQk5uP1VUQEj>vPI>I$l9@lU_y?lBi$?F}U8r@wF zB0ncF`P2ENXMZRhob?K3r~w$ks_W8=4X8qkwpg)8$Shi2#`+ia_^WfcOF3_SHNGF) zl>VgjWFP6qa2Ix44>qKplwe$$4uV9{1z+x_CE7$0u!Wu7K|{{Dy0v=bqH=5&0xm|v z`Z~@Ow;YZtDz2>wSz*>kvky#2kM4SnAqkihTge9#K1;X7Jxp$1k2V||R_?qm)otgp zag>x_KXt^HypNU`j-kE299m1z8hsAS9Yw|-!k->Seln+k+@B(?H8~NZz1#Od8tY{{ z9;r#HCUm!|kx#&wIDr;oOzV3|BTaVKv{LJKU9`kY4I{~h7tbS!Uya{^0ST%_?)GrS z=9Ot7yiUUrld1_EwxFBJUo-Acy*|~&FYEM6@7O#gWdRgn-IX65S2*Ij&_rly1^GM2 z9})43VFFEN@~uS4fzrDw4l9E#=xu1{>zXal4+(OKa1V;O5+E zBYbzrsXm)O#F48&!|dGy#ROs-u@Q*0qrm%Yoil*D^nw|1g~`gjNx@SYG|nQnAf!Tu znhgOLt6?*$?EDWaX!2TkN>#hh5`_h-4&w?p9@}gBz?h$0k}GTm^qlQEh^jI^AG(%4 z0q2x%L~{<(J4`698l_NdxdGgWbw`RV6f;_14`V+}gOviyFjgKaIa9@>0TW5V1`5%+ z1vOlfQwkpO+>IpXL$@=S+Ix@g*ORhfYpT}@XFOX)*CyE$G-G>;efeZp`Z+h&cMck6 zCE|zs`7az#>O&wSz^)2M(~w7XKSFV3igk@(>RI99D3kiPSQgja_or2>l9P#XI>=8Q z9<$HQwza1EURw6Qob&kffLq6N_DzEgxNI+#&d~3U;Mi)c&?QAv!~tol$fhHKHqjvO zfS1{6IMG`WGln!k>m9Y^l>5BPQ6&#tKERr~T`MNeM{d0{ zY254Coz!E!rF88@R4r?6<^B0=p87L>^oyF8mdVD4*Dg*Z`7blV%GW+1`@i)=-^_m9 z2#Sv^MTTz$<#!i*^v|dBA{+~aHC1DZLj}63Q*8Cr+Fr8~Pwh`18sssNaZf$R=wP#e z%p;v9WxaS#7=ea7#E4me+KD*XkR{;#qA6LJ~~aiKn>gQrvEh1u_O_iMc^#E&zSZcFAmqzV&ub)rRbzD zS=@yNIeK^U=)q2{*r3ghmS7o8OGDmTs-+(iGSmwQB9D>H+nx3H-08?a-)7Tc&#_+p z*{3D`G0iI}Yi*uXiQu)6udzz;-SHln(F=CX) z7EM#|V5=dduI_wNg#69JSj*28Hf*&vk_~qnXtSfMGlGQhJHaWS?~twiKfF0DNYgnz zEkafm3$#*id?c!G+c^!U_r6>hadx}4aS`^Ek*NC*dNkN&+zZ0bvD6deN*utdce3S_ z#Me(HcA4n%dHUtIQKV&*i|}_@2(?qIBNhG9oic*fH@!{4_Ey?98RU&`Dg|Wf!uEV& zq9!$wkrl$wnguSLF8&gJpu(c&Agda|0CI4&C6H6}@-e~9eO!5~8}YZxldm-HKi{(}biC|ptgc0h<1=@B$pmq0uylhltv=4&{hRTb=O0ze(MkseN=J$D2Ws5=2wL)e8Ec)QQ7NG%)=jNokW{W0XGZa|suzL7C-qFcA zkYv}rH_N7l=2+gqmzD{)0G)g?{=`Fg>(+c-j-M>g>v-YJ;4k!GVZg=v$h^Ina2N|V z#dLfj|8_oGX>PSgN`qZVFYe?#o;qVGGWcVUAZGt~K)SREmX%qP%35YJuC=Js(enk8 zj7og5G2zO?Y;RhVH{o;t{e+;BE0DDMASTfteCNQJ@%`&=X4Lu|Na<9eVbHC7f6(5r z)TJxV2w^g-Sml*-`FM*PW(ZyR2-?s4nw?*wsvFCz(G7jH3{%zB*{LBbNV^Cy_icO8 z;^^1-6g8k;`*n+YaMgQrzr)}@jK*GxZTYR*!RmNnkU)<|M#PqMkV;r`G; z);}ZKi}D$Y{H$1Aw_vB-_N$dEvC6c~%2>=*ans>3hD?t>Wj)th=ZD6)V;k;I!fZd;|P4t z(1Ti{YI@A*g|)0~a}0v2qjNY3S#ExF92n;_P3V{0I~U_d48A)+C1nuOhBUbMv8+I6 zhGW-SXw$(oNkwOs=lrx-@i2bMr5D^vVnX8@Nb%Ll(0})KZz1{-ChdMPNwJtV7tGZ# z(4@2F*6G0gaehBm^}9=YwGV1T!WWp}me2Y{Dqbk+Yfx3B&}ui9H^ba4dE0{WWaR?a zzTA6zclC}Iw{gqpPRUx4teQVoHpyo?GJNS_8cU$Z=~NXuQ7r3mu}nY3&S753gnK;ZUa4n42W_jT6yUlI@v_z5XWmS4U7jkPaTzIeS*(^|n!<4uxH z*3(_M)27yzX?1H?L6#Wwfuap&vnPjW>j>hPgSGggp~U+8cx$`Yb@2n3oymNp;S`Ie zcLTm|=qb6XhiBMs?JuCypES$(Y9Sf!h=MP2!HfKv-^ zR`mEkE=c7vT2T|pv-mK04FVJn_;Ge-=gIN*6Xsf*GD9&9eT@`j zT1htf4^r51Mf?PoloBIZFkhCH0OZiSLA#BV4MTy}TC3sZS5>&)*KbpwmtMxFNR_SE zF0)JMe-L zXIvTk4i{Qu&u;NQMh c1Pq-As;e0iGzZsq{CvOFc%-9JreqcJAJOj(-T(jq literal 0 HcmV?d00001 diff --git a/backend/frontend/src/logos/reb und (250 x 150 px).png b/backend/frontend/src/logos/reb und (250 x 150 px).png new file mode 100644 index 0000000000000000000000000000000000000000..645fa6f2d45aa10fbea864c1d9133ecc34f64892 GIT binary patch literal 10454 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 TV7hMuC@89m8VVJ1=E469x}{L^ literal 0 HcmV?d00001 diff --git a/backend/frontend/src/logos/reb und (350 x 75 px).png b/backend/frontend/src/logos/reb und (350 x 75 px).png new file mode 100644 index 0000000000000000000000000000000000000000..181de71bb9bb67e415d68bfe50abfa8dc04c4ec6 GIT binary patch literal 9000 zcmbt)WmsIxvNkS*2Mun)-5K01I3Y*^49ws%z#u_q@Zb{M34{a*65I&{LV`nZ8G;87 zuDK+8fBT$spZnuJ-~BObt?E_vc2~Vs{jBbumwGyC1ORFP3JMB=hPtu=3JR*l{j(Mh z*8NpN?I7a*h6`0U^+Z7-?EU>iP30z}K|#R?buco4nP@)-+PJy!fxvFo5I$cQ=)E=y zinN?B6lCKBfiYS`>>ONW*biDe*%=+cGVD)9wFR`HN)USobw3Y?p`VVCjh~Z^B$!=J z79i~lya#ZBz(9}EkbhC6;0*guitcj{=nQhTlVSJe1w(8>Ud}LfSr3Rcqn9g~kwZ{Yh|!nv z_Z8~P$;crrDsV4~i~g4W2T%V7m*)Sse*X`CLjNt>f9K<$qWhhR_b=|96#m=EdkLuE z1+#bakkx{CKwKEjKrSFx>EBxaul>FV{!sD%74G{g{U_f4F$`Z2^xq2NUJdvsk=;Cu z+}xaHl|ZiEAZh;p-uyof<*(7**ZFBQrH-bliXeT#xZuce`^ zVC0*#m+Rj~2YGSO+390j+3v%aDBtwxSppg}Z^O7IFE56EcJa4p9QtrGf5YpVIkR%( zof6(NYbRZodYQfL@G?E#Fuep1(mI237tAt~wKw)~HaM!s{A{D>@!c@PLF<%-za6%} zY$?h+MFkkj7jd((q9;p4$$*+zt7p&kbrApHMuLm5Tv%deo+?3dkqgpX%h$zyR> zrpNU>ru3t0ItxLcp8hD?yoHE7=0>nIB>jZAgkmgmwTnIL*oZ=(n*PXh`p252whNOO z!Rq}`-3rfDvacd5M5&ZWj~#Cr(0DmRRi@_vMGx;ToE*-><#L>2F2Y$lFxhw(?p~EZ z05f}gcK5d0msr!oICOq}2}8lxwh|0Eb0lC7)s!Dc_VM(w(fz55$R;mk5@;;eIA2aAx1m*MeQ(4$V>lQ3+n?3vb%9JD5R!H)ud!jKpyje^?Ik)$X*Gw4RBieb8)Ybf3g zdKXoNI7=T>M&`;vrg*wEp;C5Mi=DW)=9peFSw5!M)HxMT#>Ri(|^6D(iQm@7Zzw#m(8S>;oy@4{ufnIGgqagiCos zjLQ8duG;a=RWQuCY951n*qZb)52_lK3o=FSu6NneUzEqekRhGgTT^~5lL7MwDFTlv zp4bcBn)cx+l~%bD{7F|}#yqiM8w^8C2hS#rYRWBahvFr!_1?E?9)_5_0wGR5YI{ej zZ1pO+BcYBb)!pUJ-a#&SCPuI6$oxY`c%r_xRQt2t7WVQ6nClZx2YoLZGLJG9#v@0B z_n9e+ianv6z;KR>dt5KYCKWsRfRMcCdAt8hpM?6|ACF1lF8*omgG^Ex8M}zD-3(Q?zf?mhRKHQ4^@7XOOY=y4pLXaVkJvB5c7J>v@ledRy%ZTCmdt z^{In2bITyQczI!Cf+f4+^~8@GvD;Cm^E%JppM~?mHPD1{1|N1AcI_YzFx$iQmxmrV z?9CBB8#Bgc$&U_X-cooopG{R6hoeCw7KXB?*Hm^@_(Z@i&W`4}zXBJFQobGQIc0SW3RmYE-vpPg(~-0FIU)&4;&+K| zUMQ+f^A^aK!C2(@Z7t0lTg5v>(dw)eg+XfoZV&%(w;{+s>D< zlg4jOg^Lfp)(!gyP)~T@#CZ*^uyB{>ng39Ib`!^2aZ38!KXApGO8*nfH>7w}ghot$ zlZ1FdH&s0%Gl0vbiOZp&Cl;bT-At8$J5z-fuNHtNfwjYqXwAeZvI?LjBV?OWTN`Qo ze(2uI!E&n7E0ERC1E)M3>N_Q^v^47uzD*2OqC8BA7U%>(PgpUYIs*ncQR zJpanw;VsddILMzFL%*OXn&L?1^@A#n3;&8-khe1E>eVXNs@qtxsm?I%{)itSCd=A! zCc#(C>lhm@TD)6y7cOPpq;{5md~K)h_kwiCj$YP`7gGlR4z2o#bCt!?ya7y3K!9`V zNBX`jY04URLoI38wJ3j1vIuzb{W@Lr^L+Kb!d>Ljcv5!RwgruSD6W3jST+Ook3Ng` zeIKBJX3tB4lapr^ry@sWgyWib`(^a@+!qwRY)G2Ra#RwM!?rl+s+QGa>Ma2~XtFvi z%MwfW7{%L2$fVz|`0%atIFMj5A zx*=xK@|hu?LyMcN6?vGnc!T&1>`05X`H46s5(!*iEPjR>b{}6|7j{JId7=+omMA*sg8{^(_ zmugoGB)aLtPCwV_k!CHgot$EVU(5oQuyP8z>&48+#~g0USrQKJd}4eMRa1ix7U)Ji zF9HQKY;?yxs4MSqOtM|xEA8QLlytdSx95ws#f{n$yi#8WTT3*dOO-Nyc^nsAl2WDO z+`EwbX5WIq`Sr_4!)y@FN4ABJ<^m8aB zVgerC<{ANIhAvyFLF`q3X7o0q^P3?3gTs49(CCt@10Npl;KeR>jvMW~J4HSG3c6@Q zxd_i_tls<32wIA7&f|&}%NSZc=_`F}r&{1Gv=ViY=X@K4+^x$jJQAnsG@5dQ7>-d! zL?2Ojeq=7qpgtpQz%ghcEY2I>$t%v7MiJBu#t*_1O7?3oo39+L0}JH8Hl4=HaNw8`M+ciEZ(ysDnP|k1IswNopCmS}x)2$?dnE-&v8i#r5hW z<&lfSe2$5JpS2Q~6~8TonJU7H`5n?41O!udE6J;2KNH|A0zT-ko7oQ85yI~-$e_ad zn<#FWzgT?5?UUK4C#~4z&(VV8PhMw;D;!g+s)4Mz{O^>Z%ecdo(XQ)o3RCi5lOTC26yllUVc42C$OU7m!ci3kdyh-11v=?7FxYD3v<`h6OtFfo!=p2bR}!yGKwL=DjGc@u zUqLN3#?*SSy~cwl`y*Y~zan0Zl3@x>XHKQ}PK|nRxTP101=8FaDwKjw%Ts)Q2BAzw z0aL5pYrhtqBZkpFQOX3{K#jWU6iaPn`5bz^M^vNC-fCV)Dd=oIs9ZNbJF0EbVb`w_ z!&kWJBN zZYn%jh;EI0_S*SNwYjnixg0i-e%xf3?$_PIv$;}^WV`k4Ll=IA>gHfF|IQKZJvdmI zNHByhIl=|>RGrtG;;O91e;{DBk$CXPj;_0Gl`w(S>n)-)&4}h)o^HHdA#FYY?OUx> zvST3^=Uy~hxZsTLmJBZsT6EkwN@DnXaHFah;rf-D70s5wnjMH&?d~>!;1tIUuMI1z zK??o|b6zSokL6^2_VPoO$ko$btyCkohiXhboh6RtH1y5>Pm4v3vX+}WDD3r8wIAeT zFRFSl-ZCD_m6C1UF4t}kSFrCZBj5e6Jb;p6~l4f847$kH)N5iGfqdtSWS7E zR}--!RiAG7Qu44C0XL*jVd{D9=$|O~!X&EY@N$X^+A|`?_flP7EP7#G`RGB|7hLaj z_N4?j!7Jt^bOpmdPBTR+=5FFY&@Y}ICkRm7P9P`bWh!(iUTbU>eeou0qTiO?CGR>; zocb);hiRMNY;00TcJI9aam#>bAokQbhw(`2iBL#>%t?DxeuZC0rAO8@dX-_VOmBr` zqYja9n+S0yk77S<$isL(a?lR^A0PWfWC!Hyf`0`uS-e*zb zx8Ly(BWL7dUp%cfJ$6K@8oBkhU^G#|@U>b|WQyePsG(#mf%B&+6^A7?pB2ANL+#Ha z;ZAUW#K>r-G-UuDxb$J56C9PdWZW^&=TR_hYX#?*GS~K2;(F<;H~6W0Rg5wpynPF4 zmx+t>9Yb|cW$npWRW>8dC@92LR%M7;4?I(+p5b?-aA6rphq&yscv#NsLzAt_!$t-| z$~Bqpe&CH0aO7C`yIQsKnwaJmuw_!jj~H$R8OXR^zd^d-=i!VCzpy=0h}y`&lyB2Q439=vHCfGYM{^jm+-vo2NuP^HX4o1s z1pe*3L59HLk>rxd0Dq*js>Cd`){40O6`fDwnhT4TPUkEN`M4nIU{|jqbyaSzosaO| zSBbWe+{%|vYQO35;31cabN)e87$B2u+} zauAG(R~C04KP$Y>PwTo}eIee9ZJ(}aSC)?6e4T`4i8)ts>gRi1m`o_^5!*tlqii-V zp1=8IhfMBp%~C9;Q+JGysLz$xb_T9pKfy}T6!RYXkaS?*20wrg} z05&cw1}@9ErhCmZ9bA?z$P%_4-*+xUudxl@+w@zbX&7!+5T9%T zKMuXnWEMGlPf-!`%k-_fT=K3xC#vvN7Tw8#{Y19UjI7+o)#d1m#<8NgfrBe7E?GQ8 z-c5UF^S5Z#nQMSK9BG2N9g~MsKYe2{N_gsQ-XyOcWZ_x$d?P+ro_nbt$g#atAP-pe zW0-o^wd2qtrz#^nncu#Ph59|Y`1#uR z2!f|WF2MfX!tUi{hp8F{gBl<6A3;RJW`VSg&M(4RwC~0iBIBVZ)ve(wY9wvgVK1^? zT}_2w4q@XiQ2fdlty<=Ss$xGhBecI`5kJT{IN148?wzH00#NetBb7-sCD0qkEKmh%Ml;W%{TwZpo4Nyrq%1srF zIkD^d;JGXp(lerP?OIH}8^y4Rd`BrDJ7?_}LZe!WR1^DHzd3Z~dcU4!MT_no%_n&l z50mtoe^hckTs|-=-qD0!fg1b}N1~3{urO+G<_Ps#<$Y@Q@va_X- z-^Kh`UZ#E5)du6Jo{)~=OWHUO)iac>G;D?kW3Gw?9=m80eIsbV*%y@2YtMh@H!7&3 zdLm@{|ccDKa!4p&C*&QQrqtkG5F4 zN^6!9F42)O9CtFSi|||Ss9?K*lMfhl01*>W|JniXTUC=z&eMJ2%@Tn97%LMg9E!am zxUjR4G>e)QY&h`IWV1L`!9{*@@NozXa9Gz(g^x{Nko&>rxH7<4sUaV8iSSNLd44Wo zxid0TX0KgrenKX;<6WU8WbY$K9{LH-tm`(XmB=EoF?=cOHIv@`H<4d7@_BDBqhsW# zdj?8i1w#WEOW{(rgX(CiN7k2}v+}7-LFQ6DAY>UofcAI<j zIGv}Ra{IZ*#cEBexf}LUO3GKDNfla0*oCF~SD)LVdR{}k3xDYygON;=D$M5YM!48OOLzcU=>xg%^n--wDg*_Yg|^P81h-%Y7yR(PuiTr zwS);2KQMgnj#pe}Pw@Tt!$$6H!Q(mTIiYtir$BHL%=l~ChixYHXd&#cH<0QB79-1D zu_O8(yD%NYvLk&6sR}6Reo4UG7op<@jBWtbS)wmVa44qtX`v&8oPS+^g_)3S{+(`4av@==T`OErn`T;{1q1^e$ZA0ZIY>V#~G4ya-3# zI1(4yhEmzwt?Vex`T)aceUQ*>wN880A2xu%l>CI7vS*_kZ`*X48Y$nV2O}rCay8EB zW&(c2kVv}`h~M2kErVB~TS5#qPNcIjY1J{)%rqi3ulNS~->i9@6D!QB7ACheY~8aR zEMz|Y=y|0EhVNkzu~4;uRO{%TsPZ>cr`2GPW2z_#F17D8)bGfSE&`yL=6>> zaU~Dexc6ceox$8{fxpV+*{h#gVx_iit%KvZD8D$QgpSbna?j9{1!x5Oi;uI*Bi?1E zDWxfX!xF2)Xd>+=P_`rpkW*L;xLQQb$+}Mb9y{R~&fnKYa2Z$NB*+iG9&3)%E|LG7 z+F`|xP%~(^5T$K>NJ!m@4`cCWe}ZfHLrRjiw;14LEDU{imXMgC0Q+!z_4Iga5buae zHt6>JTHP$8T>(GPZD|K6FIvrcL;KxT>8Uka|N5IE35mpLmipmq#&@gF0{XvjN_aL} znt;i=Tl3Z3pPMRZUS7hl-QVWkD2Pt_@ymAjiLPp;Lm0FU^Vo>@8bgD-&+waG@9HOs zyeeN7M^RVxDvQ|QP8`OKCJi|ptxPz3(#KULHE2Bd;DP~h&L+hrYVf|R1nV7Bs<;u~ z#e=T&QHP~&{fSWtgXwBdBA!cI0*K_Lq@FQ~S)DdMhdQ)iu8k1+zdXc_OkKqz`!!S59?Yakf(eu=%y#1Di3s#I7B$m?XC8X72NOb!acJT8X)r>vmia)GF84!Em9(ysRBHT}buT-+gMj zel+8Snwa+P+z!gHZBl*IUesb#ZkNue>u9_)gIZ)lG?)ih$ebMZ=19ufW#Gxi6+}*| zp&WJ$F?^*H34Jt0=Ib*jCWSaETs6Jlzc(NKvw^&AT~tuhhmrfNfnP1vEbWaFnEJ6W zvuv&3X-A{auPG5jatTTmq6ca5VHeJWhL7mhPLMrx1#ZemZco8{iZ-DCGjL&0!eF;Ok?P_!3T!bCS{IAHL! zOpdjaFzl2tQ(ZZABtG)Nps_)B#;XMdxYKYb!BfTT^B@(9h3t6O*~6}BMAgWC{<$p1 zz=}!9ym^ZCE23MXru|RV9sJ6h3A5FAwIj+gIJ-;NQXd9H;%~V&`-}&*%PKxu5IsxS z#Ny>3m;W-{^%Eo7jWYTjC|Jny%`k}>UP+mZU^+u%#Jdtn4d=3#1U0`hash7zMNcT7 z!mZtDFlM_Dkae^Y5Stq)y|+1MK;jh(%5 ze%U^ZSm_+19N(zDr|Z()Nq)4Y)TrAw@T>_4gp_e~Fku?<)h=xbrz?=1%nZ_k~&{)mIaP7xm%N4Bv zoB=YuM)LSQ#-4frdCl|qdg;h_m{t**^9G_+2wD$&6Jx&e=6YH{xEuQY0i5(@Me74a z0v2x2&l=Xph*y$nmF$6=r1HFDCMHP^-N_VwsIr&&lOA~CDyk%H;pktlv zn9t1%&qKr13jiSMyZr%Q@)FSk0GK{7LlbWko%_;IcUJ*hdv`kr0l2Hj4fl<(0^GwE z>g?dnWar=rbCcuTZSUq}g4xS)8jI@)>3FC(IKeamJRKee=o&%;oS_hVP6c^b z<`;s<3jVjM+cy3spa%EWw3mM@47C%r7q#WL6PFO;7Zb9Vzi z@YcF6u)mD*hxpqn|4960vcDMr%`N|XSJ^}Vag&FSr^}xZu!jmdxHz~vxOv|?N%(Ik z*+ZqhVcsqd|8kL%i}!!J=qC20U2NSPq#1ChY$h|NqIrH+lJwh5w@)a9fXmOMx3U=|7?C?rG@m?jo;Z>*i}K zEBN1w|HrQU)w`R_zR7XHe@22E;-9g^!R=-M@w^!+#DvgF000BNrmB)5JZC%CztP?( zcvoR9Sa+_o#ocdaQW2!XDn%Q|5wDD^pNS3JlVdExpdm{`*zE5o${*~Hn#Xk^>>Y%v z9dimvfl90mco7=pP&y>(C<@6$s58PQw^r~o=Q8-&R&a%zs}+iNbPoqxG%D z^_-svE8Um066E+%$_08{|GQT&YoX;znDS@5uaVjCi8v{Q_c4*9f5QlmVSbv{7lNVV{1Tt;p9QP(cFa(TE`o>+WOn6YD{dE!x_l@giXw3d+u&5XrF^4K+S~jWK6iTX>3$c3On^a`T`{K%z>#ZE=KkcI?>_$Bygp?Vo`? zpdUM35$`0`8bRB7@6SrBev5M_GJkOjXlnXB-t@UzYwrqY{yd5Jt>a1tf6$l7m&vPV zZc5lMvb}Z6&FtFqb83}dmeVQnQ|5U1*PGRR>LK65%PfI?r_O%>P=6#C{eE5{yWF@4 z&bOh$wHiMgdV=vNlxLJ=Zz9&bK9#QA&fb&Zc_%@&0z2Uy7E2DVrd%>2aDsVD_(V?q zb}zZiJL1Mrear_K5!)^9EIp(+%vg)fB^7D?y5IsLr&JRDn6aKpf#^>>M^IpmX=g^B zS}jaM5W74)&R2{AA*N>CMyQWpJ-d~^7S+q3gxAZn#g|pZxO1gzkZNDG;y1)WkU*$i z2sIWF%F@_!N4@f^LSmXd;JFuL|7&{H|A1JCFMitKy`B1r#>ocdx64eyN{P|2J8V{g z^TZJ7_M-Yu)w}QB7E^t**M=+4Fihf`FqbDT-Kmd5@9JSTX*#u(1U^ty;3x=x{SAHO z2ohAzA?(09D>AX}TgH7y)CxG|+VGrQRUHQq0a)}YjIgdnUa7*J7h_)g(M&^TSWS|a zmde^6CD#S}VCk6I5g_l_2>Z6YQ=_R}Uaf?eYnd}BFkt311@IpfJV=hFG~VfYa90-A zIO~KriNjLbqs+i>ZN#npAEVKCy7JjbP@bgccNxq`+l2A#vo!H=r;ic%mr5+xg#BWG64$H8UC_! zWCL?3{ZhWFLxmR6(HX~z-&l0kcy!MfsMJ(ii3iOUGeujjIXA1~*p}WpcyQ);uv?t3 z83Ybm;=2+R?vpIi^u;0Z3n$b%@HUH(ndv@D;qOB*JMY3Jgd$`CkA*}()ZoYyF85}< z`|{z{H<>(Quo0HfU#C8L? zDZcFsVfDGhN9l!|ZLDPTpE@&HVP`?#fDTk$q;?F(e@{-?=+k0Hrc^gkDg{|alHq+u z+w6i=F;3K?vW1N!g`Pbn`<-2BLJ-%Rr%8(H{Te;H(%K|={F?uiO@X$!hFXFf4cRJl z_Fkfj?d(x-IQ=wqEHjbq{EWufHEFguTV{7ao-pxUzx5!vM_}*@@BN$RRk!nGy3QP(kg(0Wk4nI}Vr#HxgiYUj0S$XL@F0UM7pDyN+-xjnh+IE+iV$cS}Ze9y7b-*cRsEWw4+g&8!B zWT#if?1{hD%6cz@#*L}Q^ItC9H{+G zOy*UBEvzf14KLNl&GqY;VnCiueWR6nz0@EJoiJKYKJ9GQoyG>ggS+L&cA`o& z5&*Ncf52 zCY{>NPqPwD1!Uf>G8>6(_=KU>K@GS{ZHH6M|%Fdrr^x8$lx~ zrr~StIpM1}Tu+bTnAh|>kJzY6-??Ilz72e^vSb!%2yHpL=bpy(&5#*OHOed0u>PHV zRApJ&w-uhr!!(;F+?d$+_^9m z9;9Y4o4F*-AaZgledR&`r8MsKD?RFjv*x?&H0DK8?+(S=I;Ylyw_*?Z^cY1If3iMN z{Qxlnme=xbaU?k$TCq&9OYbim*}9QbG`iJTVdronA39Pw}I-%Qb4hQ)Q3JeAFc)HIs8HpgspX+LEtE;9?Ln-hL@mDCy@b7G}ys4NA? zIaSu5-SNQpz(k8iD>Tn(;AX)swX5Nq#s)6PearGD zAoWX-Y>g39H4DE0a_k;>CX2*Ae$loPD2qSGVJyyZbr(5ZsLFkwOGl*67!3l%$MP zGo92q)-v1&-E{=747<)j>dj-<08%JOV5NfGl-8UWdY(H_GwGX|0Zq|R)mx^@<{5Wv zL+)TdHcR=T+#yS@E$SEC8@;-NXGA%#>nxU*3En9cHU$fzt(BbD-}hl@cbH~Bj2*wG zl>IafXcwHNF-B(2U2h39bnvw?0AJCPu1U&2_<-96t_qjL8LZs79RIBWEpO2;7$?mw zZK-s56M}z=&mC~$kDA%cXl+oD&yhC&An2gW8D3NBixt0IztHhz`ZcyYiwDIIs!tZV zz-4ew{CjQv<5$NjGi~Lu>qpZqogQ3J zU~v8OKNz0foUb?h-2k?PLh9PVJY@>H8kAtyNaa z1_yXo{^a({efDKLkny0Uw(%M*kQIx&U><7BTFo%zSAn^Aol>Jn7faE@oKWO76*o`P zI~N+~+Vb@?V#0Ca=PvU&=*ioL)RvUe=rv^9%;;&$8 z4(*DA%X<)>vq)^+`C236D^#N%L=b8MdS5f;$wDCs;w_NrW>q+dudsfQ2Op-$j?T>O zb2hG#Q@Jx9k-hcEiQfp>5}NL?^2(Cr!xgJ`x7!7 zzP+(iLr0?gcl%ooCQ+X;a#UwO?O*bvp4^L4eb*dBhL#>xNExek$@6u~DS|EH^#wiu zWJaJG&?!!ULxGkXrPttPz7j20{|+4EI^FygTQk$h5?RLb97h4{_2ig*g)oTh{ObpW z-ep2rUg`l|Xo_o-G?bI`8jM+tIO)A7Sn|X)^ zV=5)QglKhC)&+*Lm4T+U*7SV-+Nijlv1%2KV>=mBLDBQN1WyvEj=}GV99GhkCV^Ss z^KaO~Qq3x$?#l>iVuV9TQpPa^SSr-fDFyk%sa?#C$SP#jo5-SblH+@OYDnS95NtT( zew&E`hK|T2-F|qaP10-1cp;%`@lMdY!-79|y-(jjfUW86hLzNIpE=Ku28U zVDqfl*Y)=mnrR>B7FYK^WYbBicHeK1M9@4{i|qoHTSnO;gtHK3bE+C-R9DVD*`ZfO zj1~p8f%=%O=)RQcB)|^ACS?3U&3ZZxz0~5D7w5Ytg|9eFY+$dp1jfs?e~j&;aWky& ziGT7h6rU&UN*0HGir$XZYB_T4STBY=4+P5|IEgL*@-W3iRbMErff(D6-xs#cfg_=T z_j(@glkm=yel{|>)+$jbK57we0ZN8Fc_P`G)Mq8Z!#@B_1EGVF>?WD0*0lVCbOkeO zWh;!VrE0zBfl?9#P^>|#j!70G^IVdoiT!R+vKcPntgA?3i*$=+b(1;^-4p#e;HZ^p zP?1-w;`3OLxAVMe1Dy1wV+v;-J(Py+qV^6k2F|6rv=!Hu)~)NM>pkMbS9yq9tQ+Po zJ!^0nY(g$PTbV!{YYFUI0~@;}w8FOJuiB5qoL_QEvzDsyfw}^i5s zcWXFW$-Hw_N^(%uudHSMNA}Z&AJsIWEkk>OmKH}F&KvPosa0ZWP>~@N^&wzSwouCOOn4dq??fO-MvalF7o>S>Zuozh=(+XgQP{OfK zi7;MsJW2Z?j+q-8Ok6lv9OE*4Y1X#^sBnO}z&49o@qU?odpL!TaH8p*EH30+ zse_!5qSH6x{R>|_&E5BAg&VDMaH#KV4Ba=5{km52Bp2<6(eZWR+hY>BoFto_v0yw{ zYqU!Y-HRiyCZ1Sffh+`J7Fc7iT&Uz6vuYFG9@}Yex(d3T|K-@ga7dR!QcRpm_kZzN)d!3Be-zGD(;B&?P$> z^OHdy;2LHnWvk)Rj=LuDl8dN2#^hzoHeHplY4>k|vCCf`OPijUf(3JJNF5|qSTe@C zZ71ea_6j@k`m*JQv{88KrE1{8MRjjArZJz{^N0%R61*m7&D7$aj3485 zvcKpl8Dge3`|YZ@u<{byuai?=)B&ebdha{0nwveJ#t4paFb!xqwZDP)5>Yf^dJlKE zXiiLtpG8CzJk^bvqeKp7)G- ze7}s7V^6kebQ4>_5Vc}S@TnIu)|j0_I6sXZ-R{s$Zx@3S9hP6*i6JS0UxggWHy>;~ zVg4@rAiLbKdM{$E{*AjYxlJ2_R+0ujVPa;k&2V;;6 z2`oU9Mh(W=eTuH+L%HHzz&e|XynD8%14|*!Xz0X9Qd4Bb_;uqBMs?XXP!+c_R1mPn zahiFswdKRrfq%;XmiUe`me{P4p-&XXs5tuS7t=RnDcdRVS7n>3Jyq2)JHXR*+eQD; z8_EXVvcVHrFn5(;@7}LiFDjFcl}1(0Rmo{bupCB1CBwvsto$z>%&X|TtR{@ZGxINSPp>Z@YRhF5qDwQ! zmqBz-nk}=?rM~>TJ?H-7d%$lp6pjW3h`Lg%*fQCRLz5(Hl~W>lk_(Brlly%Jcb z+w+R$Z@pAU-A~JEWI`D9uesjQiOk9f0UM}H8u>qsW7ePC*cJ9mwUZfOXW9;3W}%Pt z#-DzrF`*vMx(4$+51>0N0Z&`hi0k@<U> z8$HivDBGl%iLD`F+PGd88W91z&_ufKtsVhBh=o{~GzSj(X2h9v;{oPi)Jq&~JDSqUgfbDv6Zk_&i zcMLfA<27KM?Kh1<)vqbD4=6ykAX22R>R+)9%`?82CNw@+o6=FEN@%SOe0Vb|G;CCm;Vkt)B4aPIm-PFQ z3B-%9rTc~3*3BGc&rE(_#^?%Pl<0o|OBVOj7i%1wlwuI2*=ttkmRcz+f9(94>5`We z?y=Uw81MhC3EZ^9zP8Inb-aY!UEf@m#$i{R9_#9P(f~JHkVA7iNxiHHKg&@RpBfPn z9X@Ew$)5*UgPt>C#zrJ@?@M-&?2~&c01Q#?`KMaw^DtwT4u%6F6jp5Pd-+(_)?@zp zNdl&U58k1r^QF+qweS$plY&f2ZIYoyBT7%%fR$X?%7MdB-nc!V(K(^=5BjcW-aeJg z`s?U}De;igmlk(%A0x#{G#bdhMF}8(l&)Pp!Ng#8iwlGHSZjdYximb@O7)V8IUuVP z_D3l(NOu73{!#iw1P|^B=;U{MD#rsF5PuKxUcgQ#Uob z+y-A|Gq_N5e#-mgYGrx)Jq}gIJqeWbx9f!WSUG5c^7BHGMrJ&ASOItJF6f%vL;lCr z3(yZ9ux9`p@a;onx?>OQr}>zsMnh2_pR+Cg?mdI*g8&<7*FZ`&?~2+liE)ByrhC7T zw3>F1bgQy8MX4vb@(1FUSwigb>uhNSUG8=xP2r8`^)>))`QqvcI2Hz&J~7W zs=aPK4N|H^pD_IdA^2xeh|6@7(-2g)OGS6@G{Ez+g0%5-vQLxIN) zuzo|+MbFF0_zsbl{?No9nbP@5wC$?}eB&czJ*sy{k-JZSff~_>3bM0TP14fdcY=05 zUtvdPSV~E-J|#jC`O)-*o2)hxxn`Mc-<% zQ3tmdUSo8<`$9Wne$2QW+xE24!q(58%#^8x3(FQOZS7=nW^mh^Y=`?d1khr4DY0Lc za!q&f2sOe7-tFy(GfN!^dz89p(`2HjgO&9uv*47V{EE2mNb!y})q}6 zQ&*&=(zL#E-21=5{`qwgq5?>Y`#x8X^R))WC7w7k>=nB9JC)f!Lc4Z3-*?f$Ws&}V z@DaA57bnHrYULp}4$Ywxq@s(JT4*%5vmdohIZ{~5saKj0mU(UA&+|zqIk>-7n@vF4 zo4wQQ@G*m3aJ#%&kroXF4A6!q1+?`anE!yvtW6VBFeS+k-qm#_m$M{^J;#tt=WEEBi$)j zqHOYz|9#+eTv1s_l+u^nw+U3Wl!_TZ2a??9&ju4iVv`kM>}ln{73mk3d&8Y4 z<;b(F>=hGt42lxIP#!A|Pc+vK?nNijzRG@rsNiY7sC9S}Kobq)k4WZQ(ydy*#x1iX zaIQ3jIzf+|ta89D6|=ofo5>;MlR`ljC&5unxclU` z)Rm}`mrGt)f5N_9$XR<0Hc`BIV()0-Q%$^tiTC|JAi3c9v{`o{xO;@#A*(UtI0Nn2^ssI20 literal 0 HcmV?d00001 diff --git a/backend/frontend/src/logos/reb und(400 x 100 px).png b/backend/frontend/src/logos/reb und(400 x 100 px).png new file mode 100644 index 0000000000000000000000000000000000000000..89643ff33a92c72b771bbcda65551d4d083595ff GIT binary patch literal 10364 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 Ti6{HN&j+d~Xv){fT1NaYB_xDB literal 0 HcmV?d00001 diff --git a/backend/frontend/src/logos/reb und.png b/backend/frontend/src/logos/reb und.png new file mode 100644 index 0000000000000000000000000000000000000000..e3f3e5539f8f5bbd4cf86ae36ad341fc53d6c6ff GIT binary patch literal 30440 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 { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! + \**********************************************************************/ +/***/ ((module) => { + +eval("function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@babel/runtime/helpers/interopRequireDefault.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/regenerator/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/@babel/runtime/regenerator/index.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("module.exports = __webpack_require__(/*! regenerator-runtime */ \"./node_modules/regenerator-runtime/runtime.js\");\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@babel/runtime/regenerator/index.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _emotion_sheet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/sheet */ \"./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! stylis */ \"./node_modules/stylis/src/Tokenizer.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! stylis */ \"./node_modules/stylis/src/Utility.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! stylis */ \"./node_modules/stylis/src/Middleware.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! stylis */ \"./node_modules/stylis/src/Serializer.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! stylis */ \"./node_modules/stylis/src/Enum.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! stylis */ \"./node_modules/stylis/src/Parser.js\");\n/* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/weak-memoize */ \"./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js\");\n/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/memoize */ \"./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js\");\n\n\n\n\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n}; // based on https://github.com/thysultan/stylis.js/blob/e6843c373ebcbbfade25ebcc23f540ed8508da0a/src/Tokenizer.js#L239-L244\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = (0,stylis__WEBPACK_IMPORTED_MODULE_3__.peek)(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if ((0,stylis__WEBPACK_IMPORTED_MODULE_3__.token)(character)) {\n break;\n }\n\n (0,stylis__WEBPACK_IMPORTED_MODULE_3__.next)();\n }\n\n return (0,stylis__WEBPACK_IMPORTED_MODULE_3__.slice)(begin, stylis__WEBPACK_IMPORTED_MODULE_3__.position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch ((0,stylis__WEBPACK_IMPORTED_MODULE_3__.token)(character)) {\n case 0:\n // &\\f\n if (character === 38 && (0,stylis__WEBPACK_IMPORTED_MODULE_3__.peek)() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(stylis__WEBPACK_IMPORTED_MODULE_3__.position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += (0,stylis__WEBPACK_IMPORTED_MODULE_3__.delimit)(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = (0,stylis__WEBPACK_IMPORTED_MODULE_3__.peek)() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += (0,stylis__WEBPACK_IMPORTED_MODULE_4__.from)(character);\n }\n } while (character = (0,stylis__WEBPACK_IMPORTED_MODULE_3__.next)());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return (0,stylis__WEBPACK_IMPORTED_MODULE_3__.dealloc)(toRules((0,stylis__WEBPACK_IMPORTED_MODULE_3__.alloc)(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // .length indicates if this rule contains pseudo or not\n !element.length) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [stylis__WEBPACK_IMPORTED_MODULE_5__.prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if ( true && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (true) {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (true) {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stylis__WEBPACK_IMPORTED_MODULE_6__.stringify, true ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== stylis__WEBPACK_IMPORTED_MODULE_7__.COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : 0];\n var serializer = (0,stylis__WEBPACK_IMPORTED_MODULE_5__.middleware)(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return (0,stylis__WEBPACK_IMPORTED_MODULE_6__.serialize)((0,stylis__WEBPACK_IMPORTED_MODULE_8__.compile)(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if ( true && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new _emotion_sheet__WEBPACK_IMPORTED_MODULE_0__.StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createCache);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/hash/dist/hash.browser.esm.js": +/*!*************************************************************!*\ + !*** ./node_modules/@emotion/hash/dist/hash.browser.esm.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (murmur2);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/hash/dist/hash.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js": +/*!***************************************************************************************!*\ + !*** ./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js ***! + \***************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ \"./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js\");\n\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPropValid);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/react/dist/emotion-element-99289b21.browser.esm.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/@emotion/react/dist/emotion-element-99289b21.browser.esm.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"C\": () => (/* binding */ CacheProvider),\n/* harmony export */ \"E\": () => (/* binding */ Emotion),\n/* harmony export */ \"T\": () => (/* binding */ ThemeContext),\n/* harmony export */ \"_\": () => (/* binding */ __unsafe_useEmotionCache),\n/* harmony export */ \"a\": () => (/* binding */ ThemeProvider),\n/* harmony export */ \"b\": () => (/* binding */ withTheme),\n/* harmony export */ \"c\": () => (/* binding */ createEmotionProps),\n/* harmony export */ \"h\": () => (/* binding */ hasOwnProperty),\n/* harmony export */ \"u\": () => (/* binding */ useTheme),\n/* harmony export */ \"w\": () => (/* binding */ withEmotionCache)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/cache */ \"./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/weak-memoize */ \"./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js\");\n/* harmony import */ var _isolated_hoist_non_react_statics_do_not_use_this_in_your_code_dist_emotion_react_isolated_hoist_non_react_statics_do_not_use_this_in_your_code_browser_esm_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js */ \"./node_modules/@emotion/react/isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js\");\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/utils */ \"./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js\");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/serialize */ \"./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js\");\n\n\n\n\n\n\n\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */(0,_emotion_cache__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n key: 'css'\n}) : null);\n\nif (true) {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props, ref) {\n // the cache will never be null in the browser\n var cache = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\n\nif (true) {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if ( true && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if ( true && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */(0,_emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(function (outerTheme) {\n return (0,_emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext);\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return (0,_isolated_hoist_non_react_statics_do_not_use_this_in_your_code_dist_emotion_react_isolated_hoist_non_react_statics_do_not_use_this_in_your_code_browser_esm_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(WithTheme, Component);\n}\n\n// thus we only need to replace what is a valid character for JS, but not for CSS\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if ( true && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type;\n\n if (true) {\n var error = new Error();\n\n if (error.stack) {\n // chrome\n var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z0-9$]+) /);\n\n if (!match) {\n // safari and firefox\n match = error.stack.match(/.*\\n([A-Z][A-Za-z0-9$]+)@/);\n }\n\n if (match) {\n newProps[labelPropName] = sanitizeIdentifier(match[1]);\n }\n }\n }\n\n return newProps;\n};\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__.getRegisteredStyles)(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_5__.serializeStyles)(registeredStyles, undefined, (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext));\n\n if ( true && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_5__.serializeStyles)([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n var rules = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__.insertStyles)(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && ( false || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(type, newProps);\n\n return ele;\n});\n\nif (true) {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\n\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/react/dist/emotion-element-99289b21.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/react/dist/emotion-react.browser.esm.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@emotion/react/dist/emotion-react.browser.esm.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CacheProvider\": () => (/* reexport safe */ _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.C),\n/* harmony export */ \"ThemeContext\": () => (/* reexport safe */ _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.T),\n/* harmony export */ \"ThemeProvider\": () => (/* reexport safe */ _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.a),\n/* harmony export */ \"__unsafe_useEmotionCache\": () => (/* reexport safe */ _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__._),\n/* harmony export */ \"useTheme\": () => (/* reexport safe */ _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.u),\n/* harmony export */ \"withEmotionCache\": () => (/* reexport safe */ _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.w),\n/* harmony export */ \"withTheme\": () => (/* reexport safe */ _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.b),\n/* harmony export */ \"ClassNames\": () => (/* binding */ ClassNames),\n/* harmony export */ \"Global\": () => (/* binding */ Global),\n/* harmony export */ \"createElement\": () => (/* binding */ jsx),\n/* harmony export */ \"css\": () => (/* binding */ css),\n/* harmony export */ \"jsx\": () => (/* binding */ jsx),\n/* harmony export */ \"keyframes\": () => (/* binding */ keyframes)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/cache */ \"./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js\");\n/* harmony import */ var _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotion-element-99289b21.browser.esm.js */ \"./node_modules/@emotion/react/dist/emotion-element-99289b21.browser.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/weak-memoize */ \"./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! hoist-non-react-statics */ \"./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @emotion/utils */ \"./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js\");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @emotion/serialize */ \"./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js\");\n/* harmony import */ var _emotion_sheet__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @emotion/sheet */ \"./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nvar pkg = {\n\tname: \"@emotion/react\",\n\tversion: \"11.5.0\",\n\tmain: \"dist/emotion-react.cjs.js\",\n\tmodule: \"dist/emotion-react.esm.js\",\n\tbrowser: {\n\t\t\"./dist/emotion-react.cjs.js\": \"./dist/emotion-react.browser.cjs.js\",\n\t\t\"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n\t},\n\ttypes: \"types/index.d.ts\",\n\tfiles: [\n\t\t\"src\",\n\t\t\"dist\",\n\t\t\"jsx-runtime\",\n\t\t\"jsx-dev-runtime\",\n\t\t\"isolated-hoist-non-react-statics-do-not-use-this-in-your-code\",\n\t\t\"types/*.d.ts\",\n\t\t\"macro.js\",\n\t\t\"macro.d.ts\",\n\t\t\"macro.js.flow\"\n\t],\n\tsideEffects: false,\n\tauthor: \"mitchellhamilton \",\n\tlicense: \"MIT\",\n\tscripts: {\n\t\t\"test:typescript\": \"dtslint types\"\n\t},\n\tdependencies: {\n\t\t\"@babel/runtime\": \"^7.13.10\",\n\t\t\"@emotion/cache\": \"^11.5.0\",\n\t\t\"@emotion/serialize\": \"^1.0.2\",\n\t\t\"@emotion/sheet\": \"^1.0.3\",\n\t\t\"@emotion/utils\": \"^1.0.0\",\n\t\t\"@emotion/weak-memoize\": \"^0.2.5\",\n\t\t\"hoist-non-react-statics\": \"^3.3.1\"\n\t},\n\tpeerDependencies: {\n\t\t\"@babel/core\": \"^7.0.0\",\n\t\treact: \">=16.8.0\"\n\t},\n\tpeerDependenciesMeta: {\n\t\t\"@babel/core\": {\n\t\t\toptional: true\n\t\t},\n\t\t\"@types/react\": {\n\t\t\toptional: true\n\t\t}\n\t},\n\tdevDependencies: {\n\t\t\"@babel/core\": \"^7.13.10\",\n\t\t\"@emotion/css\": \"11.5.0\",\n\t\t\"@emotion/css-prettifier\": \"1.0.0\",\n\t\t\"@emotion/server\": \"11.4.0\",\n\t\t\"@emotion/styled\": \"11.3.0\",\n\t\t\"@types/react\": \"^16.9.11\",\n\t\tdtslint: \"^0.3.0\",\n\t\t\"html-tag-names\": \"^1.1.2\",\n\t\treact: \"16.14.0\",\n\t\t\"svg-tag-names\": \"^1.1.1\"\n\t},\n\trepository: \"https://github.com/emotion-js/emotion/tree/main/packages/react\",\n\tpublishConfig: {\n\t\taccess: \"public\"\n\t},\n\t\"umd:main\": \"dist/emotion-react.umd.min.js\",\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t\"./index.js\",\n\t\t\t\"./jsx-runtime.js\",\n\t\t\t\"./jsx-dev-runtime.js\",\n\t\t\t\"./isolated-hoist-non-react-statics-do-not-use-this-in-your-code.js\"\n\t\t],\n\t\tumdName: \"emotionReact\"\n\t}\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !_emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.h.call(props, 'css')) {\n // $FlowFixMe\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = _emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.E;\n createElementArgArray[1] = (0,_emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.c)(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */(0,_emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.w)(function (props, cache) {\n if ( true && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_7__.serializeStyles)([styles], undefined, (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.T));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(function () {\n var key = cache.key + \"-global\";\n var sheet = new _emotion_sheet__WEBPACK_IMPORTED_MODULE_8__.StyleSheet({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false; // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__.insertStyles)(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nif (true) {\n Global.displayName = 'EmotionGlobal';\n}\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_7__.serializeStyles)(args);\n}\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n if ( true && arg.styles !== undefined && arg.name !== undefined) {\n console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.');\n }\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__.getRegisteredStyles)(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar ClassNames = /* #__PURE__ */(0,_emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.w)(function (props, cache) {\n var hasRendered = false;\n\n var css = function css() {\n if (hasRendered && \"development\" !== 'production') {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_7__.serializeStyles)(args, cache.registered);\n\n {\n (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__.insertStyles)(cache, serialized, false);\n }\n\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && \"development\" !== 'production') {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_emotion_element_99289b21_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.T)\n };\n var ele = props.children(content);\n hasRendered = true;\n\n return ele;\n});\n\nif (true) {\n ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (true) {\n var isBrowser = \"object\" !== 'undefined'; // #1727 for some reason Jest evaluates modules twice if some consuming module gets mocked with jest.mock\n\n var isJest = typeof jest !== 'undefined';\n\n if (isBrowser && !isJest) {\n // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later\n var globalContext = // $FlowIgnore\n typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef\n : isBrowser ? window : __webpack_require__.g;\n var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n if (globalContext[globalKey]) {\n console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n }\n\n globalContext[globalKey] = true;\n }\n}\n\n\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/react/dist/emotion-react.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/react/isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js": +/*!***************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/@emotion/react/isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js ***! + \***************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! hoist-non-react-statics */ \"./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0__);\n\n\n// this file isolates this package that is not tree-shakeable\n// and if this module doesn't actually contain any logic of its own\n// then Rollup just use 'hoist-non-react-statics' directly in other chunks\n\nvar hoistNonReactStatics = (function (targetComponent, sourceComponent) {\n return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0___default()(targetComponent, sourceComponent);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hoistNonReactStatics);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/react/isolated-hoist-non-react-statics-do-not-use-this-in-your-code/dist/emotion-react-isolated-hoist-non-react-statics-do-not-use-this-in-your-code.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"serializeStyles\": () => (/* binding */ serializeStyles)\n/* harmony export */ });\n/* harmony import */ var _emotion_hash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/hash */ \"./node_modules/@emotion/hash/dist/hash.browser.esm.js\");\n/* harmony import */ var _emotion_unitless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/unitless */ \"./node_modules/@emotion/unitless/dist/unitless.browser.esm.js\");\n/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/memoize */ \"./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js\");\n\n\n\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (_emotion_unitless__WEBPACK_IMPORTED_MODULE_1__[\"default\"][key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (true) {\n var contentValuePattern = /(attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if ( true && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if ( true && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (true) {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (true) {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && \"development\" !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if ( true && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (true) {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if ( true && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if ( true && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (true) {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = (0,_emotion_hash__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(styles) + identifierName;\n\n if (true) {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\n\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"StyleSheet\": () => (/* binding */ StyleSheet)\n/* harmony export */ });\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n before = _this.prepend ? _this.container.firstChild : _this.before;\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? \"development\" === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (true) {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if ( true && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (true) {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\n\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/is-prop-valid */ \"./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js\");\n/* harmony import */ var _emotion_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/react */ \"./node_modules/@emotion/react/dist/emotion-element-99289b21.browser.esm.js\");\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/utils */ \"./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js\");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/serialize */ \"./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js\");\n\n\n\n\n\n\n\nvar testOmitPropsOnStringTag = _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar createStyled = function createStyled(tag, options) {\n if (true) {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if ( true && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if ( true && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = (0,_emotion_react__WEBPACK_IMPORTED_MODULE_5__.w)(function (props, cache, ref) {\n var finalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_emotion_react__WEBPACK_IMPORTED_MODULE_5__.T);\n }\n\n if (typeof props.className === 'string') {\n className = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_3__.getRegisteredStyles)(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__.serializeStyles)(styles.concat(classInterpolations), cache.registered, mergedProps);\n var rules = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_3__.insertStyles)(cache, serialized, typeof finalTag === 'string');\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n var ele = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createElement)(finalTag, newProps);\n\n return ele;\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && \"development\" !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createStyled);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/is-prop-valid */ \"./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js\");\n/* harmony import */ var _base_dist_emotion_styled_base_browser_esm_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../base/dist/emotion-styled-base.browser.esm.js */ \"./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js\");\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/utils */ \"./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js\");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/serialize */ \"./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js\");\n\n\n\n\n\n\n\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = _base_dist_emotion_styled_base_browser_esm_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (newStyled);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/unitless/dist/unitless.browser.esm.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@emotion/unitless/dist/unitless.browser.esm.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (unitlessKeys);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/unitless/dist/unitless.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getRegisteredStyles\": () => (/* binding */ getRegisteredStyles),\n/* harmony export */ \"insertStyles\": () => (/* binding */ insertStyles)\n/* harmony export */ });\nvar isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\n\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar weakMemoize = function weakMemoize(func) {\n // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // $FlowFixMe\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (weakMemoize);\n\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/BackdropUnstyled/BackdropUnstyled.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@mui/core/BackdropUnstyled/BackdropUnstyled.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _composeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../composeClasses */ \"./node_modules/@mui/core/composeClasses/composeClasses.js\");\n/* harmony import */ var _utils_isHostComponent__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/isHostComponent */ \"./node_modules/@mui/core/utils/isHostComponent.js\");\n/* harmony import */ var _backdropUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./backdropUnstyledClasses */ \"./node_modules/@mui/core/BackdropUnstyled/backdropUnstyledClasses.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n\n\nconst _excluded = [\"classes\", \"className\", \"invisible\", \"component\", \"components\", \"componentsProps\", \"theme\"];\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n invisible\n } = ownerState;\n const slots = {\n root: ['root', invisible && 'invisible']\n };\n return (0,_composeClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(slots, _backdropUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__.getBackdropUtilityClass, classes);\n};\n\nconst BackdropUnstyled = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function BackdropUnstyled(props, ref) {\n const {\n classes: classesProp,\n className,\n invisible = false,\n component = 'div',\n components = {},\n componentsProps = {},\n\n /* eslint-disable react/prop-types */\n theme\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, props, {\n classes: classesProp,\n invisible\n });\n\n const classes = useUtilityClasses(ownerState);\n const Root = components.Root || component;\n const rootProps = componentsProps.root || {};\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n \"aria-hidden\": true\n }, rootProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(Root) && {\n as: component,\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, ownerState, rootProps.ownerState),\n theme\n }, {\n ref: ref\n }, other, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, rootProps.className, className)\n }));\n});\n true ? BackdropUnstyled.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node),\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType),\n\n /**\n * The components used for each slot inside the Backdrop.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n components: prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n Root: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType)\n }),\n\n /**\n * The props used for each slot inside the Backdrop.\n * @default {}\n */\n componentsProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n\n /**\n * If `true`, the backdrop is invisible.\n * It can be used when rendering a popover or a custom select component.\n * @default false\n */\n invisible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BackdropUnstyled);\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@mui/core/BackdropUnstyled/BackdropUnstyled.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/BackdropUnstyled/backdropUnstyledClasses.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@mui/core/BackdropUnstyled/backdropUnstyledClasses.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getBackdropUtilityClass\": () => (/* binding */ getBackdropUtilityClass),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../generateUtilityClasses */ \"./node_modules/@mui/core/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/core/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getBackdropUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiBackdrop', slot);\n}\nconst backdropUnstyledClasses = (0,_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiBackdrop', ['root', 'invisible']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (backdropUnstyledClasses);\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@mui/core/BackdropUnstyled/backdropUnstyledClasses.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/ModalUnstyled/ModalManager.js": +/*!**************************************************************!*\ + !*** ./node_modules/@mui/core/ModalUnstyled/ModalManager.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ariaHidden\": () => (/* binding */ ariaHidden),\n/* harmony export */ \"default\": () => (/* binding */ ModalManager)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerDocument.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerWindow.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/getScrollbarSize.js\");\n\n\n// Is a vertical scrollbar displayed?\nfunction isOverflowing(container) {\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(container);\n\n if (doc.body === container) {\n return (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(container).innerWidth > doc.documentElement.clientWidth;\n }\n\n return container.scrollHeight > container.clientHeight;\n}\n\nfunction ariaHidden(element, show) {\n if (show) {\n element.setAttribute('aria-hidden', 'true');\n } else {\n element.removeAttribute('aria-hidden');\n }\n}\n\nfunction getPaddingRight(element) {\n return parseInt((0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element).getComputedStyle(element).paddingRight, 10) || 0;\n}\n\nfunction ariaHiddenSiblings(container, mountElement, currentElement, elementsToExclude = [], show) {\n const blacklist = [mountElement, currentElement, ...elementsToExclude];\n const blacklistTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE'];\n [].forEach.call(container.children, element => {\n if (blacklist.indexOf(element) === -1 && blacklistTagNames.indexOf(element.tagName) === -1) {\n ariaHidden(element, show);\n }\n });\n}\n\nfunction findIndexOf(items, callback) {\n let idx = -1;\n items.some((item, index) => {\n if (callback(item)) {\n idx = index;\n return true;\n }\n\n return false;\n });\n return idx;\n}\n\nfunction handleContainer(containerInfo, props) {\n const restoreStyle = [];\n const container = containerInfo.container;\n\n if (!props.disableScrollLock) {\n if (isOverflowing(container)) {\n // Compute the size before applying overflow hidden to avoid any scroll jumps.\n const scrollbarSize = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(container));\n restoreStyle.push({\n value: container.style.paddingRight,\n property: 'padding-right',\n el: container\n }); // Use computed style, here to get the real padding to add our scrollbar width.\n\n container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`; // .mui-fixed is a global helper.\n\n const fixedElements = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(container).querySelectorAll('.mui-fixed');\n [].forEach.call(fixedElements, element => {\n restoreStyle.push({\n value: element.style.paddingRight,\n property: 'padding-right',\n el: element\n });\n element.style.paddingRight = `${getPaddingRight(element) + scrollbarSize}px`;\n });\n } // Improve Gatsby support\n // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n\n\n const parent = container.parentElement;\n const containerWindow = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(container);\n const scrollContainer = (parent == null ? void 0 : parent.nodeName) === 'HTML' && containerWindow.getComputedStyle(parent).overflowY === 'scroll' ? parent : container; // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n // screensize shrink.\n\n restoreStyle.push({\n value: scrollContainer.style.overflow,\n property: 'overflow',\n el: scrollContainer\n }, {\n value: scrollContainer.style.overflowX,\n property: 'overflow-x',\n el: scrollContainer\n }, {\n value: scrollContainer.style.overflowY,\n property: 'overflow-y',\n el: scrollContainer\n });\n scrollContainer.style.overflow = 'hidden';\n }\n\n const restore = () => {\n restoreStyle.forEach(({\n value,\n el,\n property\n }) => {\n if (value) {\n el.style.setProperty(property, value);\n } else {\n el.style.removeProperty(property);\n }\n });\n };\n\n return restore;\n}\n\nfunction getHiddenSiblings(container) {\n const hiddenSiblings = [];\n [].forEach.call(container.children, element => {\n if (element.getAttribute('aria-hidden') === 'true') {\n hiddenSiblings.push(element);\n }\n });\n return hiddenSiblings;\n}\n\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\nclass ModalManager {\n constructor() {\n this.containers = void 0;\n this.modals = void 0;\n this.modals = [];\n this.containers = [];\n }\n\n add(modal, container) {\n let modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex !== -1) {\n return modalIndex;\n }\n\n modalIndex = this.modals.length;\n this.modals.push(modal); // If the modal we are adding is already in the DOM.\n\n if (modal.modalRef) {\n ariaHidden(modal.modalRef, false);\n }\n\n const hiddenSiblings = getHiddenSiblings(container);\n ariaHiddenSiblings(container, modal.mount, modal.modalRef, hiddenSiblings, true);\n const containerIndex = findIndexOf(this.containers, item => item.container === container);\n\n if (containerIndex !== -1) {\n this.containers[containerIndex].modals.push(modal);\n return modalIndex;\n }\n\n this.containers.push({\n modals: [modal],\n container,\n restore: null,\n hiddenSiblings\n });\n return modalIndex;\n }\n\n mount(modal, props) {\n const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);\n const containerInfo = this.containers[containerIndex];\n\n if (!containerInfo.restore) {\n containerInfo.restore = handleContainer(containerInfo, props);\n }\n }\n\n remove(modal) {\n const modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex === -1) {\n return modalIndex;\n }\n\n const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);\n const containerInfo = this.containers[containerIndex];\n containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n this.modals.splice(modalIndex, 1); // If that was the last modal in a container, clean up the container.\n\n if (containerInfo.modals.length === 0) {\n // The modal might be closed before it had the chance to be mounted in the DOM.\n if (containerInfo.restore) {\n containerInfo.restore();\n }\n\n if (modal.modalRef) {\n // In case the modal wasn't in the DOM yet.\n ariaHidden(modal.modalRef, true);\n }\n\n ariaHiddenSiblings(containerInfo.container, modal.mount, modal.modalRef, containerInfo.hiddenSiblings, false);\n this.containers.splice(containerIndex, 1);\n } else {\n // Otherwise make sure the next top modal is visible to a screen reader.\n const nextTop = containerInfo.modals[containerInfo.modals.length - 1]; // as soon as a modal is adding its modalRef is undefined. it can't set\n // aria-hidden because the dom element doesn't exist either\n // when modal was unmounted before modalRef gets null\n\n if (nextTop.modalRef) {\n ariaHidden(nextTop.modalRef, false);\n }\n }\n\n return modalIndex;\n }\n\n isTopModal(modal) {\n return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n }\n\n}\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@mui/core/ModalUnstyled/ModalManager.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/ModalUnstyled/ModalUnstyled.js": +/*!***************************************************************!*\ + !*** ./node_modules/@mui/core/ModalUnstyled/ModalUnstyled.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useForkRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerDocument.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useEventCallback.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/createChainedFunction.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/elementAcceptingRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/HTMLElementType.js\");\n/* harmony import */ var _composeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../composeClasses */ \"./node_modules/@mui/core/composeClasses/composeClasses.js\");\n/* harmony import */ var _utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/isHostComponent */ \"./node_modules/@mui/core/utils/isHostComponent.js\");\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../Portal */ \"./node_modules/@mui/core/Portal/Portal.js\");\n/* harmony import */ var _ModalManager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ModalManager */ \"./node_modules/@mui/core/ModalUnstyled/ModalManager.js\");\n/* harmony import */ var _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../Unstable_TrapFocus */ \"./node_modules/@mui/core/Unstable_TrapFocus/Unstable_TrapFocus.js\");\n/* harmony import */ var _modalUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modalUnstyledClasses */ \"./node_modules/@mui/core/ModalUnstyled/modalUnstyledClasses.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n\n\nconst _excluded = [\"BackdropComponent\", \"BackdropProps\", \"children\", \"classes\", \"className\", \"closeAfterTransition\", \"component\", \"components\", \"componentsProps\", \"container\", \"disableAutoFocus\", \"disableEnforceFocus\", \"disableEscapeKeyDown\", \"disablePortal\", \"disableRestoreFocus\", \"disableScrollLock\", \"hideBackdrop\", \"keepMounted\", \"manager\", \"onBackdropClick\", \"onClose\", \"onKeyDown\", \"open\", \"theme\", \"onTransitionEnter\", \"onTransitionExited\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n open,\n exited,\n classes\n } = ownerState;\n const slots = {\n root: ['root', !open && exited && 'hidden']\n };\n return (0,_composeClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(slots, _modalUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__.getModalUtilityClass, classes);\n};\n\nfunction getContainer(container) {\n return typeof container === 'function' ? container() : container;\n}\n\nfunction getHasTransition(props) {\n return props.children ? props.children.props.hasOwnProperty('in') : false;\n} // A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\n\n\nconst defaultManager = new _ModalManager__WEBPACK_IMPORTED_MODULE_8__[\"default\"]();\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/api/dialog/)\n * - [Drawer](/api/drawer/)\n * - [Menu](/api/menu/)\n * - [Popover](/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\n\nconst ModalUnstyled = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function ModalUnstyled(props, ref) {\n const {\n BackdropComponent,\n BackdropProps,\n children,\n classes: classesProp,\n className,\n closeAfterTransition = false,\n component = 'div',\n components = {},\n componentsProps = {},\n container,\n disableAutoFocus = false,\n disableEnforceFocus = false,\n disableEscapeKeyDown = false,\n disablePortal = false,\n disableRestoreFocus = false,\n disableScrollLock = false,\n hideBackdrop = false,\n keepMounted = false,\n // private\n // eslint-disable-next-line react/prop-types\n manager = defaultManager,\n onBackdropClick,\n onClose,\n onKeyDown,\n open,\n\n /* eslint-disable react/prop-types */\n theme,\n onTransitionEnter,\n onTransitionExited\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n\n const [exited, setExited] = react__WEBPACK_IMPORTED_MODULE_2__.useState(true);\n const modal = react__WEBPACK_IMPORTED_MODULE_2__.useRef({});\n const mountNodeRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const modalRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(modalRef, ref);\n const hasTransition = getHasTransition(props);\n\n const getDoc = () => (0,_mui_utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(mountNodeRef.current);\n\n const getModal = () => {\n modal.current.modalRef = modalRef.current;\n modal.current.mountNode = mountNodeRef.current;\n return modal.current;\n };\n\n const handleMounted = () => {\n manager.mount(getModal(), {\n disableScrollLock\n }); // Fix a bug on Chrome where the scroll isn't initially 0.\n\n modalRef.current.scrollTop = 0;\n };\n\n const handleOpen = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(() => {\n const resolvedContainer = getContainer(container) || getDoc().body;\n manager.add(getModal(), resolvedContainer); // The element was already mounted.\n\n if (modalRef.current) {\n handleMounted();\n }\n });\n const isTopModal = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => manager.isTopModal(getModal()), [manager]);\n const handlePortalRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(node => {\n mountNodeRef.current = node;\n\n if (!node) {\n return;\n }\n\n if (open && isTopModal()) {\n handleMounted();\n } else {\n (0,_ModalManager__WEBPACK_IMPORTED_MODULE_8__.ariaHidden)(modalRef.current, true);\n }\n });\n const handleClose = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => {\n manager.remove(getModal());\n }, [manager]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n return () => {\n handleClose();\n };\n }, [handleClose]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (open) {\n handleOpen();\n } else if (!hasTransition || !closeAfterTransition) {\n handleClose();\n }\n }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, props, {\n classes: classesProp,\n closeAfterTransition,\n disableAutoFocus,\n disableEnforceFocus,\n disableEscapeKeyDown,\n disablePortal,\n disableRestoreFocus,\n disableScrollLock,\n exited,\n hideBackdrop,\n keepMounted\n });\n\n const classes = useUtilityClasses(ownerState);\n\n if (!keepMounted && !open && (!hasTransition || exited)) {\n return null;\n }\n\n const handleEnter = () => {\n setExited(false);\n\n if (onTransitionEnter) {\n onTransitionEnter();\n }\n };\n\n const handleExited = () => {\n setExited(true);\n\n if (onTransitionExited) {\n onTransitionExited();\n }\n\n if (closeAfterTransition) {\n handleClose();\n }\n };\n\n const handleBackdropClick = event => {\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (onBackdropClick) {\n onBackdropClick(event);\n }\n\n if (onClose) {\n onClose(event, 'backdropClick');\n }\n };\n\n const handleKeyDown = event => {\n if (onKeyDown) {\n onKeyDown(event);\n } // The handler doesn't take event.defaultPrevented into account:\n //\n // event.preventDefault() is meant to stop default behaviors like\n // clicking a checkbox to check it, hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default behaviors.\n\n\n if (event.key !== 'Escape' || !isTopModal()) {\n return;\n }\n\n if (!disableEscapeKeyDown) {\n // Swallow the event, in case someone is listening for the escape key on the body.\n event.stopPropagation();\n\n if (onClose) {\n onClose(event, 'escapeKeyDown');\n }\n }\n };\n\n const childProps = {};\n\n if (children.props.tabIndex === undefined) {\n childProps.tabIndex = '-1';\n } // It's a Transition like component\n\n\n if (hasTransition) {\n childProps.onEnter = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(handleEnter, children.props.onEnter);\n childProps.onExited = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(handleExited, children.props.onExited);\n }\n\n const Root = components.Root || component;\n const rootProps = componentsProps.root || {};\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_Portal__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n ref: handlePortalRef,\n container: container,\n disablePortal: disablePortal,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n role: \"presentation\"\n }, rootProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(Root) && {\n as: component,\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, ownerState, rootProps.ownerState),\n theme\n }, other, {\n ref: handleRef,\n onKeyDown: handleKeyDown,\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, rootProps.className, className),\n children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(BackdropComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n open: open,\n onClick: handleBackdropClick\n }, BackdropProps)) : null, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n disableEnforceFocus: disableEnforceFocus,\n disableAutoFocus: disableAutoFocus,\n disableRestoreFocus: disableRestoreFocus,\n isEnabled: isTopModal,\n open: open,\n children: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(children, childProps)\n })]\n }))\n });\n});\n true ? ModalUnstyled.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * A backdrop component. This prop enables custom backdrop rendering.\n */\n BackdropComponent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType),\n\n /**\n * Props applied to the [`BackdropUnstyled`](/api/backdrop-unstyled/) element.\n */\n BackdropProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n\n /**\n * A single child content element.\n */\n children: _mui_utils__WEBPACK_IMPORTED_MODULE_16__[\"default\"].isRequired,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n\n /**\n * When set to true the Modal waits until a nested Transition is completed before closing.\n * @default false\n */\n closeAfterTransition: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType),\n\n /**\n * The components used for each slot inside the Modal.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n components: prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n Root: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType)\n }),\n\n /**\n * The props used for each slot inside the Modal.\n * @default {}\n */\n componentsProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([_mui_utils__WEBPACK_IMPORTED_MODULE_17__[\"default\"], (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)]),\n\n /**\n * If `true`, the modal will not automatically shift focus to itself when it opens, and\n * replace it to the last focused element when it closes.\n * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableAutoFocus: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * If `true`, the modal will not prevent focus from leaving the modal while open.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableEnforceFocus: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * If `true`, hitting escape will not fire the `onClose` callback.\n * @default false\n */\n disableEscapeKeyDown: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * If `true`, the modal will not restore focus to previously focused element once\n * modal is hidden.\n * @default false\n */\n disableRestoreFocus: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * Disable the scroll lock behavior.\n * @default false\n */\n disableScrollLock: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * If `true`, the backdrop is not rendered.\n * @default false\n */\n hideBackdrop: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * Always keep the children in the DOM.\n * This prop can be useful in SEO situation or\n * when you want to maximize the responsiveness of the Modal.\n * @default false\n */\n keepMounted: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n\n /**\n * Callback fired when the backdrop is clicked.\n */\n onBackdropClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n\n /**\n * Callback fired when the component requests to be closed.\n * The `reason` parameter can optionally be used to control the response to `onClose`.\n *\n * @param {object} event The event source of the callback.\n * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n */\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n\n /**\n * @ignore\n */\n onKeyDown: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n\n /**\n * If `true`, the component is shown.\n */\n open: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool.isRequired)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ModalUnstyled);\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@mui/core/ModalUnstyled/ModalUnstyled.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/ModalUnstyled/modalUnstyledClasses.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@mui/core/ModalUnstyled/modalUnstyledClasses.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getModalUtilityClass\": () => (/* binding */ getModalUtilityClass),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../generateUtilityClasses */ \"./node_modules/@mui/core/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/core/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getModalUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiModal', slot);\n}\nconst modalUnstyledClasses = (0,_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiModal', ['root', 'hidden']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (modalUnstyledClasses);\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@mui/core/ModalUnstyled/modalUnstyledClasses.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/Portal/Portal.js": +/*!*************************************************!*\ + !*** ./node_modules/@mui/core/Portal/Portal.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useForkRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useEnhancedEffect.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/setRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/HTMLElementType.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/exactProp.js\");\n\n\n\n\n\nfunction getContainer(container) {\n return typeof container === 'function' ? container() : container;\n}\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\n\n\nconst Portal = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function Portal(props, ref) {\n const {\n children,\n container,\n disablePortal = false\n } = props;\n const [mountNode, setMountNode] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(children) ? children.ref : null, ref);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(() => {\n if (!disablePortal) {\n setMountNode(getContainer(container) || document.body);\n }\n }, [container, disablePortal]);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(() => {\n if (mountNode && !disablePortal) {\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ref, mountNode);\n return () => {\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ref, null);\n };\n }\n\n return undefined;\n }, [ref, mountNode, disablePortal]);\n\n if (disablePortal) {\n if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(children)) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(children, {\n ref: handleRef\n });\n }\n\n return children;\n }\n\n return mountNode ? /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal(children, mountNode) : mountNode;\n});\n true ? Portal.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The children to render into the `container`.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().node),\n\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([_mui_utils__WEBPACK_IMPORTED_MODULE_6__[\"default\"], (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)]),\n\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool)\n} : 0;\n\nif (true) {\n // eslint-disable-next-line\n Portal['propTypes' + ''] = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Portal.propTypes);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Portal);\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@mui/core/Portal/Portal.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/TextareaAutosize/TextareaAutosize.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@mui/core/TextareaAutosize/TextareaAutosize.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useForkRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerWindow.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/debounce.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useEnhancedEffect.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n\n\nconst _excluded = [\"onChange\", \"maxRows\", \"minRows\", \"style\", \"value\"];\n\n\n\n\n\n\nfunction getStyleValue(computedStyle, property) {\n return parseInt(computedStyle[property], 10) || 0;\n}\n\nconst styles = {\n shadow: {\n // Visibility needed to hide the extra text area on iPads\n visibility: 'hidden',\n // Remove from the content flow\n position: 'absolute',\n // Ignore the scrollbar width\n overflow: 'hidden',\n height: 0,\n top: 0,\n left: 0,\n // Create a new layer, increase the isolation of the computed values\n transform: 'translateZ(0)'\n }\n};\nconst TextareaAutosize = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function TextareaAutosize(props, ref) {\n const {\n onChange,\n maxRows,\n minRows = 1,\n style,\n value\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n\n const {\n current: isControlled\n } = react__WEBPACK_IMPORTED_MODULE_2__.useRef(value != null);\n const inputRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ref, inputRef);\n const shadowRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const renders = react__WEBPACK_IMPORTED_MODULE_2__.useRef(0);\n const [state, setState] = react__WEBPACK_IMPORTED_MODULE_2__.useState({});\n const syncHeight = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => {\n const input = inputRef.current;\n const containerWindow = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(input);\n const computedStyle = containerWindow.getComputedStyle(input); // If input's width is shrunk and it's not visible, don't sync height.\n\n if (computedStyle.width === '0px') {\n return;\n }\n\n const inputShallow = shadowRef.current;\n inputShallow.style.width = computedStyle.width;\n inputShallow.value = input.value || props.placeholder || 'x';\n\n if (inputShallow.value.slice(-1) === '\\n') {\n // Certain fonts which overflow the line height will cause the textarea\n // to report a different scrollHeight depending on whether the last line\n // is empty. Make it non-empty to avoid this issue.\n inputShallow.value += ' ';\n }\n\n const boxSizing = computedStyle['box-sizing'];\n const padding = getStyleValue(computedStyle, 'padding-bottom') + getStyleValue(computedStyle, 'padding-top');\n const border = getStyleValue(computedStyle, 'border-bottom-width') + getStyleValue(computedStyle, 'border-top-width'); // The height of the inner content\n\n const innerHeight = inputShallow.scrollHeight; // Measure height of a textarea with a single row\n\n inputShallow.value = 'x';\n const singleRowHeight = inputShallow.scrollHeight; // The height of the outer content\n\n let outerHeight = innerHeight;\n\n if (minRows) {\n outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);\n }\n\n if (maxRows) {\n outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n }\n\n outerHeight = Math.max(outerHeight, singleRowHeight); // Take the box sizing into account for applying this value as a style.\n\n const outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);\n const overflow = Math.abs(outerHeight - innerHeight) <= 1;\n setState(prevState => {\n // Need a large enough difference to update the height.\n // This prevents infinite rendering loop.\n if (renders.current < 20 && (outerHeightStyle > 0 && Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1 || prevState.overflow !== overflow)) {\n renders.current += 1;\n return {\n overflow,\n outerHeightStyle\n };\n }\n\n if (true) {\n if (renders.current === 20) {\n console.error(['MUI: Too many re-renders. The layout is unstable.', 'TextareaAutosize limits the number of renders to prevent an infinite loop.'].join('\\n'));\n }\n }\n\n return prevState;\n });\n }, [maxRows, minRows, props.placeholder]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n const handleResize = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(() => {\n renders.current = 0;\n syncHeight();\n });\n const containerWindow = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(inputRef.current);\n containerWindow.addEventListener('resize', handleResize);\n let resizeObserver;\n\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(handleResize);\n resizeObserver.observe(inputRef.current);\n }\n\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener('resize', handleResize);\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [syncHeight]);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(() => {\n syncHeight();\n });\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n renders.current = 0;\n }, [value]);\n\n const handleChange = event => {\n renders.current = 0;\n\n if (!isControlled) {\n syncHeight();\n }\n\n if (onChange) {\n onChange(event);\n }\n };\n\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"textarea\", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n value: value,\n onChange: handleChange,\n ref: handleRef // Apply the rows prop to get a \"correct\" first SSR paint\n ,\n rows: minRows,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n height: state.outerHeightStyle,\n // Need a large enough difference to allow scrolling.\n // This prevents infinite rendering loop.\n overflow: state.overflow ? 'hidden' : null\n }, style)\n }, other)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"textarea\", {\n \"aria-hidden\": true,\n className: props.className,\n readOnly: true,\n ref: shadowRef,\n tabIndex: -1,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, styles.shadow, style, {\n padding: 0\n })\n })]\n });\n});\n true ? TextareaAutosize.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n\n /**\n * Maximum number of rows to display.\n */\n maxRows: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().number), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n\n /**\n * Minimum number of rows to display.\n * @default 1\n */\n minRows: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().number), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n\n /**\n * @ignore\n */\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n\n /**\n * @ignore\n */\n placeholder: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n\n /**\n * @ignore\n */\n style: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n\n /**\n * @ignore\n */\n value: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)])\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TextareaAutosize);\n\n//# sourceURL=webpack://webpack-demo/./node_modules/@mui/core/TextareaAutosize/TextareaAutosize.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/core/Unstable_TrapFocus/Unstable_TrapFocus.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@mui/core/Unstable_TrapFocus/Unstable_TrapFocus.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useForkRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerDocument.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/elementAcceptingRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/exactProp.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n/* eslint-disable @typescript-eslint/naming-convention, consistent-return, jsx-a11y/no-noninteractive-tabindex */\n\n\n // Inspired by https://github.com/focus-trap/tabbable\n\n\n\nconst candidatesSelector = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'].join(',');\n\nfunction getTabIndex(node) {\n const tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n\n if (!Number.isNaN(tabindexAttr)) {\n return tabindexAttr;\n } // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=661108&q=contenteditable%20tabindex&can=2\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n // in Chrome,
, element.\n color: 'inherit',\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n [`&.${_buttonBaseClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].disabled}`]: {\n pointerEvents: 'none',\n // Disable link interactions\n cursor: 'default'\n },\n '@media print': {\n colorAdjust: 'exact'\n }\n});\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\nconst ButtonBase = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function ButtonBase(inProps, ref) {\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_9__[\"default\"])({\n props: inProps,\n name: 'MuiButtonBase'\n });\n\n const {\n action,\n centerRipple = false,\n children,\n className,\n component = 'button',\n disabled = false,\n disableRipple = false,\n disableTouchRipple = false,\n focusRipple = false,\n LinkComponent = 'a',\n onBlur,\n onClick,\n onContextMenu,\n onDragLeave,\n onFocus,\n onFocusVisible,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseUp,\n onTouchEnd,\n onTouchMove,\n onTouchStart,\n tabIndex = 0,\n TouchRippleProps,\n type\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n\n const buttonRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const rippleRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef\n } = (0,_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_10__[\"default\"])();\n const [focusVisible, setFocusVisible] = react__WEBPACK_IMPORTED_MODULE_2__.useState(false);\n\n if (disabled && focusVisible) {\n setFocusVisible(false);\n }\n\n react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle(action, () => ({\n focusVisible: () => {\n setFocusVisible(true);\n buttonRef.current.focus();\n }\n }), []);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (focusVisible && focusRipple && !disableRipple) {\n rippleRef.current.pulsate();\n }\n }, [disableRipple, focusRipple, focusVisible]);\n\n function useRippleHandler(rippleAction, eventCallback, skipRippleAction = disableTouchRipple) {\n return (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(event => {\n if (eventCallback) {\n eventCallback(event);\n }\n\n const ignore = skipRippleAction;\n\n if (!ignore && rippleRef.current) {\n rippleRef.current[rippleAction](event);\n }\n\n return true;\n });\n }\n\n const handleMouseDown = useRippleHandler('start', onMouseDown);\n const handleContextMenu = useRippleHandler('stop', onContextMenu);\n const handleDragLeave = useRippleHandler('stop', onDragLeave);\n const handleMouseUp = useRippleHandler('stop', onMouseUp);\n const handleMouseLeave = useRippleHandler('stop', event => {\n if (focusVisible) {\n event.preventDefault();\n }\n\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n });\n const handleTouchStart = useRippleHandler('start', onTouchStart);\n const handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n const handleTouchMove = useRippleHandler('stop', onTouchMove);\n const handleBlur = useRippleHandler('stop', event => {\n handleBlurVisible(event);\n\n if (isFocusVisibleRef.current === false) {\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n }, false);\n const handleFocus = (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(event => {\n // Fix for https://github.com/facebook/react/issues/7769\n if (!buttonRef.current) {\n buttonRef.current = event.currentTarget;\n }\n\n handleFocusVisible(event);\n\n if (isFocusVisibleRef.current === true) {\n setFocusVisible(true);\n\n if (onFocusVisible) {\n onFocusVisible(event);\n }\n }\n\n if (onFocus) {\n onFocus(event);\n }\n });\n\n const isNonNativeButton = () => {\n const button = buttonRef.current;\n return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n };\n /**\n * IE11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n */\n\n\n const keydownRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(false);\n const handleKeyDown = (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(event => {\n // Check if key is already down to avoid repeats being counted as multiple activations\n if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n keydownRef.current = true;\n rippleRef.current.stop(event, () => {\n rippleRef.current.start(event);\n });\n }\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n event.preventDefault();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n } // Keyboard accessibility for non interactive elements\n\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n event.preventDefault();\n\n if (onClick) {\n onClick(event);\n }\n }\n });\n const handleKeyUp = (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(event => {\n // calling preventDefault in keyUp on a