From cb17d9c381a2b95bd47eb2ea56c1a7a66d8b2f2a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 5 Jan 2024 17:00:29 +0000 Subject: [PATCH] deploy: e8e06cea79f840a3a79df88c6fcd2f4386654043 --- 0.2.0.html | 8 ++++---- 0.2.0/cluster.html | 8 ++++---- 0.2.0/deploying/fly_io.html | 8 ++++---- 0.2.0/deploying/vps.html | 8 ++++---- 0.2.0/examples.html | 8 ++++---- 0.2.0/for_developers/api_reference.html | 8 ++++---- 0.2.0/for_developers/api_reference/rest_api.html | 8 ++++---- 0.2.0/for_developers/design_docs.html | 8 ++++---- 0.2.0/getting_started/architecture.html | 8 ++++---- 0.2.0/getting_started/authentication.html | 8 ++++---- 0.2.0/getting_started/components/hls.html | 8 ++++---- 0.2.0/getting_started/components/rtsp.html | 8 ++++---- 0.2.0/getting_started/installation.html | 8 ++++---- 0.2.0/getting_started/metrics.html | 8 ++++---- 0.2.0/getting_started/notifications.html | 8 ++++---- 0.2.0/getting_started/peers/webrtc.html | 8 ++++---- 0.2.0/getting_started/sdks.html | 8 ++++---- 0.2.0/introduction/basic_concepts.html | 8 ++++---- 0.2.0/introduction/example_scenarios.html | 8 ++++---- 0.2.0/tutorials/dashboard.html | 8 ++++---- 0.2.0/tutorials/react-native.html | 8 ++++---- 0.2.0/tutorials/simple-react-app.html | 8 ++++---- 404.html | 8 ++++---- .../js/{533aebff.4829c178.js => 533aebff.d720e402.js} | 2 +- assets/js/{main.8ba72509.js => main.0955e310.js} | 4 ++-- ...509.js.LICENSE.txt => main.0955e310.js.LICENSE.txt} | 0 ...ntime~main.5f8d18d1.js => runtime~main.8c35425d.js} | 2 +- cluster.html | 8 ++++---- deploying/fly_io.html | 8 ++++---- deploying/vps.html | 8 ++++---- examples.html | 8 ++++---- examples/using-single-yaml.html | 8 ++++---- for_developers/api_reference.html | 8 ++++---- for_developers/api_reference/rest_api.html | 8 ++++---- for_developers/design_docs.html | 8 ++++---- getting_started/architecture.html | 8 ++++---- getting_started/authentication.html | 8 ++++---- getting_started/components/hls.html | 8 ++++---- getting_started/components/rtsp.html | 8 ++++---- getting_started/installation.html | 8 ++++---- getting_started/metrics.html | 8 ++++---- getting_started/notifications.html | 8 ++++---- getting_started/peers/webrtc.html | 8 ++++---- getting_started/sdks.html | 8 ++++---- index.html | 8 ++++---- introduction/basic_concepts.html | 8 ++++---- introduction/example_scenarios.html | 8 ++++---- lunr-index-1704463817322.json | 1 - lunr-index-1704473985784.json | 1 + lunr-index.json | 2 +- next.html | 8 ++++---- next/benchmarks.html | 8 ++++---- next/benchmarks/hls.html | 8 ++++---- next/benchmarks/webrtc.html | 8 ++++---- next/cluster.html | 8 ++++---- next/deploying/fly_io.html | 8 ++++---- next/deploying/vps.html | 8 ++++---- next/examples.html | 8 ++++---- next/for_developers/api_reference.html | 8 ++++---- next/for_developers/api_reference/rest_api.html | 8 ++++---- next/for_developers/design_docs.html | 8 ++++---- next/for_developers/metrics_design.html | 8 ++++---- next/getting_started/architecture.html | 8 ++++---- next/getting_started/authentication.html | 8 ++++---- next/getting_started/components/file.html | 8 ++++---- next/getting_started/components/hls.html | 10 +++++----- next/getting_started/components/rtsp.html | 8 ++++---- next/getting_started/installation.html | 8 ++++---- next/getting_started/metrics.html | 8 ++++---- next/getting_started/notifications.html | 8 ++++---- next/getting_started/peers/webrtc.html | 8 ++++---- next/getting_started/sdks.html | 8 ++++---- next/introduction/basic_concepts.html | 8 ++++---- next/introduction/example_scenarios.html | 8 ++++---- next/tutorials/dashboard.html | 8 ++++---- next/tutorials/react-native.html | 8 ++++---- next/tutorials/simple-react-app.html | 8 ++++---- search-doc-1704463817322.json | 1 - search-doc-1704473985784.json | 1 + search-doc.json | 2 +- tutorials/dashboard.html | 8 ++++---- tutorials/react-native.html | 8 ++++---- tutorials/simple-react-app.html | 8 ++++---- 83 files changed, 301 insertions(+), 301 deletions(-) rename assets/js/{533aebff.4829c178.js => 533aebff.d720e402.js} (84%) rename assets/js/{main.8ba72509.js => main.0955e310.js} (99%) rename assets/js/{main.8ba72509.js.LICENSE.txt => main.0955e310.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.5f8d18d1.js => runtime~main.8c35425d.js} (99%) delete mode 100644 lunr-index-1704463817322.json create mode 100644 lunr-index-1704473985784.json delete mode 100644 search-doc-1704463817322.json create mode 100644 search-doc-1704473985784.json diff --git a/0.2.0.html b/0.2.0.html index 7b8aa897..41e06426 100644 --- a/0.2.0.html +++ b/0.2.0.html @@ -4,8 +4,8 @@ What is Jellyfish? | Jellyfish - - + +
@@ -16,7 +16,7 @@ For example, one can stream video from its CCTV camera via RTSP to the server, convert it to WebRTC and send it to some web application. In general, there are no limitations. See Example Scenarios for more information.

Jellyfish comes with:

Supported protocols

Jellyfish supports following protocols:

- - + + \ No newline at end of file diff --git a/0.2.0/cluster.html b/0.2.0/cluster.html index dd16acc1..1824e516 100644 --- a/0.2.0/cluster.html +++ b/0.2.0/cluster.html @@ -4,8 +4,8 @@ Cluster | Jellyfish - - + +
@@ -46,7 +46,7 @@ for the actual port node B is accessible on.

Example

  1. Let's assume that node's B name is nodeb@192.168.1.2.
  2. Node A will contact EPMD using 192.168.1.2 IP address and port 4369, and ask for the port number used by a node with the name nodeb.
  3. After that, node A can contact node B using 192.168.1.2 IP address and port returned by EPMD.

A couple of notes about EPMD:

You can read more about Erlang Distribution here.

- - + + \ No newline at end of file diff --git a/0.2.0/deploying/fly_io.html b/0.2.0/deploying/fly_io.html index 1f0f8d0d..f0d89c79 100644 --- a/0.2.0/deploying/fly_io.html +++ b/0.2.0/deploying/fly_io.html @@ -4,8 +4,8 @@ Fly.io (experimental) | Jellyfish - - + +
@@ -26,7 +26,7 @@ Sometimes the UDP just works, others it takes ages for it to start flowing. This topic describes the exact issue we had with Fly.io.

In general, it is unclear when the UDP traffic starts to be forwarded, sometimes it happens relatively quickly after deployment, sometimes you need to wait for some time.

Also, the Fly.io documentation isn't clear in regard to opening UDP sockets. Some information was gathered experimentally, or based on Fly.io community questions, such as this one.

- - + + \ No newline at end of file diff --git a/0.2.0/deploying/vps.html b/0.2.0/deploying/vps.html index c4348fa7..20901a70 100644 --- a/0.2.0/deploying/vps.html +++ b/0.2.0/deploying/vps.html @@ -4,8 +4,8 @@ Cloud VPS with cloud-init | Jellyfish - - + +
@@ -43,7 +43,7 @@ You can find logs from the cloud-init run in /var/log/cloud-init-output.log file. done means that your jellyfish server is ready to be used.

If you'd like to keep an eye on the cloud-init process you can use:

cloud-init status --wait

To see the output when the process is finished (successfully or not).

Testing your instance with the Jellyfish dashboard

To see how (or if) your Jellyfish server is working you can test it by connecting our Jellyfish Dashboard with your server. Detailed instructions on how to use Jellyfish Dashboard can be found here.

- - + + \ No newline at end of file diff --git a/0.2.0/examples.html b/0.2.0/examples.html index 893f2efc..9e2dcb6a 100644 --- a/0.2.0/examples.html +++ b/0.2.0/examples.html @@ -4,13 +4,13 @@ Examples | Jellyfish - - + +
Skip to main content
Version: 0.2.0

Examples

Jellyfish usage examples utilising server SDKs can be found in the following locations:

- - + + \ No newline at end of file diff --git a/0.2.0/for_developers/api_reference.html b/0.2.0/for_developers/api_reference.html index 385a840b..3bbdea75 100644 --- a/0.2.0/for_developers/api_reference.html +++ b/0.2.0/for_developers/api_reference.html @@ -4,8 +4,8 @@ API Reference | Jellyfish - - + +
@@ -16,7 +16,7 @@ will be by adding protos to your git repository as a git submodule. You can do it with this command:

git submodule add https://github.com/jellyfish-dev/protos

You could also consider creating a script that will pull the newest changes from the git submodule and compile .proto files to your chosen programming language. For reference, see the script used in our Elixir SDK.

- - + + \ No newline at end of file diff --git a/0.2.0/for_developers/api_reference/rest_api.html b/0.2.0/for_developers/api_reference/rest_api.html index 32e212d5..57fe2bb3 100644 --- a/0.2.0/for_developers/api_reference/rest_api.html +++ b/0.2.0/for_developers/api_reference/rest_api.html @@ -4,8 +4,8 @@ Rest API | Jellyfish - - + +
@@ -99,7 +99,7 @@

Response samples

Content type
application/json
{
  • "errors": "Token has expired"
}
- - + + \ No newline at end of file diff --git a/0.2.0/for_developers/design_docs.html b/0.2.0/for_developers/design_docs.html index 8aadd7a4..ff90b410 100644 --- a/0.2.0/for_developers/design_docs.html +++ b/0.2.0/for_developers/design_docs.html @@ -4,15 +4,15 @@ Design Docs | Jellyfish - - + +
Skip to main content
Version: 0.2.0

Design Docs

Crucial parts of Jellyfish architecture are always discussed and written down in the form of design documents.

Each design document describes, in a nutshell, a few possible solutions or approaches to some problem and states which solution was accepted and why.

The list of Jellyfish Design Docs is available here.

- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/architecture.html b/0.2.0/getting_started/architecture.html index 5b4d2666..a7e51e33 100644 --- a/0.2.0/getting_started/architecture.html +++ b/0.2.0/getting_started/architecture.html @@ -4,8 +4,8 @@ Architecture | Jellyfish - - + +
@@ -23,7 +23,7 @@ BE replies with JF IP address it should connect to. Then, the User uses jellyfish-client-sdk to connect to JF. After the connection has been established, the User can send and receive media.

- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/authentication.html b/0.2.0/getting_started/authentication.html index 7836afb4..d093a90e 100644 --- a/0.2.0/getting_started/authentication.html +++ b/0.2.0/getting_started/authentication.html @@ -4,8 +4,8 @@ Authentication | Jellyfish - - + +
@@ -18,7 +18,7 @@ The token encodes both peer and room IDs. The token exchange is handled by our Client SDKs when connecting. Under the hood, Jellyfish expects the token in the first message after opening the Web Socket connection.

Token encodes peer id and room id.

  1. Run Jellyfish
JF_SERVER_API_TOKEN=JF_SERVER_API_TOKEN mix phx.server
  1. Create a room and add one peer
Business Logic
client = Jellyfish.Client.new("http://address-of-your-server.com", "JF_SERVER_API_TOKEN")
{:ok, room, _jellyfish_address} = Jellyfish.Room.create(client, max_peers: 10)
{:ok, peer, peer_token} = Jellyfish.Room.add_peer(client, room.id, "BobId")
  1. Connect as a peer to Jellyfish
Client
client.connect({ 
token: peerToken,
peerMetadata: { name: "Bob" },
isSimulcastOn: false
})
- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/components/hls.html b/0.2.0/getting_started/components/hls.html index 7fddc506..eb56a626 100644 --- a/0.2.0/getting_started/components/hls.html +++ b/0.2.0/getting_started/components/hls.html @@ -4,8 +4,8 @@ HLS | Jellyfish - - + +
@@ -15,7 +15,7 @@ under http://<jellyfish-address>/hls/<room_id>/index.m3u8 (or https://, if using TLS).

Example Docker commands

The HLS playlist will be created inside the Docker container. To access it from the host, you need to create a volume, e.g. by adding the option -v $(pwd)/jellyfish_output:/app/jellyfish_output to your Docker command.

Other than that, your Docker commands shouldn't be affected by adding this component.

docker run -p 8080:8080/tcp \
-e JF_SERVER_API_TOKEN=token \
-e JF_HOST=localhost:8080 \
-v $(pwd)/jellyfish_output:/app/jellyfish_output \
ghcr.io/jellyfish-dev/jellyfish:0.2.0
- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/components/rtsp.html b/0.2.0/getting_started/components/rtsp.html index 9823766b..35b3f271 100644 --- a/0.2.0/getting_started/components/rtsp.html +++ b/0.2.0/getting_started/components/rtsp.html @@ -4,8 +4,8 @@ RTSP | Jellyfish - - + +
@@ -21,7 +21,7 @@ RTSP stream source outside of their network when running Jellyfish using Docker.

If you're on macOS and want to receive RTSP streams from behind NAT, right now the only way is to build Jellyfish natively from source.

Explicit port exposure (macOS compatible)

docker run -p 20000:20000/udp \
-p 8080:8080/tcp \
-e JF_SERVER_API_TOKEN=token \
-e JF_HOST=localhost:8080 \
ghcr.io/jellyfish-dev/jellyfish:0.2.0
caution

Make sure that the exposed UDP port matches the one used by the RTSP component (option rtpPort, default: 20000).

If using multiple RTSP components, more ports will need to be exposed.

Using host network (Linux only)

docker run --network=host \
-e JF_SERVER_API_TOKEN=token \
-e JF_HOST=localhost:8080 \
ghcr.io/jellyfish-dev/jellyfish:0.2.0
- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/installation.html b/0.2.0/getting_started/installation.html index c31e8f4f..3b0fa81c 100644 --- a/0.2.0/getting_started/installation.html +++ b/0.2.0/getting_started/installation.html @@ -4,8 +4,8 @@ Installation | Jellyfish - - + +
@@ -78,7 +78,7 @@ also uses one more service called EPMD that runs on port 4369. This port has to be explicitly exported when running with Docker. Read more in the Cluster section.

- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/metrics.html b/0.2.0/getting_started/metrics.html index 840a5e87..9e4984fd 100644 --- a/0.2.0/getting_started/metrics.html +++ b/0.2.0/getting_started/metrics.html @@ -4,15 +4,15 @@ Metrics | Jellyfish - - + +
Skip to main content
Version: 0.2.0

Metrics

Jellyfish exports several metrics in the Prometheus format. By default, they are available on port 9568 at /metrics. See JF_METRICS_IP and JF_METRICS_PORT for configuration options.

NameLabelsDescription
jellyfish_traffic_ingress_total_bytesTotal traffic received
jellyfish_traffic_ingress_throughput_bytes_per_secondCurrent throughput for received traffic
jellyfish_traffic_egress_total_bytesTotal traffic sent
jellyfish_traffic_egress_throughput_bytes_per_secondCurrent throughput for sent traffic
jellyfish_roomsAmount of rooms currently present in Jellyfish
jellyfish_room_peersroom_idAmount of peers currently present in a given room
jellyfish_room_peer_time_total_secondsroom_idTotal peer time accumulated for a given room
vm_memory_total_bytesTotal memory used by Erlang Virtual Machine
vm_total_run_queue_lengths_totalNumber of Erlang processes waiting to be executed
vm_total_run_queue_lengths_cpuNumber of Erlang processes waiting to be executed on CPU schedulers
vm_total_run_queue_lengths_ioNumber of Erlang processes waiting to be executed on IO schedulers
- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/notifications.html b/0.2.0/getting_started/notifications.html index 6671b7f0..b9d182fc 100644 --- a/0.2.0/getting_started/notifications.html +++ b/0.2.0/getting_started/notifications.html @@ -4,14 +4,14 @@ Notifications | Jellyfish - - + +
Skip to main content
Version: 0.2.0

Notifications

Jellyfish sends server side notifications whenever some important event occurs, e.g.:

  • a room has been created
  • some peer has connected
  • component has crashed
  • etc.

A full list of available notifications is always present in specific server SDK documentation. Here, we present how you can subscribe for server side notifications using Elixir Server SDK:

server_address = "localhost:5002"
server_api_token = "development"

{:ok, notifier} =
Jellyfish.Notifier.start(server_address: server_address, server_api_token: server_api_token)

:ok = Jellyfish.Notifier.subscribe_server_notifications(notifier)
:ok = Jellyfish.Notifier.subscribe_metrics(notifier)

As a result, you should see the following logs on the server side

07:45:02.684 [info] New incoming server WebSocket connection, accepting
07:45:02.688 [info] Server WS authenticated.
- - + + \ No newline at end of file diff --git a/0.2.0/getting_started/peers/webrtc.html b/0.2.0/getting_started/peers/webrtc.html index 0bd15d5c..d53f5acc 100644 --- a/0.2.0/getting_started/peers/webrtc.html +++ b/0.2.0/getting_started/peers/webrtc.html @@ -4,8 +4,8 @@ WebRTC | Jellyfish - - + +
@@ -17,7 +17,7 @@ Useful when not using the --network=host option to limit the UDP ports used only to ones published from a Docker container.
  • JF_WEBRTC_TURN_TCP_PORT - port number of TCP TURN
  • Example Docker commands

    Explicit port exposure (macOS compatible)

    docker run -p 50000-50050:50000-50050/udp \
    -p 8080:8080/tcp \
    -e JF_SERVER_API_TOKEN=token \
    -e JF_HOST=localhost:8080 \
    -e JF_WEBRTC_USED=true \
    -e JF_WEBRTC_TURN_PORT_RANGE=50000-50050 \
    -e JF_WEBRTC_TURN_IP=192.168.0.1 \
    -e JF_WEBRTC_TURN_LISTEN_IP=0.0.0.0 \
    ghcr.io/jellyfish-dev/jellyfish:0.2.0
    caution

    Make sure that the exposed UDP ports match JF_WEBRTC_TURN_PORT_RANGE. The range of the ports shouldn't be too wide as it might cause problems with container startup.

    Using host network (Linux only)

    docker run --network=host \
    -e JF_SERVER_API_TOKEN=token \
    -e JF_HOST=localhost:8080 \
    -e JF_WEBRTC_USED=true \
    -e JF_WEBRTC_TURN_IP=192.168.0.1 \
    -e JF_WEBRTC_TURN_LISTEN_IP=0.0.0.0 \
    ghcr.io/jellyfish-dev/jellyfish:0.2.0
    - - + + \ No newline at end of file diff --git a/0.2.0/getting_started/sdks.html b/0.2.0/getting_started/sdks.html index 9af72850..d6c15d01 100644 --- a/0.2.0/getting_started/sdks.html +++ b/0.2.0/getting_started/sdks.html @@ -4,13 +4,13 @@ SDKs | Jellyfish - - + +
    Skip to main content
    - - + + \ No newline at end of file diff --git a/0.2.0/introduction/basic_concepts.html b/0.2.0/introduction/basic_concepts.html index 30839728..38a72c34 100644 --- a/0.2.0/introduction/basic_concepts.html +++ b/0.2.0/introduction/basic_concepts.html @@ -4,8 +4,8 @@ Basic Concepts | Jellyfish - - + +
    @@ -28,7 +28,7 @@ server. On the other hand, a peer is something that has to connect to the server. Therefore, peers are allowed to open so-called signaling channels to the server. See also Example Scenarios.

    - - + + \ No newline at end of file diff --git a/0.2.0/introduction/example_scenarios.html b/0.2.0/introduction/example_scenarios.html index bb8d1c54..315c9d3e 100644 --- a/0.2.0/introduction/example_scenarios.html +++ b/0.2.0/introduction/example_scenarios.html @@ -4,8 +4,8 @@ Example Scenarios | Jellyfish - - + +
    @@ -30,7 +30,7 @@ It's not the camera that initializes the connection to the server. Therefore, the RTSP component is a purely server-side thing - once you add it, it should be able to work on its own.

    Multiple IP cameras system architectureMultiple IP cameras system architecture
    - - + + \ No newline at end of file diff --git a/0.2.0/tutorials/dashboard.html b/0.2.0/tutorials/dashboard.html index f8c5af56..535cec57 100644 --- a/0.2.0/tutorials/dashboard.html +++ b/0.2.0/tutorials/dashboard.html @@ -4,8 +4,8 @@ Jellyfish Dashboard | Jellyfish - - + +
    @@ -44,7 +44,7 @@ You can observe the data with the dynamically generated charts showing what flows through the Jellyfish.

    Internals

    Summary

    Congrats on finishing the tutorial! You should now be able to use the dashboard to its full potential.

    But this was just the beginning. Jellyfish Client API is a powerful tool that allows you to create your own web or mobile multimedia application. Check out the other tutorials to learn more about the Jellyfish Client API and how to use it in your projects.

    You can also take a look at our fully featured Videoroom Demo example:

    Videoroom DemoVideoroom Demo

    It's written in React Native, but it uses the same Jellyfish Client API as the dashboard, so you can learn a lot from it.

    - - + + \ No newline at end of file diff --git a/0.2.0/tutorials/react-native.html b/0.2.0/tutorials/react-native.html index 75e62b8d..23273652 100644 --- a/0.2.0/tutorials/react-native.html +++ b/0.2.0/tutorials/react-native.html @@ -4,8 +4,8 @@ React Native | Jellyfish - - + +
    @@ -100,7 +100,7 @@ stats and more to come. Check out our other tutorials to learn about those features.

    You can also take a look at our fully featured Videoroom Demo example:

    Videoroom Demo

    - - + + \ No newline at end of file diff --git a/0.2.0/tutorials/simple-react-app.html b/0.2.0/tutorials/simple-react-app.html index 0c188d50..b8fd9629 100644 --- a/0.2.0/tutorials/simple-react-app.html +++ b/0.2.0/tutorials/simple-react-app.html @@ -4,8 +4,8 @@ Simple React App | Jellyfish - - + +
    @@ -62,7 +62,7 @@ stats and more to come. Check out our other tutorials to learn about those features.

    You can also take a look at our fully featured Videoroom Demo example:

    Videoroom DemoVideoroom Demo

    - - + + \ No newline at end of file diff --git a/404.html b/404.html index 64964d1c..d6f2f927 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Jellyfish - - + +
    Skip to main content

    Page Not Found

    We could not find what you were looking for.

    Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

    - - + + \ No newline at end of file diff --git a/assets/js/533aebff.4829c178.js b/assets/js/533aebff.d720e402.js similarity index 84% rename from assets/js/533aebff.4829c178.js rename to assets/js/533aebff.d720e402.js index 0fc4f835..6947d9dd 100644 --- a/assets/js/533aebff.4829c178.js +++ b/assets/js/533aebff.d720e402.js @@ -1 +1 @@ -"use strict";(self.webpackChunkjellyfish_docs=self.webpackChunkjellyfish_docs||[]).push([[7041],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=a,h=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return n?r.createElement(h,l(l({ref:t},c),{},{components:n})):r.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,l[1]=i;for(var u=2;u{n.d(t,{Z:()=>l});var r=n(7294),a=n(6010);const o={tabItem:"tabItem_Ymn6"};function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,l),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var r=n(7462),a=n(7294),o=n(6010),l=n(2466),i=n(6550),s=n(1980),u=n(7392),c=n(12);function p(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function d(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??p(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=d(e),[l,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[s,u]=h({queryString:n,groupId:r}),[p,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),b=(()=>{const e=s??p;return m({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{b&&i(b)}),[b]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),f(e)}),[u,f,o]),tabValues:o}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function v(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=c.indexOf(t),r=u[n].value;r!==i&&(p(t),s(r))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:m,onClick:d},l,{className:(0,o.Z)("tabs__item",g.tabItem,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function k(e){const t=f(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",g.tabList)},a.createElement(v,(0,r.Z)({},e,t)),a.createElement(y,(0,r.Z)({},e,t)))}function _(e){const t=(0,b.Z)();return a.createElement(k,(0,r.Z)({key:String(t)},e))}},8461:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var r=n(7462),a=(n(7294),n(3905)),o=n(4866),l=n(5162);const i={},s="HLS",u={unversionedId:"getting_started/components/hls",id:"getting_started/components/hls",title:"HLS",description:"Creates HLS playlist that is ready to be broadcasted via CDN.",source:"@site/docs/getting_started/components/hls.md",sourceDirName:"getting_started/components",slug:"/getting_started/components/hls",permalink:"/jellyfish-docs/next/getting_started/components/hls",draft:!1,editUrl:"https://github.com/jellyfish-dev/jellyfish-docs/docs/getting_started/components/hls.md",tags:[],version:"current",frontMatter:{},sidebar:"mainSidebar",previous:{title:"WebRTC",permalink:"/jellyfish-docs/next/getting_started/peers/webrtc"},next:{title:"RTSP",permalink:"/jellyfish-docs/next/getting_started/components/rtsp"}},c={},p=[{value:"Compatibility",id:"compatibility",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Configuration options",id:"configuration-options",level:2},{value:"Env variables",id:"env-variables",level:2},{value:"Output",id:"output",level:2},{value:"Example Docker commands",id:"example-docker-commands",level:2}],d={toc:p},m="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"hls"},"HLS"),(0,a.kt)("p",null,"Creates HLS playlist that is ready to be broadcasted via CDN.\nRead more about HLS ",(0,a.kt)("a",{parentName:"p",href:"https://developer.apple.com/streaming/"},"here"),"."),(0,a.kt)("h2",{id:"compatibility"},"Compatibility"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/jellyfish-docs/next/getting_started/peers/webrtc"},"WebRTC")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/jellyfish-docs/next/getting_started/components/rtsp"},"RTSP")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/jellyfish-docs/next/getting_started/components/file"},"File"))),(0,a.kt)("h2",{id:"requirements"},"Requirements"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"The ",(0,a.kt)("a",{parentName:"li",href:"../../introduction/basic_concepts#room"},"Room")," in which the HLS component is created must have the video codec set to H264.\nSee ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/room/operation/create_room"},"API")," for more information."),(0,a.kt)("li",{parentName:"ul"},"Max 1 HLS component allowed per room.")),(0,a.kt)("h2",{id:"configuration-options"},"Configuration options"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Optional")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"lowLatency")," (boolean, default: false) - whether the component should use LL-HLS"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"persistent")," (boolean, default: false) - whether the stream should be saved or not.\nAfter a meeting that integrates an HLS component (with the persistent option set to true) ends, the meeting is preserved as a recording.\nTo manage this recording, use the ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/recording"},"Recording API"),".\nThe recording is also available as ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/recording/operation/getRecordingContent"},"HLS Video On Demand (VOD) API"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"targetWindowDuration")," (positive integer, default: null) - represents the duration, in seconds, of the live streaming content to be\nmaintained in a rolling window. If set to null (default), the entire stream will be available."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"s3")," (object, default: null) - AWS S3 credentials. If credentials are set, the stream will be saved to the specified bucket.\nThis solution will automatically send your streams to an AWS bucket right after the end of your meeting.\nThe uploaded stream will be accessible in the ",(0,a.kt)("inlineCode",{parentName:"li"},"/")," folder within the S3 bucket.\nFor the exact credential structure see ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/room/operation/add_component"},"Configuration API"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"subscribeMode"),' (string "manual" or "auto", default: "auto") - whether HLS component should automatically start consuming available tracks.\nWhen set to ',(0,a.kt)("inlineCode",{parentName:"li"},"manual"),", HLS component has to be explicitly told to subscribe to a specific peer/component tracks using\nthe ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/hls/operation/subscribe_hls_to"},"Subscription API"),".")),(0,a.kt)(o.Z,{mdxType:"Tabs"},(0,a.kt)(l.Z,{value:"elixir",label:"Elixir",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-elixir"},'server_address = "localhost:5002"\nserver_api_token = "development"\n\nclient = Jellyfish.Client.new(server_address: server_address, server_api_token: server_api_token)\n\n{:ok, room, _jellyfish_address} = Jellyfish.Room.create(client, video_codec: :h264)\n{:ok, peer, _peer_token} = Jellyfish.Room.add_peer(client, room.id, Jellyfish.Peer.WebRTC)\n\nhls_options = %Jellyfish.Component.HLS{subscribe_mode: :manual}\n{:ok, _component} = Jellyfish.Room.add_component(client, room.id, hls_options)\n\n:ok = Jellyfish.Room.hls_subscribe(client, room.id, [peer.id])\n'))),(0,a.kt)(l.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"TODO\n")))),(0,a.kt)("h2",{id:"env-variables"},"Env variables"),(0,a.kt)("p",null,"Currently, there are no environment variables related to this component."),(0,a.kt)("h2",{id:"output"},"Output"),(0,a.kt)("p",null,"After adding a WebRTC peer (and at least one track) or an RTSP component, the HLS stream will be available\nunder ",(0,a.kt)("inlineCode",{parentName:"p"},"http:///hls//index.m3u8")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"https://"),", if using TLS)."),(0,a.kt)("h2",{id:"example-docker-commands"},"Example Docker commands"),(0,a.kt)("p",null,"The HLS playlist will be created inside the Docker container. To access it from the host,\nyou need to create a volume, e.g. by adding the option ",(0,a.kt)("inlineCode",{parentName:"p"},"-v $(pwd)/jellyfish_output:/app/jellyfish_output"),"\nto your Docker command."),(0,a.kt)("p",null,"Other than that, your Docker commands shouldn't be affected by adding this component."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -p 8080:8080/tcp \\\n -e JF_SERVER_API_TOKEN=token \\\n -e JF_HOST=localhost:8080 \\\n -v $(pwd)/jellyfish_output:/app/jellyfish_output \\\n ghcr.io/jellyfish-dev/jellyfish:0.2.0\n")))}h.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkjellyfish_docs=self.webpackChunkjellyfish_docs||[]).push([[7041],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=a,h=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return n?r.createElement(h,l(l({ref:t},c),{},{components:n})):r.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,l[1]=i;for(var u=2;u{n.d(t,{Z:()=>l});var r=n(7294),a=n(6010);const o={tabItem:"tabItem_Ymn6"};function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,l),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var r=n(7462),a=n(7294),o=n(6010),l=n(2466),i=n(6550),s=n(1980),u=n(7392),c=n(12);function p(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function d(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??p(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=d(e),[l,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[s,u]=h({queryString:n,groupId:r}),[p,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),b=(()=>{const e=s??p;return m({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{b&&i(b)}),[b]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),f(e)}),[u,f,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=c.indexOf(t),r=u[n].value;r!==i&&(p(t),s(r))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:m,onClick:d},l,{className:(0,o.Z)("tabs__item",v.tabItem,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function k(e){const t=f(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",v.tabList)},a.createElement(g,(0,r.Z)({},e,t)),a.createElement(y,(0,r.Z)({},e,t)))}function _(e){const t=(0,b.Z)();return a.createElement(k,(0,r.Z)({key:String(t)},e))}},8461:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var r=n(7462),a=(n(7294),n(3905)),o=n(4866),l=n(5162);const i={},s="HLS",u={unversionedId:"getting_started/components/hls",id:"getting_started/components/hls",title:"HLS",description:"Creates HLS playlist that is ready to be broadcasted via CDN.",source:"@site/docs/getting_started/components/hls.md",sourceDirName:"getting_started/components",slug:"/getting_started/components/hls",permalink:"/jellyfish-docs/next/getting_started/components/hls",draft:!1,editUrl:"https://github.com/jellyfish-dev/jellyfish-docs/docs/getting_started/components/hls.md",tags:[],version:"current",frontMatter:{},sidebar:"mainSidebar",previous:{title:"WebRTC",permalink:"/jellyfish-docs/next/getting_started/peers/webrtc"},next:{title:"RTSP",permalink:"/jellyfish-docs/next/getting_started/components/rtsp"}},c={},p=[{value:"Compatibility",id:"compatibility",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Configuration options",id:"configuration-options",level:2},{value:"Env variables",id:"env-variables",level:2},{value:"Output",id:"output",level:2},{value:"Example Docker commands",id:"example-docker-commands",level:2}],d={toc:p},m="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"hls"},"HLS"),(0,a.kt)("p",null,"Creates HLS playlist that is ready to be broadcasted via CDN.\nRead more about HLS ",(0,a.kt)("a",{parentName:"p",href:"https://developer.apple.com/streaming/"},"here"),"."),(0,a.kt)("h2",{id:"compatibility"},"Compatibility"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/jellyfish-docs/next/getting_started/peers/webrtc"},"WebRTC")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/jellyfish-docs/next/getting_started/components/rtsp"},"RTSP")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/jellyfish-docs/next/getting_started/components/file"},"File"))),(0,a.kt)("h2",{id:"requirements"},"Requirements"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"The ",(0,a.kt)("a",{parentName:"li",href:"../../introduction/basic_concepts#room"},"Room")," in which the HLS component is created must have the video codec set to H264.\nSee ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/room/operation/create_room"},"API")," for more information."),(0,a.kt)("li",{parentName:"ul"},"Max 1 HLS component allowed per room.")),(0,a.kt)("h2",{id:"configuration-options"},"Configuration options"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Optional")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"lowLatency")," (boolean, default: false) - whether the component should use LL-HLS"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"persistent")," (boolean, default: false) - whether the stream should be saved or not.\nAfter a meeting that integrates an HLS component (with the persistent option set to true) ends, the meeting is preserved as a recording.\nTo manage this recording, use the ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/recording"},"Recording API"),".\nThe recording is also available as ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/recording/operation/getRecordingContent"},"HLS Video On Demand (VOD) API"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"targetWindowDuration")," (positive integer, default: null) - represents the duration, in seconds, of the live streaming content to be\nmaintained in a rolling window. If set to null (default), the entire stream will be available."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"s3")," (object, default: null) - AWS S3 credentials. If credentials are set, the stream will be saved to the specified bucket.\nThis solution will automatically send your streams to an AWS bucket right after the end of your meeting.\nThe uploaded stream will be accessible in the ",(0,a.kt)("inlineCode",{parentName:"li"},"/")," folder within the S3 bucket.\nFor the exact credential structure see ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/room/operation/add_component"},"Configuration API"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"subscribeMode"),' (string "manual" or "auto", default: "auto") - whether HLS component should automatically start consuming available tracks.\nWhen set to ',(0,a.kt)("inlineCode",{parentName:"li"},"manual"),", HLS component has to be explicitly told to subscribe to a specific peer/component tracks using\nthe ",(0,a.kt)("a",{parentName:"li",href:"../../for_developers/api_reference/rest_api#tag/hls/operation/subscribe_hls_to"},"Subscription API"),".")),(0,a.kt)(o.Z,{mdxType:"Tabs"},(0,a.kt)(l.Z,{value:"elixir",label:"Elixir",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-elixir"},'server_address = "localhost:5002"\nserver_api_token = "development"\n\nclient = Jellyfish.Client.new(server_address: server_address, server_api_token: server_api_token)\n\n{:ok, room, _jellyfish_address} = Jellyfish.Room.create(client, video_codec: :h264)\n{:ok, peer, _peer_token} = Jellyfish.Room.add_peer(client, room.id, Jellyfish.Peer.WebRTC)\n\nhls_options = %Jellyfish.Component.HLS{subscribe_mode: :manual}\n{:ok, _component} = Jellyfish.Room.add_component(client, room.id, hls_options)\n\n:ok = Jellyfish.Room.hls_subscribe(client, room.id, [peer.id])\n'))),(0,a.kt)(l.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"from jellyfish import RoomApi, ComponentOptionsHLS, PeerOptionsWebRTC\n\nserver_address = \"localhost:5002\"\nserver_api_token = \"development\"\n\nroom_api = RoomApi(server_address='localhost:5002', server_api_token='development')\n\njellyfish_address, room = room_api.create_room(video_codec='h264')\npeer_token, peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC())\n\nhls_options = ComponentOptionsHLS(subscribe_mode=\"manual\")\ncomponent_hls = room_api.add_component(room.id, options=hls_options)\n\nroom_api.hls_subscribe(room.id, [peer.id])\n")))),(0,a.kt)("h2",{id:"env-variables"},"Env variables"),(0,a.kt)("p",null,"Currently, there are no environment variables related to this component."),(0,a.kt)("h2",{id:"output"},"Output"),(0,a.kt)("p",null,"After adding a WebRTC peer (and at least one track) or an RTSP component, the HLS stream will be available\nunder ",(0,a.kt)("inlineCode",{parentName:"p"},"http:///hls//index.m3u8")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"https://"),", if using TLS)."),(0,a.kt)("h2",{id:"example-docker-commands"},"Example Docker commands"),(0,a.kt)("p",null,"The HLS playlist will be created inside the Docker container. To access it from the host,\nyou need to create a volume, e.g. by adding the option ",(0,a.kt)("inlineCode",{parentName:"p"},"-v $(pwd)/jellyfish_output:/app/jellyfish_output"),"\nto your Docker command."),(0,a.kt)("p",null,"Other than that, your Docker commands shouldn't be affected by adding this component."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -p 8080:8080/tcp \\\n -e JF_SERVER_API_TOKEN=token \\\n -e JF_HOST=localhost:8080 \\\n -v $(pwd)/jellyfish_output:/app/jellyfish_output \\\n ghcr.io/jellyfish-dev/jellyfish:0.2.0\n")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.8ba72509.js b/assets/js/main.0955e310.js similarity index 99% rename from assets/js/main.8ba72509.js rename to assets/js/main.0955e310.js index 2fac43d4..cb3c7015 100644 --- a/assets/js/main.8ba72509.js +++ b/assets/js/main.0955e310.js @@ -1,2 +1,2 @@ -/*! For license information please see main.8ba72509.js.LICENSE.txt */ -(self.webpackChunkjellyfish_docs=self.webpackChunkjellyfish_docs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),s=n(6887);const l={"06d81fef":[()=>n.e(1269).then(n.bind(n,9773)),"@site/docs/introduction/what_is_jellyfish.md",9773],"07e658c8":[()=>n.e(6731).then(n.bind(n,498)),"@site/docs/benchmarks/webrtc.md",498],"09d5ad39":[()=>n.e(3030).then(n.bind(n,4381)),"@site/docs/examples.md",4381],"0ca6cd30":[()=>Promise.all([n.e(532),n.e(8794)]).then(n.bind(n,6529)),"@site/docs/tutorials/dashboard.mdx",6529],"10febcc7":[()=>n.e(9677).then(n.bind(n,8490)),"@site/versioned_docs/version-0.2.1/introduction/example_scenarios.md",8490],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,4700)),"@theme/DocItem",4700],"19f3155a":[()=>n.e(36).then(n.bind(n,3887)),"@site/versioned_docs/version-0.2.0/getting_started/metrics.md",3887],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1f702618":[()=>n.e(3925).then(n.bind(n,627)),"@site/docs/getting_started/metrics.md",627],"2112e5bd":[()=>n.e(5898).then(n.t.bind(n,9677,19)),"~docs/default/version-0-2-1-metadata-prop-000.json",9677],"21ed7c22":[()=>n.e(521).then(n.bind(n,7170)),"@site/versioned_docs/version-0.2.1/for_developers/design_docs.md",7170],"27edd659":[()=>Promise.all([n.e(532),n.e(6009)]).then(n.bind(n,8201)),"@site/versioned_docs/version-0.2.1/getting_started/authentication.md",8201],"31ce0643":[()=>n.e(544).then(n.bind(n,4007)),"@site/docs/getting_started/sdks.md",4007],"33da16d7":[()=>n.e(9655).then(n.t.bind(n,8400,19)),"/home/runner/work/jellyfish-docs/jellyfish-docs/.docusaurus/docusaurus-plugin-redoc/jellyfish-rest-api/redocApiSpecV1.2-jellyfish-rest-api.json",8400],"36708fee":[()=>Promise.all([n.e(532),n.e(8327)]).then(n.bind(n,932)),"@site/versioned_docs/version-0.2.1/getting_started/installation.md",932],"3a057c9d":[()=>n.e(6140).then(n.bind(n,2911)),"@site/versioned_docs/version-0.2.1/deploying/vps.md",2911],"3b1f92db":[()=>n.e(6273).then(n.bind(n,8915)),"@site/docs/benchmarks/hls.md",8915],"3d2de946":[()=>n.e(7449).then(n.bind(n,6027)),"@site/docs/for_developers/metrics_design.md",6027],"3e7c6e07":[()=>n.e(253).then(n.bind(n,1060)),"@site/versioned_docs/version-0.2.0/getting_started/components/hls.md",1060],"4093c5c2":[()=>n.e(3904).then(n.bind(n,2349)),"@site/docs/for_developers/design_docs.md",2349],"40c9b465":[()=>n.e(2453).then(n.bind(n,3729)),"@site/versioned_docs/version-0.2.0/introduction/basic_concepts.md",3729],"43c242c4":[()=>n.e(9189).then(n.bind(n,8620)),"@site/versioned_docs/version-0.2.1/getting_started/sdks.md",8620],"44196e98":[()=>n.e(3065).then(n.bind(n,9109)),"@site/versioned_docs/version-0.2.0/getting_started/components/rtsp.md",9109],"47a70367":[()=>n.e(1770).then(n.bind(n,2358)),"@site/versioned_docs/version-0.2.0/getting_started/architecture.md",2358],"4a332b92":[()=>n.e(2517).then(n.bind(n,2588)),"@site/docs/getting_started/architecture.md",2588],"4c8c074b":[()=>Promise.all([n.e(532),n.e(9209)]).then(n.bind(n,3970)),"@site/versioned_docs/version-0.2.1/tutorials/react-native.mdx",3970],"4cf40d90":[()=>n.e(6974).then(n.bind(n,2624)),"@site/docs/getting_started/components/file.md",2624],"50e2f264":[()=>Promise.all([n.e(532),n.e(3616)]).then(n.bind(n,629)),"@site/versioned_docs/version-0.2.0/tutorials/react-native.mdx",629],"533aebff":[()=>Promise.all([n.e(532),n.e(7041)]).then(n.bind(n,8461)),"@site/docs/getting_started/components/hls.md",8461],"533ff15f":[()=>n.e(4696).then(n.bind(n,4283)),"@site/versioned_docs/version-0.2.0/examples.md",4283],"5a21b1fb":[()=>n.e(1404).then(n.bind(n,16)),"@site/versioned_docs/version-0.2.1/getting_started/notifications.md",16],"5d43be05":[()=>n.e(3821).then(n.bind(n,2305)),"@site/docs/introduction/basic_concepts.md",2305],"5d85105e":[()=>Promise.all([n.e(532),n.e(1336),n.e(771),n.e(3334)]).then(n.bind(n,2742)),"@site/docs/for_developers/api_reference/rest_api.md",2742],"5daaa58f":[()=>n.e(3205).then(n.bind(n,7120)),"@site/versioned_docs/version-0.2.1/getting_started/architecture.md",7120],"5df3dca6":[()=>Promise.all([n.e(532),n.e(5933)]).then(n.bind(n,4958)),"@site/versioned_docs/version-0.2.0/tutorials/simple-react-app.mdx",4958],"600cd2d3":[()=>n.e(2707).then(n.t.bind(n,3769,19)),"/home/runner/work/jellyfish-docs/jellyfish-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"67235a9c":[()=>n.e(6219).then(n.bind(n,7077)),"@site/versioned_docs/version-0.2.0/getting_started/peers/webrtc.md",7077],"69ed952a":[()=>Promise.all([n.e(532),n.e(3356)]).then(n.bind(n,7144)),"@site/docs/tutorials/react-native.mdx",7144],"6ff82401":[()=>n.e(6709).then(n.bind(n,6704)),"@site/versioned_docs/version-0.2.0/deploying/vps.md",6704],"734ad6e0":[()=>n.e(4885).then(n.bind(n,3341)),"@site/versioned_docs/version-0.2.0/introduction/what_is_jellyfish.md",3341],"73522d53":[()=>n.e(1380).then(n.bind(n,8688)),"@site/versioned_docs/version-0.2.1/introduction/what_is_jellyfish.md",8688],"73d55eec":[()=>n.e(3582).then(n.bind(n,8913)),"@site/versioned_docs/version-0.2.1/getting_started/peers/webrtc.md",8913],"75da9f0f":[()=>n.e(3364).then(n.bind(n,7332)),"@site/versioned_docs/version-0.2.1/getting_started/metrics.md",7332],78362208:[()=>Promise.all([n.e(532),n.e(1336),n.e(771),n.e(684)]).then(n.bind(n,3574)),"@site/versioned_docs/version-0.2.0/for_developers/api_reference/rest_api.md",3574],"78c80559":[()=>n.e(730).then(n.bind(n,8502)),"@site/docs/getting_started/components/rtsp.md",8502],"799b1c68":[()=>n.e(5657).then(n.t.bind(n,7790,19)),"~docs/default/version-0-2-0-metadata-prop-0a3.json",7790],"7dab705f":[()=>Promise.all([n.e(532),n.e(6411)]).then(n.bind(n,9952)),"@site/docs/getting_started/authentication.md",9952],"7ec5f8e5":[()=>n.e(3719).then(n.bind(n,3885)),"@site/versioned_docs/version-0.2.0/introduction/example_scenarios.md",3885],"861638b8":[()=>n.e(3070).then(n.bind(n,2482)),"@site/versioned_docs/version-0.2.1/deploying/fly_io.md",2482],"91eea63c":[()=>Promise.all([n.e(532),n.e(6342)]).then(n.bind(n,1330)),"@site/versioned_docs/version-0.2.0/getting_started/installation.md",1330],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94d315a1":[()=>n.e(870).then(n.bind(n,5474)),"@site/versioned_docs/version-0.2.1/getting_started/components/hls.md",5474],"95d85754":[()=>n.e(7951).then(n.bind(n,1915)),"@site/versioned_docs/version-0.2.1/getting_started/components/rtsp.md",1915],a0df2eb1:[()=>n.e(471).then(n.bind(n,1103)),"@site/versioned_docs/version-0.2.0/cluster.md",1103],a1054fe7:[()=>n.e(1466).then(n.bind(n,2450)),"@site/docs/getting_started/peers/webrtc.md",2450],a2748788:[()=>Promise.all([n.e(532),n.e(1336),n.e(771),n.e(4949)]).then(n.bind(n,9474)),"@site/versioned_docs/version-0.2.1/for_developers/api_reference/rest_api.md",9474],a79b6c05:[()=>Promise.all([n.e(532),n.e(1512)]).then(n.bind(n,7263)),"@site/versioned_docs/version-0.2.0/getting_started/authentication.md",7263],a86a22c7:[()=>n.e(6916).then(n.bind(n,916)),"@site/versioned_docs/version-0.2.0/getting_started/notifications.md",916],ae302c60:[()=>n.e(4302).then(n.bind(n,6818)),"@site/docs/for_developers/api_reference.md",6818],b3305401:[()=>n.e(6680).then(n.bind(n,5013)),"@site/versioned_docs/version-0.2.1/introduction/basic_concepts.md",5013],b50b123e:[()=>Promise.all([n.e(532),n.e(5970)]).then(n.bind(n,9059)),"@site/docs/tutorials/simple-react-app.mdx",9059],b5d665f7:[()=>n.e(1383).then(n.bind(n,9002)),"@site/versioned_docs/version-0.2.1/examples.md",9002],bd4d3e77:[()=>n.e(1048).then(n.bind(n,1038)),"@site/docs/deploying/fly_io.md",1038],caf39a59:[()=>n.e(6982).then(n.bind(n,8035)),"@site/docs/benchmarks.md",8035],ced7d92f:[()=>Promise.all([n.e(532),n.e(4604)]).then(n.bind(n,8291)),"@site/versioned_docs/version-0.2.0/tutorials/dashboard.mdx",8291],cf5003b1:[()=>Promise.all([n.e(532),n.e(9313)]).then(n.bind(n,9595)),"@site/docs/getting_started/notifications.md",9595],d3ed548f:[()=>n.e(2616).then(n.bind(n,4038)),"@site/versioned_docs/version-0.2.0/for_developers/design_docs.md",4038],d44fcec2:[()=>n.e(2337).then(n.bind(n,9614)),"@site/versioned_docs/version-0.2.0/for_developers/api_reference.md",9614],dd033c5b:[()=>n.e(2440).then(n.bind(n,6789)),"@site/versioned_docs/version-0.2.1/cluster.md",6789],ddb258f2:[()=>n.e(2997).then(n.bind(n,8494)),"@site/docs/deploying/vps.md",8494],de993eb4:[()=>n.e(3625).then(n.bind(n,8001)),"@site/docs/introduction/example_scenarios.md",8001],e364a627:[()=>Promise.all([n.e(532),n.e(4246)]).then(n.bind(n,594)),"@site/versioned_docs/version-0.2.1/tutorials/simple-react-app.mdx",594],e84b993c:[()=>n.e(5481).then(n.bind(n,731)),"@site/versioned_docs/version-0.2.1/for_developers/api_reference.md",731],ec96f064:[()=>n.e(9522).then(n.bind(n,2672)),"@site/versioned_docs/version-0.2.0/deploying/fly_io.md",2672],f0ad3fbb:[()=>Promise.all([n.e(532),n.e(1336),n.e(771),n.e(8612)]).then(n.bind(n,8254)),"@theme/ApiDoc",8254],f20ac086:[()=>Promise.all([n.e(532),n.e(2549)]).then(n.bind(n,7428)),"@site/versioned_docs/version-0.2.1/tutorials/dashboard.mdx",7428],f2711dff:[()=>Promise.all([n.e(532),n.e(5521)]).then(n.bind(n,332)),"@site/docs/getting_started/installation.md",332],f7ffbcd5:[()=>n.e(4506).then(n.bind(n,9837)),"@site/versioned_docs/version-0.2.0/getting_started/sdks.md",9837],f9b08eaa:[()=>n.e(5655).then(n.bind(n,3751)),"@site/docs/cluster.md",3751],fa5b4139:[()=>n.e(3527).then(n.t.bind(n,7889,19)),"/home/runner/work/jellyfish-docs/jellyfish-docs/.docusaurus/docusaurus-plugin-redoc/jellyfish-rest-api/redocApiLayoutV1-jellyfish-rest-api.json",7889],fdcc75fd:[()=>n.e(9251).then(n.t.bind(n,966,19)),"/home/runner/work/jellyfish-docs/jellyfish-docs/.docusaurus/docusaurus-plugin-redoc/jellyfish-rest-api/plugin-route-context-module-100.json",966]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function p(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=s[`${e}-${t}`],p={},f=[],m=[],h=(0,u.Z)(o);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=l[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{o=o[e]})),o[s[s.length-1]]=a}));const s=i.__comp;delete i.__comp;const l=i.__context;return delete i.__context,r.createElement(d.z,{value:l},r.createElement(s,(0,a.Z)({},i,n)))}})}const f=[{path:"/jellyfish-docs/examples/using-single-yaml",component:p("/jellyfish-docs/examples/using-single-yaml","021"),exact:!0},{path:"/jellyfish-docs/0.2.0",component:p("/jellyfish-docs/0.2.0","2a5"),routes:[{path:"/jellyfish-docs/0.2.0",component:p("/jellyfish-docs/0.2.0","b44"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/cluster",component:p("/jellyfish-docs/0.2.0/cluster","a9d"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/deploying/fly_io",component:p("/jellyfish-docs/0.2.0/deploying/fly_io","e1b"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/deploying/vps",component:p("/jellyfish-docs/0.2.0/deploying/vps","c67"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/examples",component:p("/jellyfish-docs/0.2.0/examples","579"),exact:!0},{path:"/jellyfish-docs/0.2.0/for_developers/api_reference",component:p("/jellyfish-docs/0.2.0/for_developers/api_reference","0ae"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/for_developers/api_reference/rest_api",component:p("/jellyfish-docs/0.2.0/for_developers/api_reference/rest_api","a5d"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/for_developers/design_docs",component:p("/jellyfish-docs/0.2.0/for_developers/design_docs","cac"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/architecture",component:p("/jellyfish-docs/0.2.0/getting_started/architecture","f08"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/authentication",component:p("/jellyfish-docs/0.2.0/getting_started/authentication","cf1"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/components/hls",component:p("/jellyfish-docs/0.2.0/getting_started/components/hls","2d5"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/components/rtsp",component:p("/jellyfish-docs/0.2.0/getting_started/components/rtsp","6b5"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/installation",component:p("/jellyfish-docs/0.2.0/getting_started/installation","a22"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/metrics",component:p("/jellyfish-docs/0.2.0/getting_started/metrics","54a"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/notifications",component:p("/jellyfish-docs/0.2.0/getting_started/notifications","e69"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/peers/webrtc",component:p("/jellyfish-docs/0.2.0/getting_started/peers/webrtc","86a"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/getting_started/sdks",component:p("/jellyfish-docs/0.2.0/getting_started/sdks","9c9"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/introduction/basic_concepts",component:p("/jellyfish-docs/0.2.0/introduction/basic_concepts","e73"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/introduction/example_scenarios",component:p("/jellyfish-docs/0.2.0/introduction/example_scenarios","faa"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/tutorials/dashboard",component:p("/jellyfish-docs/0.2.0/tutorials/dashboard","431"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/tutorials/react-native",component:p("/jellyfish-docs/0.2.0/tutorials/react-native","0f2"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/0.2.0/tutorials/simple-react-app",component:p("/jellyfish-docs/0.2.0/tutorials/simple-react-app","3ff"),exact:!0,sidebar:"mainSidebar"}]},{path:"/jellyfish-docs/next",component:p("/jellyfish-docs/next","26c"),routes:[{path:"/jellyfish-docs/next",component:p("/jellyfish-docs/next","149"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/benchmarks",component:p("/jellyfish-docs/next/benchmarks","15e"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/benchmarks/hls",component:p("/jellyfish-docs/next/benchmarks/hls","fdb"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/benchmarks/webrtc",component:p("/jellyfish-docs/next/benchmarks/webrtc","6ca"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/cluster",component:p("/jellyfish-docs/next/cluster","096"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/deploying/fly_io",component:p("/jellyfish-docs/next/deploying/fly_io","e1f"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/deploying/vps",component:p("/jellyfish-docs/next/deploying/vps","2b0"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/examples",component:p("/jellyfish-docs/next/examples","200"),exact:!0},{path:"/jellyfish-docs/next/for_developers/api_reference",component:p("/jellyfish-docs/next/for_developers/api_reference","a57"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/for_developers/api_reference/rest_api",component:p("/jellyfish-docs/next/for_developers/api_reference/rest_api","6bc"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/for_developers/design_docs",component:p("/jellyfish-docs/next/for_developers/design_docs","871"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/for_developers/metrics_design",component:p("/jellyfish-docs/next/for_developers/metrics_design","af1"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/architecture",component:p("/jellyfish-docs/next/getting_started/architecture","113"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/authentication",component:p("/jellyfish-docs/next/getting_started/authentication","a5e"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/components/file",component:p("/jellyfish-docs/next/getting_started/components/file","4b8"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/components/hls",component:p("/jellyfish-docs/next/getting_started/components/hls","4e2"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/components/rtsp",component:p("/jellyfish-docs/next/getting_started/components/rtsp","a7f"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/installation",component:p("/jellyfish-docs/next/getting_started/installation","40d"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/metrics",component:p("/jellyfish-docs/next/getting_started/metrics","608"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/notifications",component:p("/jellyfish-docs/next/getting_started/notifications","d82"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/peers/webrtc",component:p("/jellyfish-docs/next/getting_started/peers/webrtc","60a"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/getting_started/sdks",component:p("/jellyfish-docs/next/getting_started/sdks","160"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/introduction/basic_concepts",component:p("/jellyfish-docs/next/introduction/basic_concepts","f09"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/introduction/example_scenarios",component:p("/jellyfish-docs/next/introduction/example_scenarios","16b"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/tutorials/dashboard",component:p("/jellyfish-docs/next/tutorials/dashboard","b5f"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/tutorials/react-native",component:p("/jellyfish-docs/next/tutorials/react-native","949"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/next/tutorials/simple-react-app",component:p("/jellyfish-docs/next/tutorials/simple-react-app","2c8"),exact:!0,sidebar:"mainSidebar"}]},{path:"/jellyfish-docs/",component:p("/jellyfish-docs/","82b"),routes:[{path:"/jellyfish-docs/",component:p("/jellyfish-docs/","254"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/cluster",component:p("/jellyfish-docs/cluster","a0d"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/deploying/fly_io",component:p("/jellyfish-docs/deploying/fly_io","cf8"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/deploying/vps",component:p("/jellyfish-docs/deploying/vps","fd6"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/examples",component:p("/jellyfish-docs/examples","c0f"),exact:!0},{path:"/jellyfish-docs/for_developers/api_reference",component:p("/jellyfish-docs/for_developers/api_reference","454"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/for_developers/api_reference/rest_api",component:p("/jellyfish-docs/for_developers/api_reference/rest_api","bc6"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/for_developers/design_docs",component:p("/jellyfish-docs/for_developers/design_docs","d91"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/architecture",component:p("/jellyfish-docs/getting_started/architecture","123"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/authentication",component:p("/jellyfish-docs/getting_started/authentication","e2f"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/components/hls",component:p("/jellyfish-docs/getting_started/components/hls","b88"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/components/rtsp",component:p("/jellyfish-docs/getting_started/components/rtsp","36a"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/installation",component:p("/jellyfish-docs/getting_started/installation","460"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/metrics",component:p("/jellyfish-docs/getting_started/metrics","3cf"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/notifications",component:p("/jellyfish-docs/getting_started/notifications","581"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/peers/webrtc",component:p("/jellyfish-docs/getting_started/peers/webrtc","76c"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/getting_started/sdks",component:p("/jellyfish-docs/getting_started/sdks","617"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/introduction/basic_concepts",component:p("/jellyfish-docs/introduction/basic_concepts","bc6"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/introduction/example_scenarios",component:p("/jellyfish-docs/introduction/example_scenarios","a53"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/tutorials/dashboard",component:p("/jellyfish-docs/tutorials/dashboard","d5e"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/tutorials/react-native",component:p("/jellyfish-docs/tutorials/react-native","a91"),exact:!0,sidebar:"mainSidebar"},{path:"/jellyfish-docs/tutorials/simple-react-app",component:p("/jellyfish-docs/tutorials/simple-react-app","fd0"),exact:!0,sidebar:"mainSidebar"}]},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),s=n(412);const l=[n(2497),n(3310),n(8320),n(2295),n(1304),n(4750)];var c=n(723),u=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(5742),h=n(2263),g=n(4996),b=n(6668),y=n(1944),v=n(4711),w=n(9727),_=n(3320),E=n(8780),k=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),a=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(y.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(k.Z,{tag:_.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const T=new Map;function P(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var j=n(8934),A=n(8940);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),L("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class N extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.default.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(R,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const I=N,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function $(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
    \n

    Your Docusaurus site did not load properly.

    \n

    A very common reason is a wrong site baseUrl configuration.

    \n

    Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

    \n

    We suggest trying baseUrl =

    \n
    \n`}(e)).replace(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!s.default.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,$(e))),r.createElement("div",{id:D}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(U,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:s,direction:l}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:s,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(4763),W=n(2389);function q(){const e=(0,W.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function V(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(Z.Z,null,r.createElement(A.M,null,r.createElement(j.t,null,r.createElement(p,null,r.createElement(H,null),r.createElement(C,null),r.createElement(z,null),r.createElement(I,{location:P(t)},e)),r.createElement(q,null))))}var G=n(6887);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(9670);const X=new Set,Q=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!Q.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Q.has(e))(e)&&(Q.add(e),O(e))},te=Object.freeze(ee);if(s.default.canUseDOM){window.docusaurus=te;const e=a.hydrate;O(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(V,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-redoc":{"jellyfish-rest-api":{"url":"https://raw.githubusercontent.com/jellyfish-dev/jellyfish/main/openapi.yaml","themeId":"theme-redoc","isSpecFile":false,"spec":{"components":{"responses":{},"schemas":{"PeerStatus":{"description":"Informs about the peer status","enum":["connected","disconnected"],"example":"disconnected","title":"PeerStatus","type":"string","x-struct":"Elixir.JellyfishWeb.ApiSpec.Peer.Status"},"RoomDetailsResponse":{"description":"Response containing room details","properties":{"data":{"$ref":"#/components/schemas/Room"}},"required":["data"],"title":"RoomDetailsResponse","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.RoomDetailsResponse"},"ComponentOptionsRTSP":{"description":"Options specific to the RTSP component","properties":{"keepAliveInterval":{"default":15000,"description":"Interval (in ms) in which keep-alive RTSP messages will be sent to the remote stream source","minimum":0,"type":"integer"},"pierceNat":{"default":true,"description":"Whether to attempt to create client-side NAT binding by sending an empty datagram from client to source, after the completion of RTSP setup","type":"boolean"},"reconnectDelay":{"default":15000,"description":"Delay (in ms) between successive reconnect attempts","minimum":0,"type":"integer"},"rtpPort":{"default":20000,"description":"Local port RTP stream will be received at","maximum":65535,"minimum":1,"type":"integer"},"sourceUri":{"description":"URI of RTSP source stream","example":"rtsp://localhost:554/stream","type":"string"}},"required":["sourceUri"],"title":"ComponentOptionsRTSP","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.RTSP.Options"},"ComponentPropertiesHLS":{"description":"Properties specific to the HLS component","properties":{"lowLatency":{"description":"Whether the component uses LL-HLS","type":"boolean"},"persistent":{"description":"Whether the video is stored after end of stream","type":"boolean"},"playable":{"description":"Whether the generated HLS playlist is playable","type":"boolean"},"subscribeMode":{"description":"Whether the HLS component should subscribe to tracks automatically or manually","enum":["auto","manual"],"type":"string"},"targetWindowDuration":{"description":"Duration of stream available for viewer","nullable":true,"type":"integer"}},"required":["playable","lowLatency","persistent","targetWindowDuration","subscribeMode"],"title":"ComponentPropertiesHLS","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.HLS.Properties"},"Room":{"description":"Description of the room state","properties":{"components":{"description":"List of all components","items":{"$ref":"#/components/schemas/Component"},"type":"array"},"config":{"$ref":"#/components/schemas/RoomConfig"},"id":{"description":"Room ID","example":"room-1","type":"string"},"peers":{"description":"List of all peers","items":{"$ref":"#/components/schemas/Peer"},"type":"array"}},"required":["id","config","components","peers"],"title":"Room","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Room"},"Component":{"description":"Describes component","discriminator":{"mapping":{"file":"#/components/schemas/ComponentFile","hls":"#/components/schemas/ComponentHLS","rtsp":"#/components/schemas/ComponentRTSP"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/ComponentHLS"},{"$ref":"#/components/schemas/ComponentRTSP"},{"$ref":"#/components/schemas/ComponentFile"}],"title":"Component","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component"},"PeerOptionsWebRTC":{"description":"Options specific to the WebRTC peer","properties":{"enableSimulcast":{"default":true,"description":"Enables the peer to use simulcast","type":"boolean"}},"title":"PeerOptionsWebRTC","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Peer.WebRTC"},"ComponentHLS":{"description":"Describes the HLS component","properties":{"id":{"description":"Assigned component ID","example":"component-1","type":"string"},"properties":{"$ref":"#/components/schemas/ComponentPropertiesHLS"},"type":{"description":"Component type","example":"hls","type":"string"}},"required":["id","type","properties"],"title":"ComponentHLS","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.HLS"},"HlsSkip":{"description":"Set to \\"YES\\" if delta manifest should be requested","example":"YES","nullable":true,"title":"HlsSkip","type":"string","x-struct":"Elixir.JellyfishWeb.ApiSpec.HLS.Params.HlsSkip"},"ComponentPropertiesFile":{"description":"Properties specific to the File component","properties":{"filePath":{"description":"Relative path to track file. Must be either OPUS encapsulated in Ogg or raw h264","type":"string"}},"required":["filePath"],"title":"ComponentPropertiesFile","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.File.Properties"},"ComponentFile":{"description":"Describes the File component","properties":{"id":{"description":"Assigned component ID","example":"component-1","type":"string"},"properties":{"$ref":"#/components/schemas/ComponentPropertiesFile"},"type":{"description":"Component type","example":"file","type":"string"}},"required":["id","type"],"title":"ComponentFile","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.File"},"SubscriptionConfig":{"description":"Subscription config","properties":{"origins":{"description":"List of peers and components ids whose tracks the HLS endpoint will subscribe to","items":{"type":"string"},"type":"array"}},"title":"SubscriptionConfig","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Subscription.Origins"},"HlsMsn":{"description":"Segment sequence number","example":10,"minimum":0,"nullable":true,"title":"HlsMsn","type":"integer","x-struct":"Elixir.JellyfishWeb.ApiSpec.HLS.Params.HlsMsn"},"ComponentRTSP":{"description":"Describes the RTSP component","properties":{"id":{"description":"Assigned component ID","example":"component-1","type":"string"},"properties":{"$ref":"#/components/schemas/ComponentPropertiesRTSP"},"type":{"description":"Component type","example":"hls","type":"string"}},"required":["id","type","properties"],"title":"ComponentRTSP","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.RTSP"},"HlsPart":{"description":"Partial segment sequence number","example":10,"minimum":0,"nullable":true,"title":"HlsPart","type":"integer","x-struct":"Elixir.JellyfishWeb.ApiSpec.HLS.Params.HlsPart"},"ComponentDetailsResponse":{"description":"Response containing component details","properties":{"data":{"$ref":"#/components/schemas/Component"}},"required":["data"],"title":"ComponentDetailsResponse","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.ComponentDetailsResponse"},"ComponentOptionsHLS":{"description":"Options specific to the HLS component","properties":{"lowLatency":{"default":false,"description":"Whether the component should use LL-HLS","type":"boolean"},"persistent":{"default":false,"description":"Whether the video is stored after end of stream","type":"boolean"},"s3":{"description":"Credentials to AWS S3 bucket.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/S3Credentials"}],"type":"object"},"subscribeMode":{"default":"auto","description":"Whether the HLS component should subscribe to tracks automatically or manually.","enum":["auto","manual"],"type":"string"},"targetWindowDuration":{"description":"Duration of stream available for viewer","nullable":true,"type":"integer"}},"title":"ComponentOptionsHLS","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.HLS.Options"},"S3Credentials":{"description":"An AWS S3 credential that will be used to send HLS stream. The stream will only be uploaded if credentials are provided","properties":{"accessKeyId":{"description":"An AWS access key identifier, linked to your AWS account.","type":"string"},"bucket":{"description":"The name of the S3 bucket where your data will be stored.","type":"string"},"region":{"description":"The AWS region where your bucket is located.","type":"string"},"secretAccessKey":{"description":"The secret key that is linked to the Access Key ID.","type":"string"}},"required":["accessKeyId","secretAccessKey","region","bucket"],"title":"S3Credentials","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.HLS.S3"},"RecordingListResponse":{"description":"Response containing list of all recording","properties":{"data":{"items":{"type":"string"},"type":"array"}},"required":["data"],"title":"RecordingListResponse","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.RecordingListResponse"},"ComponentOptions":{"description":"Component-specific options","oneOf":[{"$ref":"#/components/schemas/ComponentOptionsHLS"},{"$ref":"#/components/schemas/ComponentOptionsRTSP"},{"$ref":"#/components/schemas/ComponentOptionsFile"}],"title":"ComponentOptions","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.Options"},"ComponentPropertiesRTSP":{"description":"Properties specific to the RTSP component","properties":{"keepAliveInterval":{"description":"Interval (in ms) in which keep-alive RTSP messages will be sent to the remote stream source","type":"integer"},"pierceNat":{"description":"Whether to attempt to create client-side NAT binding by sending an empty datagram from client to source, after the completion of RTSP setup","type":"boolean"},"reconnectDelay":{"description":"Delay (in ms) between successive reconnect attempts","type":"integer"},"rtpPort":{"description":"Local port RTP stream will be received at","type":"integer"},"sourceUri":{"description":"URI of RTSP source stream","type":"string"}},"required":["sourceUri","rtpPort","reconnectDelay","keepAliveInterval","pierceNat"],"title":"ComponentPropertiesRTSP","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.RTSP.Properties"},"PeerOptions":{"description":"Peer-specific options","oneOf":[{"$ref":"#/components/schemas/PeerOptionsWebRTC"}],"title":"PeerOptions","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Peer.Options"},"Peer":{"description":"Describes peer status","properties":{"id":{"description":"Assigned peer id","example":"peer-1","type":"string"},"status":{"$ref":"#/components/schemas/PeerStatus"},"type":{"$ref":"#/components/schemas/PeerType"}},"required":["id","type","status"],"title":"Peer","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Peer"},"ComponentType":{"description":"Component type","example":"hls","title":"ComponentType","type":"string","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.Type"},"AuthToken":{"description":"Token for authorizing websocket connection","example":"5cdac726-57a3-4ecb-b1d5-72a3d62ec242","title":"AuthToken","type":"string","x-struct":"Elixir.JellyfishWeb.ApiSpec.Peer.Token"},"RoomsListingResponse":{"description":"Response containing list of all rooms","properties":{"data":{"items":{"$ref":"#/components/schemas/Room"},"type":"array"}},"required":["data"],"title":"RoomsListingResponse","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.RoomsListingResponse"},"PeerDetailsResponse":{"description":"Response containing peer details and their token","properties":{"data":{"properties":{"peer":{"$ref":"#/components/schemas/Peer"},"token":{"$ref":"#/components/schemas/AuthToken"}},"required":["peer","token"],"type":"object"}},"required":["data"],"title":"PeerDetailsResponse","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.PeerDetailsResponse"},"HlsResponse":{"description":"Requested file","title":"HlsResponse","type":"string","x-struct":"Elixir.JellyfishWeb.ApiSpec.HLS.Response"},"PeerType":{"description":"Peer type","example":"webrtc","title":"PeerType","type":"string","x-struct":"Elixir.JellyfishWeb.ApiSpec.Peer.Type"},"RoomCreateDetailsResponse":{"description":"Response containing room details","properties":{"data":{"properties":{"jellyfish_address":{"description":"Jellyfish instance address where the room was created. This might be different than the address of Jellyfish where the request was sent only when running a cluster of Jellyfishes.","example":"jellyfish1:5003","type":"string"},"room":{"$ref":"#/components/schemas/Room"}},"required":["room","jellyfish_address"],"type":"object"}},"required":["data"],"title":"RoomCreateDetailsResponse","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.RoomCreateDetailsResponse"},"ComponentOptionsFile":{"description":"Options specific to the File component","properties":{"filePath":{"description":"Path to track file. Must be either OPUS encapsulated in Ogg or raw h264","example":"/root/video.h264","type":"string"}},"required":["filePath"],"title":"ComponentOptionsFile","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Component.File.Options"},"Error":{"description":"Error message","properties":{"errors":{"description":"Error details","example":"Token has expired","type":"string"}},"required":["errors"],"title":"Error","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Error"},"RoomConfig":{"description":"Room configuration","properties":{"maxPeers":{"description":"Maximum amount of peers allowed into the room","example":10,"minimum":1,"nullable":true,"type":"integer"},"roomId":{"description":"Custom id used for identifying room within Jellyfish. Must be unique across all rooms. If not provided, random UUID is generated.","nullable":true,"type":"string"},"videoCodec":{"description":"Enforces video codec for each peer in the room","enum":["h264","vp8"],"nullable":true,"type":"string"},"webhookUrl":{"description":"URL where Jellyfish notifications will be sent","example":"https://backend.address.com/jellyfish-notifications-endpoint","nullable":true,"type":"string"}},"title":"RoomConfig","type":"object","x-struct":"Elixir.JellyfishWeb.ApiSpec.Room.Config"}},"securitySchemes":{"authorization":{"scheme":"bearer","type":"http"}}},"info":{"license":{"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0"},"title":"Jellyfish Media Server","version":"0.2.0"},"openapi":"3.0.0","paths":{"/hls/{room_id}/subscribe":{"post":{"callbacks":{},"operationId":"subscribe_hls_to","parameters":[{"description":"Room ID","in":"path","name":"room_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionConfig"}}},"description":"Subscribe configuration","required":false},"responses":{"201":{"description":"Tracks succesfully added."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request structure"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Room doesn\'t exist"}},"summary":"Subscribe the HLS component to the tracks of peers or components","tags":["hls"]}},"/hls/{room_id}/{filename}":{"get":{"callbacks":{},"operationId":"getHlsContent","parameters":[{"description":"Room id","in":"path","name":"room_id","required":true,"schema":{"type":"string"}},{"description":"Name of the file","in":"path","name":"filename","required":true,"schema":{"type":"string"}},{"description":"Byte range of partial segment","in":"header","name":"range","required":false,"schema":{"type":"string"}},{"description":"Segment sequence number","in":"query","name":"_HLS_msn","required":false,"schema":{"$ref":"#/components/schemas/HlsMsn"}},{"description":"Partial segment sequence number","in":"query","name":"_HLS_part","required":false,"schema":{"$ref":"#/components/schemas/HlsPart"}},{"description":"Is delta manifest requested","in":"query","name":"_HLS_skip","required":false,"schema":{"$ref":"#/components/schemas/HlsSkip"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HlsResponse"}}},"description":"File was found"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid filename"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"File not found"}},"summary":"Retrieve HLS Content","tags":["hls"]}},"/recording":{"get":{"callbacks":{},"operationId":"get_recordings","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordingListResponse"}}},"description":"Success"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unable to obtain recordings"}},"summary":"Lists all available recordings","tags":["recording"]}},"/recording/{recording_id}":{"delete":{"callbacks":{},"operationId":"delete_recording","parameters":[{"description":"Recording id","in":"path","name":"recording_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted recording"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid recording"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Recording doesn\'t exist"}},"summary":"Deletes the recording","tags":["recording"]}},"/recording/{recording_id}/{filename}":{"get":{"callbacks":{},"operationId":"getRecordingContent","parameters":[{"description":"Recording id","in":"path","name":"recording_id","required":true,"schema":{"type":"string"}},{"description":"Name of the file","in":"path","name":"filename","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HlsResponse"}}},"description":"File was found"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"File not found"}},"summary":"Retrieve Recording (HLS) Content","tags":["recording"]}},"/room":{"get":{"callbacks":{},"operationId":"get_all_rooms","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomsListingResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"}},"summary":"Show information about all rooms","tags":["room"]},"post":{"callbacks":{},"operationId":"create_room","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomConfig"}}},"description":"Room configuration","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomCreateDetailsResponse"}}},"description":"Room successfully created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request structure"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"}},"summary":"Creates a room","tags":["room"]}},"/room/{room_id}":{"delete":{"callbacks":{},"operationId":"delete_room","parameters":[{"description":"Room id","in":"path","name":"room_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted room"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Room doesn\'t exist"}},"summary":"Delete the room","tags":["room"]},"get":{"callbacks":{},"operationId":"get_room","parameters":[{"description":"Room ID","in":"path","name":"room_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomDetailsResponse"}}},"description":"Success"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Room doesn\'t exist"}},"summary":"Shows information about the room","tags":["room"]}},"/room/{room_id}/component":{"post":{"callbacks":{},"operationId":"add_component","parameters":[{"description":"Room ID","in":"path","name":"room_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"options":{"$ref":"#/components/schemas/ComponentOptions"},"type":{"$ref":"#/components/schemas/ComponentType"}},"required":["type"],"type":"object"}}},"description":"Component config","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentDetailsResponse"}}},"description":"Successfully added component"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Room doesn\'t exist"}},"summary":"Creates the component and adds it to the room","tags":["room"]}},"/room/{room_id}/component/{id}":{"delete":{"callbacks":{},"operationId":"delete_component","parameters":[{"description":"Room ID","in":"path","name":"room_id","required":true,"schema":{"type":"string"}},{"description":"Component ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Either component or the room doesn\'t exist"}},"summary":"Delete the component from the room","tags":["room"]}},"/room/{room_id}/peer":{"post":{"callbacks":{},"operationId":"add_peer","parameters":[{"description":"Room id","in":"path","name":"room_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"options":{"$ref":"#/components/schemas/PeerOptions"},"type":{"$ref":"#/components/schemas/PeerType"}},"required":["type","options"],"type":"object"}}},"description":"Peer specification","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeerDetailsResponse"}}},"description":"Peer successfully created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request body structure"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Room doesn\'t exist"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Peer limit has been reached"}},"summary":"Create peer","tags":["room"]}},"/room/{room_id}/peer/{id}":{"delete":{"callbacks":{},"operationId":"delete_peer","parameters":[{"description":"Room ID","in":"path","name":"room_id","required":true,"schema":{"type":"string"}},{"description":"Peer id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Peer successfully deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Room ID or Peer ID references a resource that doesn\'t exist"}},"summary":"Delete peer","tags":["room"]}}},"security":[{"authorization":[]}],"servers":[],"tags":[]}}},"docusaurus-theme-redoc":{"theme-redoc":{"lightTheme":{"typography":{"fontFamily":"var(--ifm-font-family-base)","fontSize":"var(--ifm-font-size-base)","lineHeight":"var(--ifm-line-height-base)","fontWeightLight":"var(--ifm-font-weight-light)","fontWeightRegular":"var(--ifm-font-weight-base)","fontWeightBold":"var(--ifm-font-weight-bold)","headings":{"fontFamily":"var(--ifm-heading-font-family)","fontWeight":"var(--ifm-heading-font-weight)","lineHeight":"var(--ifm-heading-line-height)"},"code":{"fontFamily":"var(--ifm-font-family-monospace)","lineHeight":"var(--ifm-pre-line-height)"}},"sidebar":{"width":"300px","backgroundColor":"#ffffff"},"rightPanel":{"backgroundColor":"#303846"},"colors":{"primary":{"main":"#3F57A6"}},"theme":{"prism":{"additionalLanguages":["scala"]}}},"darkTheme":{"typography":{"fontFamily":"var(--ifm-font-family-base)","fontSize":"var(--ifm-font-size-base)","lineHeight":"var(--ifm-line-height-base)","fontWeightLight":"var(--ifm-font-weight-light)","fontWeightRegular":"var(--ifm-font-weight-base)","fontWeightBold":"var(--ifm-font-weight-bold)","headings":{"fontFamily":"var(--ifm-heading-font-family)","fontWeight":"var(--ifm-heading-font-weight)","lineHeight":"var(--ifm-heading-line-height)"},"code":{"fontFamily":"var(--ifm-font-family-monospace)","lineHeight":"var(--ifm-pre-line-height)"}},"sidebar":{"width":"300px","backgroundColor":"rgb(24, 25, 26)","textColor":"#f5f6f7","arrow":{"color":"#f5f6f7"}},"colors":{"text":{"primary":"#f5f6f7","secondary":"rgba(255, 255, 255, 1)"},"gray":{"50":"#FAFAFA","100":"#F5F5F5"},"border":{"dark":"#ffffff","light":"rgba(0,0,0, 0.1)"},"primary":{"main":"#3F57A6"}},"schema":{"nestedBackground":"rgb(24, 25, 26)","typeNameColor":"rgba(255, 255, 255, 1)","typeTitleColor":"rgba(255, 255, 255, 1)"},"theme":{"prism":{"additionalLanguages":["scala"]}}},"options":{"scrollYOffset":"nav.navbar","expandSingleSchemaField":true,"menuToggle":true,"suppressWarnings":true}}},"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1704463817322.json","lunrIndex":"lunr-index-1704463817322.json"}}},"docusaurus-plugin-content-docs":{"default":{"path":"/jellyfish-docs/","versions":[{"name":"current","label":"Next","isLast":false,"path":"/jellyfish-docs/next","mainDocId":"introduction/what_is_jellyfish","docs":[{"id":"benchmarks","path":"/jellyfish-docs/next/benchmarks","sidebar":"mainSidebar"},{"id":"benchmarks/hls","path":"/jellyfish-docs/next/benchmarks/hls","sidebar":"mainSidebar"},{"id":"benchmarks/webrtc","path":"/jellyfish-docs/next/benchmarks/webrtc","sidebar":"mainSidebar"},{"id":"cluster","path":"/jellyfish-docs/next/cluster","sidebar":"mainSidebar"},{"id":"deploying/fly_io","path":"/jellyfish-docs/next/deploying/fly_io","sidebar":"mainSidebar"},{"id":"deploying/vps","path":"/jellyfish-docs/next/deploying/vps","sidebar":"mainSidebar"},{"id":"examples","path":"/jellyfish-docs/next/examples"},{"id":"for_developers/api_reference","path":"/jellyfish-docs/next/for_developers/api_reference","sidebar":"mainSidebar"},{"id":"for_developers/api_reference/rest_api","path":"/jellyfish-docs/next/for_developers/api_reference/rest_api","sidebar":"mainSidebar"},{"id":"for_developers/design_docs","path":"/jellyfish-docs/next/for_developers/design_docs","sidebar":"mainSidebar"},{"id":"for_developers/metrics_design","path":"/jellyfish-docs/next/for_developers/metrics_design","sidebar":"mainSidebar"},{"id":"getting_started/architecture","path":"/jellyfish-docs/next/getting_started/architecture","sidebar":"mainSidebar"},{"id":"getting_started/authentication","path":"/jellyfish-docs/next/getting_started/authentication","sidebar":"mainSidebar"},{"id":"getting_started/components/file","path":"/jellyfish-docs/next/getting_started/components/file","sidebar":"mainSidebar"},{"id":"getting_started/components/hls","path":"/jellyfish-docs/next/getting_started/components/hls","sidebar":"mainSidebar"},{"id":"getting_started/components/rtsp","path":"/jellyfish-docs/next/getting_started/components/rtsp","sidebar":"mainSidebar"},{"id":"getting_started/installation","path":"/jellyfish-docs/next/getting_started/installation","sidebar":"mainSidebar"},{"id":"getting_started/metrics","path":"/jellyfish-docs/next/getting_started/metrics","sidebar":"mainSidebar"},{"id":"getting_started/notifications","path":"/jellyfish-docs/next/getting_started/notifications","sidebar":"mainSidebar"},{"id":"getting_started/peers/webrtc","path":"/jellyfish-docs/next/getting_started/peers/webrtc","sidebar":"mainSidebar"},{"id":"getting_started/sdks","path":"/jellyfish-docs/next/getting_started/sdks","sidebar":"mainSidebar"},{"id":"introduction/basic_concepts","path":"/jellyfish-docs/next/introduction/basic_concepts","sidebar":"mainSidebar"},{"id":"introduction/example_scenarios","path":"/jellyfish-docs/next/introduction/example_scenarios","sidebar":"mainSidebar"},{"id":"introduction/what_is_jellyfish","path":"/jellyfish-docs/next/","sidebar":"mainSidebar"},{"id":"tutorials/dashboard","path":"/jellyfish-docs/next/tutorials/dashboard","sidebar":"mainSidebar"},{"id":"tutorials/react-native","path":"/jellyfish-docs/next/tutorials/react-native","sidebar":"mainSidebar"},{"id":"tutorials/simple-react-app","path":"/jellyfish-docs/next/tutorials/simple-react-app","sidebar":"mainSidebar"}],"draftIds":[],"sidebars":{"mainSidebar":{"link":{"path":"/jellyfish-docs/next/","label":"introduction/what_is_jellyfish"}}}},{"name":"0.2.1","label":"0.2.1","isLast":true,"path":"/jellyfish-docs/","mainDocId":"introduction/what_is_jellyfish","docs":[{"id":"cluster","path":"/jellyfish-docs/cluster","sidebar":"mainSidebar"},{"id":"deploying/fly_io","path":"/jellyfish-docs/deploying/fly_io","sidebar":"mainSidebar"},{"id":"deploying/vps","path":"/jellyfish-docs/deploying/vps","sidebar":"mainSidebar"},{"id":"examples","path":"/jellyfish-docs/examples"},{"id":"for_developers/api_reference","path":"/jellyfish-docs/for_developers/api_reference","sidebar":"mainSidebar"},{"id":"for_developers/api_reference/rest_api","path":"/jellyfish-docs/for_developers/api_reference/rest_api","sidebar":"mainSidebar"},{"id":"for_developers/design_docs","path":"/jellyfish-docs/for_developers/design_docs","sidebar":"mainSidebar"},{"id":"getting_started/architecture","path":"/jellyfish-docs/getting_started/architecture","sidebar":"mainSidebar"},{"id":"getting_started/authentication","path":"/jellyfish-docs/getting_started/authentication","sidebar":"mainSidebar"},{"id":"getting_started/components/hls","path":"/jellyfish-docs/getting_started/components/hls","sidebar":"mainSidebar"},{"id":"getting_started/components/rtsp","path":"/jellyfish-docs/getting_started/components/rtsp","sidebar":"mainSidebar"},{"id":"getting_started/installation","path":"/jellyfish-docs/getting_started/installation","sidebar":"mainSidebar"},{"id":"getting_started/metrics","path":"/jellyfish-docs/getting_started/metrics","sidebar":"mainSidebar"},{"id":"getting_started/notifications","path":"/jellyfish-docs/getting_started/notifications","sidebar":"mainSidebar"},{"id":"getting_started/peers/webrtc","path":"/jellyfish-docs/getting_started/peers/webrtc","sidebar":"mainSidebar"},{"id":"getting_started/sdks","path":"/jellyfish-docs/getting_started/sdks","sidebar":"mainSidebar"},{"id":"introduction/basic_concepts","path":"/jellyfish-docs/introduction/basic_concepts","sidebar":"mainSidebar"},{"id":"introduction/example_scenarios","path":"/jellyfish-docs/introduction/example_scenarios","sidebar":"mainSidebar"},{"id":"introduction/what_is_jellyfish","path":"/jellyfish-docs/","sidebar":"mainSidebar"},{"id":"tutorials/dashboard","path":"/jellyfish-docs/tutorials/dashboard","sidebar":"mainSidebar"},{"id":"tutorials/react-native","path":"/jellyfish-docs/tutorials/react-native","sidebar":"mainSidebar"},{"id":"tutorials/simple-react-app","path":"/jellyfish-docs/tutorials/simple-react-app","sidebar":"mainSidebar"}],"draftIds":[],"sidebars":{"mainSidebar":{"link":{"path":"/jellyfish-docs/","label":"introduction/what_is_jellyfish"}}}},{"name":"0.2.0","label":"0.2.0","isLast":false,"path":"/jellyfish-docs/0.2.0","mainDocId":"introduction/what_is_jellyfish","docs":[{"id":"cluster","path":"/jellyfish-docs/0.2.0/cluster","sidebar":"mainSidebar"},{"id":"deploying/fly_io","path":"/jellyfish-docs/0.2.0/deploying/fly_io","sidebar":"mainSidebar"},{"id":"deploying/vps","path":"/jellyfish-docs/0.2.0/deploying/vps","sidebar":"mainSidebar"},{"id":"examples","path":"/jellyfish-docs/0.2.0/examples"},{"id":"for_developers/api_reference","path":"/jellyfish-docs/0.2.0/for_developers/api_reference","sidebar":"mainSidebar"},{"id":"for_developers/api_reference/rest_api","path":"/jellyfish-docs/0.2.0/for_developers/api_reference/rest_api","sidebar":"mainSidebar"},{"id":"for_developers/design_docs","path":"/jellyfish-docs/0.2.0/for_developers/design_docs","sidebar":"mainSidebar"},{"id":"getting_started/architecture","path":"/jellyfish-docs/0.2.0/getting_started/architecture","sidebar":"mainSidebar"},{"id":"getting_started/authentication","path":"/jellyfish-docs/0.2.0/getting_started/authentication","sidebar":"mainSidebar"},{"id":"getting_started/components/hls","path":"/jellyfish-docs/0.2.0/getting_started/components/hls","sidebar":"mainSidebar"},{"id":"getting_started/components/rtsp","path":"/jellyfish-docs/0.2.0/getting_started/components/rtsp","sidebar":"mainSidebar"},{"id":"getting_started/installation","path":"/jellyfish-docs/0.2.0/getting_started/installation","sidebar":"mainSidebar"},{"id":"getting_started/metrics","path":"/jellyfish-docs/0.2.0/getting_started/metrics","sidebar":"mainSidebar"},{"id":"getting_started/notifications","path":"/jellyfish-docs/0.2.0/getting_started/notifications","sidebar":"mainSidebar"},{"id":"getting_started/peers/webrtc","path":"/jellyfish-docs/0.2.0/getting_started/peers/webrtc","sidebar":"mainSidebar"},{"id":"getting_started/sdks","path":"/jellyfish-docs/0.2.0/getting_started/sdks","sidebar":"mainSidebar"},{"id":"introduction/basic_concepts","path":"/jellyfish-docs/0.2.0/introduction/basic_concepts","sidebar":"mainSidebar"},{"id":"introduction/example_scenarios","path":"/jellyfish-docs/0.2.0/introduction/example_scenarios","sidebar":"mainSidebar"},{"id":"introduction/what_is_jellyfish","path":"/jellyfish-docs/0.2.0/","sidebar":"mainSidebar"},{"id":"tutorials/dashboard","path":"/jellyfish-docs/0.2.0/tutorials/dashboard","sidebar":"mainSidebar"},{"id":"tutorials/react-native","path":"/jellyfish-docs/0.2.0/tutorials/react-native","sidebar":"mainSidebar"},{"id":"tutorials/simple-react-app","path":"/jellyfish-docs/0.2.0/tutorials/simple-react-app","sidebar":"mainSidebar"}],"draftIds":[],"sidebars":{"mainSidebar":{"link":{"path":"/jellyfish-docs/0.2.0/","label":"introduction/what_is_jellyfish"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-plugin-redoc":{"type":"package","name":"docusaurus-plugin-redoc","version":"1.6.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-theme-redoc":{"type":"package","name":"docusaurus-theme-redoc","version":"1.6.3"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"2.3.2"}}}'),c={siteConfig:a.Z,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(412),o=n(5742),i=n(8780),s=n(5096);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(s.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.default.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),s=n(2263),l=n(3919),c=n(412);const u=a.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:_}=(0,d.C)(),E=(0,a.useContext)(u),k=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>k.current));const S=p||f;const x=(0,l.Z)(S),C=S?.replace("pathname://","");let T=void 0!==C?(P=C,b&&(e=>e.startsWith("/"))(P)?_(P):P):void 0;var P;T&&x&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const j=(0,a.useRef)(!1),A=n?o.OL:o.rU,L=c.default.canUseIntersectionObserver,R=(0,a.useRef)(),O=()=>{j.current||null==T||(window.docusaurus.preload(T),j.current=!0)};(0,a.useEffect)((()=>(!L&&x&&null!=T&&window.docusaurus.prefetch(T),()=>{L&&R.current&&R.current.disconnect()})),[R,T,L,x]);const N=T?.startsWith("#")??!1,I=!T||!x||N;return I||g||E.collectLink(T),I?a.createElement("a",(0,r.Z)({ref:k,href:T},S&&!x&&{target:"_blank",rel:"noopener noreferrer"},y)):a.createElement(A,(0,r.Z)({},y,{onMouseEnter:O,onTouchStart:O,innerRef:e=>{k.current=e,L&&e&&x&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),R.current.observe(e))},to:T},n&&{isActive:h,activeClassName:m}))}const f=a.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function l(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const s=i({message:t,id:n});return r.createElement(r.Fragment,null,a(s,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},8084:(e,t,n)=>{"use strict";n.d(t,{OD:()=>o,eZ:()=>i});var r=n(2263),a=n(9935);function o(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=o(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},4104:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>f,gA:()=>u,_r:()=>l,Jo:()=>m,zh:()=>c,yW:()=>p,gB:()=>d});var r=n(6550),a=n(8084);const o=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=function(e,t){const n=o(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const s={},l=()=>(0,a.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,a.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function u(e){void 0===e&&(e={});const t=l(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function d(e){return c(e).versions}function p(e){const t=c(e);return o(t)}function f(e){const t=c(e),{pathname:n}=(0,r.TH)();return i(t,n)}function m(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=o(e);return{latestDocSuggestion:i(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.Z,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(821)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},5096:(e,t,n)=>{"use strict";n.d(t,{Z:()=>mt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),s=n(7462),l=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:a}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:`#${d}`,onClick:a}),t))}var g=n(5281),b=n(9727);const y={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:y.skipToContent})}var w=n(6668),_=n(9689);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...l}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function S(e){return r.createElement("button",(0,s.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,s.Z)({},e,{className:(0,a.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function P(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,_.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(S,{onClick:n,className:T.announcementBarClose}))}var j=n(3163),A=n(2466);var L=n(902),R=n(3102);const O=r.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,j.e)(),t=(0,R.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(O.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(O);if(!e)throw new L.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,R.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var F=n(2949),B=n(2389);function $(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const z={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const s=(0,B.Z)(),l=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(z.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",z.toggleButton,!s&&z.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!s,title:l,"aria-label":l,"aria-live":"polite"},r.createElement($,{className:(0,a.Z)(z.toggleIcon,z.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)(z.toggleIcon,z.darkToggleIcon)})))}const Z=r.memo(H),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function q(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,F.I)();return a?null:r.createElement(Z,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var V=n(1327);function G(){return r.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,j.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(G,null),r.createElement(q,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:l,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const p=(0,Q.Z)(a),f=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,J.Z)(o),g=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,c&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,s.Z)({href:u?m:o},d,g)):r.createElement(X.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,s.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,s.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,s.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),se=n(8596),le=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,s.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(Te,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,s.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),f()}}),c.children??c.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(Te,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const a=t?de:ue;return r.createElement(a,n)}var fe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(4184),be=n.n(ge),ye=n(8084);const ve=e=>{const t=(0,r.useRef)(!1),a=(0,r.useRef)(null),[o,i]=(0,r.useState)(!1),s=(0,l.k6)(),{siteConfig:c={}}=(0,le.Z)(),u=(0,B.Z)(),{baseUrl:d}=c,p=(0,ye.eZ)("docusaurus-lunr-search"),f=()=>{t.current||(Promise.all([fetch(`${d}${p.fileNames.searchDoc}`).then((e=>e.json())),fetch(`${d}${p.fileNames.lunrIndex}`).then((e=>e.json())),Promise.all([n.e(1336),n.e(23),n.e(3339)]).then(n.bind(n,894)),Promise.all([n.e(532),n.e(3343)]).then(n.bind(n,3343))]).then((e=>{let[t,n,{default:r}]=e;0!==t.length&&(((e,t,n)=>{new n({searchDocs:e,searchIndex:t,baseUrl:d,inputSelector:"#search_input_react",handleSelected:(e,t,n)=>{const r=n.url||"/";document.createElement("a").href=r,s.push(r)}})})(t,n,r),i(!0))})),t.current=!0)},m=(0,r.useCallback)((t=>{a.current.contains(t.target)||a.current.focus(),e.handleSearchBarToggle&&e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]);return u&&f(),r.createElement("div",{className:"navbar__search",key:"search-box"},r.createElement("span",{"aria-label":"expand searchbar",role:"button",className:be()("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:m,onKeyDown:m,tabIndex:0}),r.createElement("input",{id:"search_input_react",type:"search",placeholder:o?"Search":"Loading...","aria-label":"Search",className:be()("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onClick:f,onMouseOver:f,onFocus:m,onBlur:m,ref:a,disabled:!o}))},we={searchBox:"searchBox_ZlJk"};function _e(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,we.searchBox)},t)}var Ee=n(4104),ke=n(3438);var Se=n(373);const xe=e=>e.docs.find((t=>t.id===e.mainDocId));const Ce={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,l.TH)(),h=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],g=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(pe,(0,s.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(_e,{className:n},r.createElement(ve,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return r.createElement(s,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Ee.Iw)(a),l=(0,ke.vY)(t,a);return null===l?null:r.createElement(oe,(0,s.Z)({exact:!0},o,{isActive:()=>i?.path===l.path||!!i?.sidebar&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Ee.Iw)(a),l=(0,ke.oz)(t,a).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,s.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,ke.lO)(a)[0],l=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,s.Z)({},o,{label:l,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...u}=e;const{search:d,hash:p}=(0,l.TH)(),f=(0,Ee.Iw)(n),m=(0,Ee.gB)(n),{savePreferredVersionName:h}=(0,Se.J)(n),g=[...o,...m.map((e=>{const t=f.alternateDocVersions[e.name]??xe(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...i],b=(0,ke.lO)(n)[0],y=t&&g.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,v=t&&g.length>1?void 0:xe(b).path;return g.length<=1?r.createElement(oe,(0,s.Z)({},u,{mobile:t,label:y,to:v,isActive:a?()=>!1:void 0})):r.createElement(pe,(0,s.Z)({},u,{mobile:t,label:y,to:v,items:g,isActive:a?()=>!1:void 0}))}};function Te(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ce[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Pe(){const e=(0,j.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Te,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function je(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ae(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(je,{onClick:()=>t.hide()}),t.content)}function Le(){const e=(0,j.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(K,null),primaryMenu:r.createElement(Pe,null),secondaryMenu:r.createElement(Ae,null)}):null}const Re={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Oe(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ne(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,j.e)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,A.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:s,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Re.navbarHideable,!l&&Re.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Oe,{onClick:i.toggle}),r.createElement(Le,null))}var Ie=n(8780);const De={errorBoundaryError:"errorBoundaryError_a6uf"};function Me(e){return r.createElement("button",(0,s.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Fe(e){let{error:t}=e;const n=(0,Ie.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:De.errorBoundaryError},n)}class Be extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const $e="right";function Ue(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,s.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function ze(){const{toggle:e,shown:t}=(0,j.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Ue,null))}const He={colorModeToggle:"colorModeToggle_DEke"};function Ze(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Be,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(Te,e)))))}function We(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function qe(){const e=(0,j.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??$e)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(We,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(ze,null),r.createElement(G,null),r.createElement(Ze,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ze,{items:a}),r.createElement(q,{className:He.colorModeToggle}),!o&&r.createElement(_e,null,r.createElement(ve,null)))})}function Ve(){return r.createElement(Ne,null,r.createElement(qe,null))}function Ge(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...l}=t,c=(0,Q.Z)(n),u=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,s.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:c},l),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function Ye(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ge,{item:t}))}function Ke(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ye,{key:t,item:e})))))}function Xe(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ke,{key:t,column:e}))))}function Qe(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Je(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ge,{item:t})}function et(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Je,{item:e}),t.length!==n+1&&r.createElement(Qe,null))))))}function tt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Xe,{columns:t}):r.createElement(et,{links:t})}var nt=n(941);const rt={footerLogoLink:"footerLogoLink_BH7S"};function at(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(nt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function ot(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:rt.footerLogoLink,target:t.target},r.createElement(at,{logo:t})):r.createElement(at,{logo:t})}function it(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function st(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function lt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(st,{style:o,links:n&&n.length>0&&r.createElement(tt,{links:n}),logo:a&&r.createElement(ot,{logo:a}),copyright:t&&r.createElement(it,{copyright:t})})}const ct=r.memo(lt),ut=(0,L.Qc)([F.S,_.pl,A.OC,Se.L5,i.VC,function(e){let{children:t}=e;return r.createElement(R.n2,null,r.createElement(j.M,null,r.createElement(N,null,t)))}]);function dt(e){let{children:t}=e;return r.createElement(ut,null,t)}function pt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Me,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Fe,{error:t})))))}const ft={mainWrapper:"mainWrapper_z2l0"};function mt(e){const{children:t,noFooter:n,wrapperClassName:s,title:l,description:c}=e;return(0,b.t)(),r.createElement(dt,null,r.createElement(i.d,{title:l,description:c}),r.createElement(v,null),r.createElement(P,null),r.createElement(Ve,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,ft.mainWrapper,s)},r.createElement(o.Z,{fallback:e=>r.createElement(pt,e)},t)),!n&&r.createElement(ct,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),s=n(2263),l=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},s):s}function d(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:c}}=(0,l.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(c?.href||"/"),h=n?"":t,g=c?.alt??h;return a.createElement(o.Z,(0,r.Z)({to:m},f,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:g,imageClassName:d}),null!=n&&a.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),s=n(2949);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:c,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,f.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(l.themedImage,l[`themedImage--${e}`],u)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>g});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const s="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??s}`,height:`${t}px`}}function l(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.default.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:l}=e;const c=(0,a.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),a.createElement(t,{ref:c,style:l?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:s},r)}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[s,l]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&l(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:s})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),a=n(2389),o=n(12),i=n(902),s=n(6668);const l=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),u=()=>"true"===l.get(),d=e=>l.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),a=n(412),o=n(902),i=n(12),s=n(6668);const l=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>a.default.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{u.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,o]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(l.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(l);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>g});var r=n(7294),a=n(4104),o=n(9935),i=n(6668),s=n(3438),l=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function g(e){let{children:t}=e;return s.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function s(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function l(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>p});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),s=n(6668),l=n(902);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return a.default.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const l=!1;function c(){const[e,t]=(0,r.useState)((()=>l?"ssr":s()));return(0,r.useEffect)((()=>{function e(){t(s())}const n=l?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>d,hI:()=>_,lO:()=>y,oz:()=>v,s1:()=>b,vY:()=>w});var r=n(7294),a=n(6550),o=n(8790),i=n(4104),s=n(373),l=n(1116),c=n(7392),u=n(8596);const d=!!i._r;function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}const f=(e,t)=>void 0!==e&&(0,u.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,u.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,u.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function b(){const e=(0,l.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function y(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,c.j)([t,n,a].filter(Boolean))),[t,n,a])}function v(e,t){const n=y(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=y(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,s=i.find((e=>(0,a.LX)(r.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?n.docsSidebars[l]:void 0;return{docElement:(0,o.H)(i),sidebarName:l,sidebarItems:c}}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>s,_X:()=>l});var r=n(7294),a=n(6550),o=n(1688),i=n(902);function s(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function l(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:a,image:i,children:s}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),s)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:s},r.createElement(o.Z,null,r.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>l,i6:()=>s,zX:()=>o});var r=n(7294);const a=n(412).default.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>l,RF:()=>d,o5:()=>p});var r=n(7294),a=n(412),o=n(2389),i=n(902);const s=r.createContext(void 0);function l(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(s.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.default.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function f(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=s(t?.persistence);return null===n?c:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),a=n(6550),o=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},4750:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});r(n(412)).default.canUseDOM&&(window.Prism=window.Prism||{},window.Prism.manual=!0)},4184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>P,Ep:()=>p});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,h(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1304:(e,t,n)=>{"use strict";n.r(t)},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
    '};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l{var r=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],h=n[2],g=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var _=null!=h&&null!=m&&m!==h,E="+"===v||"*"===v,k="?"===v||"*"===v,S=n[2]||u,x=b||y;r.push({name:g||o++,prefix:h||"",delimiter:S,optional:k,repeat:E,partial:_,asterisk:!!w,pattern:x?c(x):w?".*":"[^"+l(S)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);k+=E.value.length,E=E.next){var S=E.value;if(t.length>e.length)return;if(!(S instanceof a)){var x,C=1;if(y){if(!(x=o(_,k,e,b))||x.index>=e.length)break;var T=x.index,P=x.index+x[0].length,j=k;for(j+=E.value.length;T>=j;)j+=(E=E.next).value.length;if(k=j-=E.value.length,E.value instanceof a)continue;for(var A=E;A!==t.tail&&(jd.reach&&(d.reach=N);var I=E.prev;if(R&&(I=l(t,I,R),k+=R.length),c(t,I,C),E=l(t,I,new a(p,g?r.tokenize(L,g):L,v,L)),O&&l(t,E,O),C>1){var D={cause:p+","+m,reach:N};i(e,t,n,E.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l=0&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,l(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=l(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=s(i++,r)););return u[n]=a,n})).join(""),n,r),p=Object.keys(u);return i=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=p[i],o="string"==typeof r?r:r.content,s=o.indexOf(a);if(-1!==s){++i;var l=o.substring(0,s),d=c(u[a]),f=o.substring(s+a.length),m=[];if(l&&m.push(l),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var l=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(l=i(t[r-1])+l,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",l,null,l)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++a;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];h&&y.push.apply(y,i([h])),y.push(g),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},8805:()=>{Prism.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:false|nil|true)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach((function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}}))},821:(e,t,n)=>{var r={"./prism-elixir":8805};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=821},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n