From e2bdc2f8ba1deb170cbcc627f09278f476567035 Mon Sep 17 00:00:00 2001 From: Ken Whitesell Date: Fri, 20 Sep 2024 23:17:07 -0400 Subject: [PATCH] DjangoCon version --- .gitignore | 14 + README.md | 44 + Talk slides.pdf | Bin 0 -> 1278266 bytes etc/nginx/sites-available/rtc | 44 + etc/supervisor/conf.d/rtc.conf | 54 + etc/turnserver.conf | 19 + manage.py | 22 + requirements.txt | 32 + rtc/__init__.py | 0 rtc/admin.py | 13 + rtc/consumers.py | 210 + rtc/forms.py | 27 + rtc/management/commands/channel_cleanup.py | 28 + rtc/migrations/__init__.py | 0 rtc/routing.py | 8 + rtc/templates/rtc/header.html | 3 + rtc/templates/rtc/index.html | 40 + rtc/templates/rtc/video_panel.html | 9 + rtc/views.py | 28 + rtc_demo/__init__.py | 0 rtc_demo/apps.py | 5 + rtc_demo/asgi.py | 29 + rtc_demo/settings.py | 124 + rtc_demo/urls.py | 28 + rtc_demo/wsgi.py | 16 + static/css/main.css | 65 + static/img/placeholder.png | Bin 0 -> 34008 bytes static/js/client.js | 356 + static/js/tr.js | 62 + static/lib/adapter/adapter-latest.js | 3364 +++++ static/lib/adapter/adapter.js | 3423 +++++ static/lib/adapter/adapter.js.gz | Bin 0 -> 35272 bytes static/lib/adapter/adapter_no_edge.js | 3519 +++++ .../lib/adapter/adapter_no_edge_no_global.js | 3518 +++++ static/lib/adapter/adapter_no_global.js | 3422 +++++ static/lib/bootstrap/css/bootstrap.css | 10837 +++++++++++++++ static/lib/bootstrap/css/bootstrap.css.map | 1 + static/lib/bootstrap/css/bootstrap.min.css | 7 + .../lib/bootstrap/css/bootstrap.min.css.map | 1 + static/lib/bootstrap/js/bootstrap.js | 5016 +++++++ static/lib/bootstrap/js/bootstrap.js.map | 1 + static/lib/bootstrap/js/bootstrap.min.js | 7 + static/lib/bootstrap/js/bootstrap.min.js.map | 1 + static/lib/htmx.org/dist/ext/ws.js | 467 + static/lib/htmx.org/dist/htmx.js | 5132 ++++++++ static/lib/htmx.org/dist/htmx.min.js | 1 + static/lib/htmx.org/dist/htmx.min.js.gz | Bin 0 -> 15787 bytes static/lib/jquery/jquery-3.6.0.js | 10881 ++++++++++++++++ static/lib/jquery/jquery-3.6.0.min.map | 1 + templates/base.html | 20 + templates/registration/login.html | 28 + 51 files changed, 50927 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 Talk slides.pdf create mode 100644 etc/nginx/sites-available/rtc create mode 100644 etc/supervisor/conf.d/rtc.conf create mode 100644 etc/turnserver.conf create mode 100755 manage.py create mode 100644 requirements.txt create mode 100644 rtc/__init__.py create mode 100644 rtc/admin.py create mode 100644 rtc/consumers.py create mode 100644 rtc/forms.py create mode 100644 rtc/management/commands/channel_cleanup.py create mode 100644 rtc/migrations/__init__.py create mode 100644 rtc/routing.py create mode 100644 rtc/templates/rtc/header.html create mode 100644 rtc/templates/rtc/index.html create mode 100644 rtc/templates/rtc/video_panel.html create mode 100644 rtc/views.py create mode 100644 rtc_demo/__init__.py create mode 100644 rtc_demo/apps.py create mode 100644 rtc_demo/asgi.py create mode 100644 rtc_demo/settings.py create mode 100644 rtc_demo/urls.py create mode 100644 rtc_demo/wsgi.py create mode 100644 static/css/main.css create mode 100644 static/img/placeholder.png create mode 100644 static/js/client.js create mode 100644 static/js/tr.js create mode 100644 static/lib/adapter/adapter-latest.js create mode 100644 static/lib/adapter/adapter.js create mode 100644 static/lib/adapter/adapter.js.gz create mode 100644 static/lib/adapter/adapter_no_edge.js create mode 100644 static/lib/adapter/adapter_no_edge_no_global.js create mode 100644 static/lib/adapter/adapter_no_global.js create mode 100644 static/lib/bootstrap/css/bootstrap.css create mode 100644 static/lib/bootstrap/css/bootstrap.css.map create mode 100644 static/lib/bootstrap/css/bootstrap.min.css create mode 100644 static/lib/bootstrap/css/bootstrap.min.css.map create mode 100644 static/lib/bootstrap/js/bootstrap.js create mode 100644 static/lib/bootstrap/js/bootstrap.js.map create mode 100644 static/lib/bootstrap/js/bootstrap.min.js create mode 100644 static/lib/bootstrap/js/bootstrap.min.js.map create mode 100644 static/lib/htmx.org/dist/ext/ws.js create mode 100644 static/lib/htmx.org/dist/htmx.js create mode 100644 static/lib/htmx.org/dist/htmx.min.js create mode 100644 static/lib/htmx.org/dist/htmx.min.js.gz create mode 100644 static/lib/jquery/jquery-3.6.0.js create mode 100644 static/lib/jquery/jquery-3.6.0.min.map create mode 100644 templates/base.html create mode 100644 templates/registration/login.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58e278f --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.settings +.project +.pydevproject +.env +*.pyc +*.pyo +.vscode +!__init__.py +.code-workspace.code-workspace +.workspace.code-workspace +workspace.code-workspace +__pycache__ +db.sqlite3 + diff --git a/README.md b/README.md new file mode 100644 index 0000000..6f5a7bc --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +WebRTC demo using Django, Channels, HTMX, and Coturn + +This is a Proof-of-Concept demonstration of WebRTC sharing video using Django, Channels, and HTMX as a signalling service, with Coturn providing STUN and TURN support. + +Running this: + +If you're just looking to run this in a local environment, running it using runserver does work. +However, getting other machines to connect to your server can be problematic due to the requirement that some of the protocols involved will only work across https. Therefore, for anything other than just +trying it out on your own system, you'll want to deploy this to a server. + +Here's a summary of what's needed to get this running. + +Keep in mind that this is a full deployment, so everything you're used to doing applies here. +(Note: A full detailed description of a deployment is beyond the scope of this readme.) + +- Create your virtual environment + (My version was built using Python 3.12) + +- Install packages listed in the requirements.txt file + +- Install and run redis or a true redis-compatible server for the channels layer + (I have only ever used redis. This is untested with any of the forks.) + +- Adjust your settings as appropriate. At a minimum, you will probably want to change: + - CSRF_TRUSTED_ORIGINS + - ALLOWED_HOSTS + - STATIC_ROOT + +- Run `manage.py migrate` to initialize the database + +- Configure nginx. + - See the sample file `rtc` in the nginx directory. You will need SSL certificates. + +- Set up Daphne and gunicorn to run your project + - I use `supervisor` as the process manager. A sample configuration file is in the etc/supervisor/conf.d directory + +- Deploy your Django project + - Copy it to an appropriate directory + - Run `collectstatic` + +- Configure coturn - sample file in etc/turnserver.conf + - You will need a non-local location for your coturn instance if you're behind a NAT + - You can use a public STUN server, but TURN should be on a public IP address + - (This is not an issue if everyone using this is behind the same NAT) diff --git a/Talk slides.pdf b/Talk slides.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34780fdea56f8a39cf8c1cc14563b2c4d744e391 GIT binary patch literal 1278266 zcmeFacU)9Uy6+95pxA(JMRE`~iXb^7QAAWkP(V~dlY``(X#oWU1yM3egNO(yISMo) z0+MqOB+_XU{qhxFK|XOx z&g!?-<<&*iNJ=4g0d_m12b9v%{5MQ(&7CdSg+a(|{wtQ&&Zdt1SF8=4O)r}o+nJck z%2GNxJDM8WP`ba0O3(`(yz)!na%*;*i$Om&b?Fo{wflnL!X*PLGOyf)nz3gu^&1Por*4Lr@wKVNm|^@DMh@uDKX9JE6Fu=#M^XR2OW_48{JHg+Q@Z%7HOuoKOMi(e zDt%roYvzK*uTH)Sf1R$z=*&=a%k+_Pq<cly zT(izTOsL4zVjX74aS|o{ad+^(Sk-INi`pkXFLny2vX=-OOg}hKA}di@j}d@k->{wS zy=3Jd`Y_Im za95Q?JkXczF z4{hpu%tNI%@8(t?_KX>wY%?C9)*2_}&CND`I|u8_1;!5PHXEH~C)6^%MD*Gcj8KIe ze6~MBlM$*new5mzWvrfvFB+S`y4ofrdrBvL;@cO_eFE^0la5LtJ7q4neBu^eMjQeC88q?-T~JN8GPcm>^0H-yni z3NjFD`C{Fjl#oFi{ygy;HvYYws3 zsm*W&zPT((`9?W8[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%0Ay%hAa++rT6 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

x^VL0#TUL_Ap}{?&V(Foz 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

V{D8NMLtEs?Y{ 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�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

_y4P@R>@* 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 z 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 z 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∓TWuBZ9CB(SMTl-77K_|3Np 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

7%E2|gL>a_W2HQ5|=t)N6n6dh0x8o1yN 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

kP4H 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\w+)/$', consumers.RtcConsumer.as_asgi()), +] diff --git a/rtc/templates/rtc/header.html b/rtc/templates/rtc/header.html new file mode 100644 index 0000000..ec2bbf6 --- /dev/null +++ b/rtc/templates/rtc/header.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/rtc/templates/rtc/index.html b/rtc/templates/rtc/index.html new file mode 100644 index 0000000..485a3f3 --- /dev/null +++ b/rtc/templates/rtc/index.html @@ -0,0 +1,40 @@ +{% extends "base.html" %} +{% load static %} +{% block page_scripts %} + + + + +{% endblock page_scripts %} +{% block app_content %} +
+
+
+
+ + +
+
+ +
You
+
+ +
+
+ {% csrf_token %} + +
+
+
+
+
+
+
+
+
+
+
+ +{% endblock app_content %} diff --git a/rtc/templates/rtc/video_panel.html b/rtc/templates/rtc/video_panel.html new file mode 100644 index 0000000..ca82529 --- /dev/null +++ b/rtc/templates/rtc/video_panel.html @@ -0,0 +1,9 @@ +{% load static %} +
+
+
+ +
{{user_name}}
+
+
+
diff --git a/rtc/views.py b/rtc/views.py new file mode 100644 index 0000000..2e76913 --- /dev/null +++ b/rtc/views.py @@ -0,0 +1,28 @@ +from django.contrib.auth import login +from django.contrib.auth.decorators import login_required +from django.contrib.auth.models import User +from django.http import HttpResponseRedirect +from django.shortcuts import render +from rtc.forms import LoginForm + +def site_login(request): + form = LoginForm(request.POST or None) + if request.method == "POST": + if form.is_valid(): + if not form.user: + user = User( + username=form.cleaned_data['name'], + first_name=form.cleaned_data['screen_name'], + is_active=True, + ) + user.set_password("no password needed") + user.save() + else: + user = form.user + login(request, user) + return HttpResponseRedirect("/") + return render(request, 'registration/login.html', {'form': form}) + +@login_required +def index(request): + return render(request, 'rtc/index.html', {}) diff --git a/rtc_demo/__init__.py b/rtc_demo/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rtc_demo/apps.py b/rtc_demo/apps.py new file mode 100644 index 0000000..656345b --- /dev/null +++ b/rtc_demo/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + +class ChannelsPresence(AppConfig): + name = 'channels_presence' + default_auto_field = 'django.db.models.AutoField' diff --git a/rtc_demo/asgi.py b/rtc_demo/asgi.py new file mode 100644 index 0000000..80371a4 --- /dev/null +++ b/rtc_demo/asgi.py @@ -0,0 +1,29 @@ +""" +ASGI config for rtc_demo project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ +""" + +import os +import django + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rtc_demo.settings') +django.setup() + +from channels.auth import AuthMiddlewareStack +from channels.routing import ProtocolTypeRouter, URLRouter +from django.core.asgi import get_asgi_application +import rtc.routing + +application = ProtocolTypeRouter({ + "http": get_asgi_application(), + # Just HTTP for now. (We can add other protocols later.) + "websocket": AuthMiddlewareStack( + URLRouter( + rtc.routing.websocket_urlpatterns + ) + ), +}) diff --git a/rtc_demo/settings.py b/rtc_demo/settings.py new file mode 100644 index 0000000..922352e --- /dev/null +++ b/rtc_demo/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for rtc_demo project. +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-apt*tnv=g5f=0a1qtp-s&doqdks*53&ztw***+snqmse^1ymk%' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['demo.kww.us'] +CSRF_TRUSTED_ORIGINS = [ + 'http://127.0.0.1', 'http://localhost', 'http://MSI.local' +] + +# Application definition + +INSTALLED_APPS = [ + 'rtc', + 'daphne', + 'channels', + 'crispy_bootstrap5', + 'crispy_forms', + 'rtc_demo.apps.ChannelsPresence', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.messages', + 'django.contrib.sessions', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'rtc_demo.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +CRISPY_ALLOWED_TEMPLATE_PACKS = 'bootstrap5' +CRISPY_TEMPLATE_PACK = 'bootstrap5' + +WSGI_APPLICATION = 'rtc_demo.wsgi.application' +ASGI_APPLICATION = 'rtc_demo.asgi.application' +CHANNEL_LAYERS = { + 'default': { + 'BACKEND': 'channels_redis.core.RedisChannelLayer', + 'CONFIG': { + "hosts": [('127.0.0.1', 6379)], + "capacity": 10000, + }, + }, +} + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + 'TEST': { + 'NAME': BASE_DIR / 'db_test.sqlite3' + } + + } +} + + +AUTH_PASSWORD_VALIDATORS = [] + + +# Internationalization +# https://docs.djangoproject.com/en/3.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +LOGIN_REDIRECT_URL = 'index' +LOGOUT_REDIRECT_URL = '/login/' +LOGIN_URL = '/login/' + +STATIC_URL = '/static/' + +STATIC_ROOT = '/var/www/rtc/' + +STATICFILES_DIRS = [ + BASE_DIR / "static" +] + +# Default primary key field type +# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/rtc_demo/urls.py b/rtc_demo/urls.py new file mode 100644 index 0000000..06f4537 --- /dev/null +++ b/rtc_demo/urls.py @@ -0,0 +1,28 @@ +"""rtc_demo URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.contrib.auth.views import LogoutView +from django.urls import path + +from rtc.views import index, site_login + +urlpatterns = [ + path('', index, name="home"), + path('login/', site_login, name="login"), + path('logout/', LogoutView.as_view(), name="logout"), + path('admin/', admin.site.urls), +] + diff --git a/rtc_demo/wsgi.py b/rtc_demo/wsgi.py new file mode 100644 index 0000000..3759c51 --- /dev/null +++ b/rtc_demo/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for rtc_demo project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rtc_demo.settings') + +application = get_wsgi_application() diff --git a/static/css/main.css b/static/css/main.css new file mode 100644 index 0000000..89875dd --- /dev/null +++ b/static/css/main.css @@ -0,0 +1,65 @@ +html { + margin: 0; + padding: 0; + font-family: "Lucida Grande", Arial, sans-serif; + font-size: 18px; + font-weight: bold; + line-height: 22px; +} + +body { + color: #666666; + background-color: #c7d8df; +} + +video { + background-color: #ddd; + display: block; + width: 160px; + height: 120px; +} + +#appContent { + margin-top: 20px; + margin-left: 20px; +} + +.join { + background-color: green; + color: white; +} + +.leave { + background-color: #CA0; + color: black; +} + +#call-button { + width: 143px; + margin-right: 11px; +} + +#header { + margin-bottom: 11px; +} + +button[aria-checked="false"] { + text-decoration: line-through; + color: white; + background: red; +} + +figure { + position: relative; +} + +figcaption { + color: #eee; + background: rgba(16,16,16,0.6); + font-weight: normal; + font-size: 14px; + bottom: 0; + left: 0; + width: 160px; +} + diff --git a/static/img/placeholder.png b/static/img/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9dbde990cb9f26857e81b9dc12d99ca541e117 GIT binary patch literal 34008 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
0MF2RphU&N4IylP~Dp6ry~=#wA$@|%P4PQ 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 1) { + console.error(`Unable to add ICE candidate for other ID: ${id}`, e); + } + } + } +} + +apps._add('rtc', 'connect', connected) +apps._add('rtc', 'other', connected_other); +apps._add('rtc', 'others', connected_others); +apps._add('rtc', 'disconnected', disconnected_other); +apps._add('rtc', 'signal', signalled); + + +function display_stream(stream, id = 'self') { + var selector = `${element_id(id)} video`; + var element = document.querySelector(selector); + if (element) { element.srcObject = stream; }; +} + +async function request_user_media(media_constraints) { + $self.media = await navigator.mediaDevices.getUserMedia(media_constraints); + $self.media_tracks.video = $self.media.getVideoTracks()[0]; + $self.media_tracks.video.applyConstraints($self.video_constraints); + $self.media_stream.addTrack($self.media_tracks.video); + display_stream($self.media_stream); +} + +function add_features(id) { + const other = $others.get(id); + function manage_video(video_feature) { + other.features['video'] = video_feature; + if (other.media_tracks.video) { + if (video_feature) { + other.media_stream.addTrack(other.media_tracks.video); + } else { + other.media_stream.removeTrack(other.media_tracks.video); + display_stream(other.media_stream, id); + } + } + } + other.features_channel = other.connection.createDataChannel('features', {negotiated: true, id: 500 }); + other.features_channel.onopen = function(event){ + other.features_channel.send(JSON.stringify($self.features)) + }; + other.features_channel.onmessage = function(event) { + const features = JSON.parse(event.data); + if ('video' in features) { + manage_video(features['video']); + } + }; +} + +function share_features(id, ...features) { + const other = $others.get(id); + + const shared_features = {}; + + if (!other.features_channel) return; + + for (let f of features) { + shared_features[f] = $self.features[f]; + } + + try { + other.features_channel.send(JSON.stringify(shared_features)); + } catch(e) { + console.error('Error sending features:', e); + } +} + +request_user_media($self.media_constraints); + +function establish_features(id) { + register_rtc_callbacks(id); + add_features(id); + const other = $others.get(id); + for (let track in $self.media_tracks) { + other.connection.addTrack($self.media_tracks[track]); + } +} + +function initialize_other({channel_name, user_name, short_name}, polite) { + $others.set(channel_name, { + user_name: user_name, + short_name: '#' + short_name, + connection: new RTCPeerConnection($self.rtc_config), + media_stream: new MediaStream(), + media_tracks: {}, + features: { 'connection_count': 0}, + self_states: { + is_polite: polite, + making_offer: false, + ignoring_offer: false, + remote_answer_pending: false, + suppressing_offer: false + } + }); +} + +function reset_other(channel_name, preserve) { + const other = $others.get(channel_name); + display_stream(null, channel_name); + if (other) { + if (other.connection) { + other.connection.close(); + } + } + if (!preserve) { + let qs = document.querySelector(`${other.short_name}-div`); + if (qs) { qs.remove(); }; + $others.delete(channel_name); + } +} + +function retry_connection(channel_name) { + const polite = $others.get(channel_name).self_states.is_polite; + reset_other(channel_name, true); + //TODO bundle id with username for this call + initialize_other({channel_name, user_name}, polite); + $others.get(channel_name).self_states.suppressing_offer = polite; + + establish_features(channel_name); + + if (polite) { + signal(channel_name, + {'description': {'type': '_reset'}} + ); + } +} + +function register_rtc_callbacks(id) { + const other = $others.get(id); + other.connection.onconnectionstatechange = conn_state_change(id); + other.connection.onnegotiationneeded = conn_negotiation(id); + other.connection.onicecandidate = ice_candidate(id); + other.connection.ontrack = other_track(id); +} + +function conn_state_change(id) { + return function() { + const other = $others.get(id); + const otherElement = document.querySelector(`${other.short_name}`); + if (otherElement) { + otherElement.dataset.connectionState = other.connection.connectionState; + } + } +} + +function conn_negotiation(id) { + return async function() { + const other = $others.get(id); + const self_state = other.self_states; + if (self_state.suppressing_offer) return; + try { + self_state.making_offer = true; + await other.connection.setLocalDescription(); + } catch(e) { + const offer = await other.connection.createOffer(); + await other.connection.setLocalDescription(offer); + } finally { + signal(id, {'description': other.connection.localDescription}); + self_state.making_offer = false; + }; + } +} + +function ice_candidate(id) { + return function({candidate}) { + signal(id, {candidate}); + } +} + +function other_track(id) { + return function({track}) { + const other = $others.get(id); + other.media_tracks[track.kind] = track; + other.media_stream.addTrack(track); + display_stream(other.media_stream, id); + }; +} + +htmx.on('htmx:wsOpen', function(e) { + $self.ws = e.detail.socketWrapper; + $self.ws_json({'room': 'lobby'}); +}); + +function handleCallButton(event) { + const call_button = event.target; + if (call_button.className === 'join') { + call_button.className = 'leave'; + call_button.innerText = 'Leave Call'; + if ($self.ws) { + $self.ws_json({'join': 'video'}); + } + } else { + // Leave the call + call_button.className = 'join'; + call_button.innerText = 'Join Call'; + $self.ws_json({'hangup': true}); + for (let channel_name of $others.keys()) { + reset_other(channel_name); + } + let node_list = document.querySelectorAll('[id^="other-"][id$="-div"]'); + for (let node of node_list) { node.remove(); } + } +}; + +function toggleCam(event) { + const button = event.target; + const video = $self.media_tracks.video; + const state = video.enabled = !video.enabled; + $self.features.video = state; + button.setAttribute('aria-checked', state); + + for (let id of $others.keys()) { + share_features(id, 'video'); + } + + if (state) { + $self.media_stream.addTrack($self.media_tracks.video); + } else { + $self.media_stream.removeTrack($self.media_tracks.video); + display_stream($self.media_stream); + } +} diff --git a/static/js/tr.js b/static/js/tr.js new file mode 100644 index 0000000..aef9c20 --- /dev/null +++ b/static/js/tr.js @@ -0,0 +1,62 @@ +(function() { + + /** @type {import("../htmx").HtmxInternalApi} */ + var api; + + /* data is the parsed JSON response + data.html is the html to add to the page + */ + htmx.defineExtension('tr-ext', { + transformResponse : function(text, xhr, elt) { + const data = JSON.parse(text); + for (var [app, message] of Object.entries(data)) { + var event = message.type; + apps._forward(app, event, message) + } + if ('remove' in data) { + htmx.remove(htmx.find(data.remove)); + } + if (data.html === undefined) { data.html = ""; }; + return data.html; + } + }) +})(); + +htmx.on('htmx:wsOpen', function(e) { + // Send heartbeat at least every 30 seconds + setInterval(function() { + $self.ws_json({"signal": "hb"}); + }, 25000 + (Math.random() * 5000) ); +}); + +const apps = { + '_add': function(app, name, target) { + if (!apps[app]) { + apps[app] = new Map(); + } + if (!apps[app].has(name)) { + apps[app].set(name, new Array()); + } + if (!apps[app].get(name).includes(target)) { + apps[app].get(name).push(target); + } + }, + '_remove': function(app, name, target) { + if (apps[app]) { + idx = apps[app].get(name).indexOf(target) + if (idx > -1) { + apps[app].get(name).splice(idx, 1); + } + if (apps[app].get(name).length == 0) { + apps[app].delete(name); + } + } + }, + '_forward': function(app, name, message) { + if (apps[app] && apps[app].has(name)) { + for (target of apps[app].get(name)) { + target(message); + } + } + }, +} diff --git a/static/lib/adapter/adapter-latest.js b/static/lib/adapter/adapter-latest.js new file mode 100644 index 0000000..51d0f27 --- /dev/null +++ b/static/lib/adapter/adapter-latest.js @@ -0,0 +1,3364 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.adapter = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + window = _ref.window; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + shimChrome: true, + shimFirefox: true, + shimSafari: true + }; + // Utils. + var logging = utils.log; + var browserDetails = utils.detectBrowser(window); + var adapter = { + browserDetails: browserDetails, + commonShim: commonShim, + extractVersion: utils.extractVersion, + disableLog: utils.disableLog, + disableWarnings: utils.disableWarnings, + // Expose sdp as a convenience. For production apps include directly. + sdp: sdp + }; + + // Shim browser if found. + switch (browserDetails.browser) { + case 'chrome': + if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) { + logging('Chrome shim is not included in this adapter release.'); + return adapter; + } + if (browserDetails.version === null) { + logging('Chrome shim can not determine version, not shimming.'); + return adapter; + } + logging('adapter.js shimming chrome.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = chromeShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + chromeShim.shimGetUserMedia(window, browserDetails); + chromeShim.shimMediaStream(window, browserDetails); + chromeShim.shimPeerConnection(window, browserDetails); + chromeShim.shimOnTrack(window, browserDetails); + chromeShim.shimAddTrackRemoveTrack(window, browserDetails); + chromeShim.shimGetSendersWithDtmf(window, browserDetails); + chromeShim.shimGetStats(window, browserDetails); + chromeShim.shimSenderReceiverGetStats(window, browserDetails); + chromeShim.fixNegotiationNeeded(window, browserDetails); + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + case 'firefox': + if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) { + logging('Firefox shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming firefox.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = firefoxShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + firefoxShim.shimGetUserMedia(window, browserDetails); + firefoxShim.shimPeerConnection(window, browserDetails); + firefoxShim.shimOnTrack(window, browserDetails); + firefoxShim.shimRemoveStream(window, browserDetails); + firefoxShim.shimSenderGetStats(window, browserDetails); + firefoxShim.shimReceiverGetStats(window, browserDetails); + firefoxShim.shimRTCDataChannel(window, browserDetails); + firefoxShim.shimAddTransceiver(window, browserDetails); + firefoxShim.shimGetParameters(window, browserDetails); + firefoxShim.shimCreateOffer(window, browserDetails); + firefoxShim.shimCreateAnswer(window, browserDetails); + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + break; + case 'safari': + if (!safariShim || !options.shimSafari) { + logging('Safari shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming safari.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = safariShim; + + // Must be called before shimCallbackAPI. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + safariShim.shimRTCIceServerUrls(window, browserDetails); + safariShim.shimCreateOfferLegacy(window, browserDetails); + safariShim.shimCallbacksAPI(window, browserDetails); + safariShim.shimLocalStreamsAPI(window, browserDetails); + safariShim.shimRemoteStreamsAPI(window, browserDetails); + safariShim.shimTrackEventTransceiver(window, browserDetails); + safariShim.shimGetUserMedia(window, browserDetails); + safariShim.shimAudioContext(window, browserDetails); + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + default: + logging('Unsupported browser!'); + break; + } + return adapter; +} + +},{"./chrome/chrome_shim":3,"./common_shim":6,"./firefox/firefox_shim":7,"./safari/safari_shim":10,"./utils":11,"sdp":12}],3:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.fixNegotiationNeeded = fixNegotiationNeeded; +exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; +exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; +Object.defineProperty(exports, "shimGetDisplayMedia", { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; +exports.shimGetStats = shimGetStats; +Object.defineProperty(exports, "shimGetUserMedia", { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); +exports.shimMediaStream = shimMediaStream; +exports.shimOnTrack = shimOnTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; +var utils = _interopRequireWildcard(require("../utils.js")); +var _getusermedia = require("./getusermedia"); +var _getdisplaymedia = require("./getdisplaymedia"); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function shimMediaStream(window) { + window.MediaStream = window.MediaStream || window.webkitMediaStream; +} +function shimOnTrack(window) { + if (_typeof(window) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { + get: function get() { + return this._ontrack; + }, + set: function set(f) { + if (this._ontrack) { + this.removeEventListener('track', this._ontrack); + } + this.addEventListener('track', this._ontrack = f); + }, + enumerable: true, + configurable: true + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var _this = this; + if (!this._ontrackpoly) { + this._ontrackpoly = function (e) { + // onaddstream does not fire when a track is added to an existing + // stream. But stream.onaddtrack is implemented so we use that. + e.stream.addEventListener('addtrack', function (te) { + var receiver; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === te.track.id; + }); + } else { + receiver = { + track: te.track + }; + } + var event = new Event('track'); + event.track = te.track; + event.receiver = receiver; + event.transceiver = { + receiver: receiver + }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + e.stream.getTracks().forEach(function (track) { + var receiver; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === track.id; + }); + } else { + receiver = { + track: track + }; + } + var event = new Event('track'); + event.track = track; + event.receiver = receiver; + event.transceiver = { + receiver: receiver + }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + }; + this.addEventListener('addstream', this._ontrackpoly); + } + return origSetRemoteDescription.apply(this, arguments); + }; + } else { + // even if RTCRtpTransceiver is in window, it is only used and + // emitted in unified-plan. Unfortunately this means we need + // to unconditionally wrap the event. + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + if (!e.transceiver) { + Object.defineProperty(e, 'transceiver', { + value: { + receiver: e.receiver + } + }); + } + return e; + }); + } +} +function shimGetSendersWithDtmf(window) { + // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack. + if (_typeof(window) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { + var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) { + return { + track: track, + get dtmf() { + if (this._dtmf === undefined) { + if (track.kind === 'audio') { + this._dtmf = pc.createDTMFSender(track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + }, + _pc: pc + }; + }; + + // augment addTrack when getSenders is not available. + if (!window.RTCPeerConnection.prototype.getSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + this._senders = this._senders || []; + return this._senders.slice(); // return a copy of the internal state. + }; + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var sender = origAddTrack.apply(this, arguments); + if (!sender) { + sender = shimSenderWithDtmf(this, track); + this._senders.push(sender); + } + return sender; + }; + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + origRemoveTrack.apply(this, arguments); + var idx = this._senders.indexOf(sender); + if (idx !== -1) { + this._senders.splice(idx, 1); + } + }; + } + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this2 = this; + this._senders = this._senders || []; + origAddStream.apply(this, [stream]); + stream.getTracks().forEach(function (track) { + _this2._senders.push(shimSenderWithDtmf(_this2, track)); + }); + }; + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + this._senders = this._senders || []; + origRemoveStream.apply(this, [stream]); + stream.getTracks().forEach(function (track) { + var sender = _this3._senders.find(function (s) { + return s.track === track; + }); + if (sender) { + // remove sender + _this3._senders.splice(_this3._senders.indexOf(sender), 1); + } + }); + }; + } else if (_typeof(window) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this4 = this; + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this4; + }); + return senders; + }; + Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { + get: function get() { + if (this._dtmf === undefined) { + if (this.track.kind === 'audio') { + this._dtmf = this._pc.createDTMFSender(this.track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + } + }); + } +} +function shimGetStats(window) { + if (!window.RTCPeerConnection) { + return; + } + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _this5 = this; + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + // If selector is a function then we are in the old style stats so just + // pass back the original getStats format to avoid breaking old users. + if (arguments.length > 0 && typeof selector === 'function') { + return origGetStats.apply(this, arguments); + } + + // When spec-style getStats is supported, return those when called with + // either no arguments or the selector argument is null. + if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) { + return origGetStats.apply(this, []); + } + var fixChromeStats_ = function fixChromeStats_(response) { + var standardReport = {}; + var reports = response.result(); + reports.forEach(function (report) { + var standardStats = { + id: report.id, + timestamp: report.timestamp, + type: { + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }[report.type] || report.type + }; + report.names().forEach(function (name) { + standardStats[name] = report.stat(name); + }); + standardReport[standardStats.id] = standardStats; + }); + return standardReport; + }; + + // shim getStats with maplike support + var makeMapStats = function makeMapStats(stats) { + return new Map(Object.keys(stats).map(function (key) { + return [key, stats[key]]; + })); + }; + if (arguments.length >= 2) { + var successCallbackWrapper_ = function successCallbackWrapper_(response) { + onSucc(makeMapStats(fixChromeStats_(response))); + }; + return origGetStats.apply(this, [successCallbackWrapper_, selector]); + } + + // promise-support + return new Promise(function (resolve, reject) { + origGetStats.apply(_this5, [function (response) { + resolve(makeMapStats(fixChromeStats_(response))); + }, reject]); + }).then(onSucc, onErr); + }; +} +function shimSenderReceiverGetStats(window) { + if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { + return; + } + + // shim sender stats. + if (!('getStats' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this6 = this; + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this6; + }); + return senders; + }; + } + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + var sender = this; + return this._pc.getStats().then(function (result) { + return ( + /* Note: this will include stats of all senders that + * send a track with the same id as sender.track as + * it is not possible to identify the RTCRtpSender. + */ + utils.filterStats(result, sender.track, true) + ); + }); + }; + } + + // shim receiver stats. + if (!('getStats' in window.RTCRtpReceiver.prototype)) { + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this7 = this; + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this7; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + var receiver = this; + return this._pc.getStats().then(function (result) { + return utils.filterStats(result, receiver.track, false); + }); + }; + } + if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) { + return; + } + + // shim RTCPeerConnection.getStats(track). + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) { + var track = arguments[0]; + var sender; + var receiver; + var err; + this.getSenders().forEach(function (s) { + if (s.track === track) { + if (sender) { + err = true; + } else { + sender = s; + } + } + }); + this.getReceivers().forEach(function (r) { + if (r.track === track) { + if (receiver) { + err = true; + } else { + receiver = r; + } + } + return r.track === track; + }); + if (err || sender && receiver) { + return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError')); + } else if (sender) { + return sender.getStats(); + } else if (receiver) { + return receiver.getStats(); + } + return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError')); + } + return origGetStats.apply(this, arguments); + }; +} +function shimAddTrackRemoveTrackWithNative(window) { + // shim addTrack/removeTrack with native variants in order to make + // the interactions with legacy getLocalStreams behave as in other browsers. + // Keeps a mapping stream.id => [stream, rtpsenders...] + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this8 = this; + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + return Object.keys(this._shimmedLocalStreams).map(function (streamId) { + return _this8._shimmedLocalStreams[streamId][0]; + }); + }; + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + if (!stream) { + return origAddTrack.apply(this, arguments); + } + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + var sender = origAddTrack.apply(this, arguments); + if (!this._shimmedLocalStreams[stream.id]) { + this._shimmedLocalStreams[stream.id] = [stream, sender]; + } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) { + this._shimmedLocalStreams[stream.id].push(sender); + } + return sender; + }; + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this9 = this; + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + stream.getTracks().forEach(function (track) { + var alreadyExists = _this9.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + var existingSenders = this.getSenders(); + origAddStream.apply(this, arguments); + var newSenders = this.getSenders().filter(function (newSender) { + return existingSenders.indexOf(newSender) === -1; + }); + this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders); + }; + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + delete this._shimmedLocalStreams[stream.id]; + return origRemoveStream.apply(this, arguments); + }; + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this10 = this; + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + if (sender) { + Object.keys(this._shimmedLocalStreams).forEach(function (streamId) { + var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender); + if (idx !== -1) { + _this10._shimmedLocalStreams[streamId].splice(idx, 1); + } + if (_this10._shimmedLocalStreams[streamId].length === 1) { + delete _this10._shimmedLocalStreams[streamId]; + } + }); + } + return origRemoveTrack.apply(this, arguments); + }; +} +function shimAddTrackRemoveTrack(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + // shim addTrack and removeTrack. + if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) { + return shimAddTrackRemoveTrackWithNative(window); + } + + // also shim pc.getLocalStreams when addTrack is shimmed + // to return the original streams. + var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams; + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this11 = this; + var nativeStreams = origGetLocalStreams.apply(this); + this._reverseStreams = this._reverseStreams || {}; + return nativeStreams.map(function (stream) { + return _this11._reverseStreams[stream.id]; + }); + }; + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this12 = this; + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + stream.getTracks().forEach(function (track) { + var alreadyExists = _this12.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + // Add identity mapping for consistency with addTrack. + // Unless this is being used with a stream from addTrack. + if (!this._reverseStreams[stream.id]) { + var newStream = new window.MediaStream(stream.getTracks()); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + stream = newStream; + } + origAddStream.apply(this, [stream]); + }; + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + origRemoveStream.apply(this, [this._streams[stream.id] || stream]); + delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id]; + delete this._streams[stream.id]; + }; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var _this13 = this; + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + var streams = [].slice.call(arguments, 1); + if (streams.length !== 1 || !streams[0].getTracks().find(function (t) { + return t === track; + })) { + // this is not fully correct but all we can manage without + // [[associated MediaStreams]] internal slot. + throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError'); + } + var alreadyExists = this.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + var oldStream = this._streams[stream.id]; + if (oldStream) { + // this is using odd Chrome behaviour, use with caution: + // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815 + // Note: we rely on the high-level addTrack/dtmf shim to + // create the sender with a dtmf sender. + oldStream.addTrack(track); + + // Trigger ONN async. + Promise.resolve().then(function () { + _this13.dispatchEvent(new Event('negotiationneeded')); + }); + } else { + var newStream = new window.MediaStream([track]); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + this.addStream(newStream); + } + return this.getSenders().find(function (s) { + return s.track === track; + }); + }; + + // replace the internal stream id with the external one and + // vice versa. + function replaceInternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + function replaceExternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + ['createOffer', 'createAnswer'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + var _this14 = this; + var args = arguments; + var isLegacyCall = arguments.length && typeof arguments[0] === 'function'; + if (isLegacyCall) { + return nativeMethod.apply(this, [function (description) { + var desc = replaceInternalStreamId(_this14, description); + args[0].apply(null, [desc]); + }, function (err) { + if (args[1]) { + args[1].apply(null, err); + } + }, arguments[2]]); + } + return nativeMethod.apply(this, arguments).then(function (description) { + return replaceInternalStreamId(_this14, description); + }); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + if (!arguments.length || !arguments[0].type) { + return origSetLocalDescription.apply(this, arguments); + } + arguments[0] = replaceExternalStreamId(this, arguments[0]); + return origSetLocalDescription.apply(this, arguments); + }; + + // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier + + var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription'); + Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', { + get: function get() { + var description = origLocalDescription.get.apply(this); + if (description.type === '') { + return description; + } + return replaceInternalStreamId(this, description); + } + }); + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this15 = this; + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + // We can not yet check for sender instanceof RTCRtpSender + // since we shim RTPSender. So we check if sender._pc is set. + if (!sender._pc) { + throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError'); + } + var isLocal = sender._pc === this; + if (!isLocal) { + throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError'); + } + + // Search for the native stream the senders track belongs to. + this._streams = this._streams || {}; + var stream; + Object.keys(this._streams).forEach(function (streamid) { + var hasTrack = _this15._streams[streamid].getTracks().find(function (track) { + return sender.track === track; + }); + if (hasTrack) { + stream = _this15._streams[streamid]; + } + }); + if (stream) { + if (stream.getTracks().length === 1) { + // if this is the last track of the stream, remove the stream. This + // takes care of any shimmed _senders. + this.removeStream(this._reverseStreams[stream.id]); + } else { + // relying on the same odd chrome behaviour as above. + stream.removeTrack(sender.track); + } + this.dispatchEvent(new Event('negotiationneeded')); + } + }; +} +function shimPeerConnection(window, browserDetails) { + if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.webkitRTCPeerConnection; + } + if (!window.RTCPeerConnection) { + return; + } + + // shim implicit creation of RTCSessionDescription/RTCIceCandidate + if (browserDetails.version < 53) { + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } +} + +// Attempt to fix ONN in plan-b mode. +function fixNegotiationNeeded(window, browserDetails) { + utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) { + var pc = e.target; + if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') { + if (pc.signalingState !== 'stable') { + return; + } + } + return e; + }); +} + +},{"../utils.js":11,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, getSourceId) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + // getSourceId is a function that returns a promise resolving with + // the sourceId of the screen/window/tab to be shared. + if (typeof getSourceId !== 'function') { + console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function'); + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + return getSourceId(constraints).then(function (sourceId) { + var widthSpecified = constraints.video && constraints.video.width; + var heightSpecified = constraints.video && constraints.video.height; + var frameRateSpecified = constraints.video && constraints.video.frameRate; + constraints.video = { + mandatory: { + chromeMediaSource: 'desktop', + chromeMediaSourceId: sourceId, + maxFrameRate: frameRateSpecified || 3 + } + }; + if (widthSpecified) { + constraints.video.mandatory.maxWidth = widthSpecified; + } + if (heightSpecified) { + constraints.video.mandatory.maxHeight = heightSpecified; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }); + }; +} + +},{}],5:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetUserMedia = shimGetUserMedia; +var utils = _interopRequireWildcard(require("../utils.js")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +var logging = utils.log; +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + if (!navigator.mediaDevices) { + return; + } + var constraintsToChrome_ = function constraintsToChrome_(c) { + if (_typeof(c) !== 'object' || c.mandatory || c.optional) { + return c; + } + var cc = {}; + Object.keys(c).forEach(function (key) { + if (key === 'require' || key === 'advanced' || key === 'mediaSource') { + return; + } + var r = _typeof(c[key]) === 'object' ? c[key] : { + ideal: c[key] + }; + if (r.exact !== undefined && typeof r.exact === 'number') { + r.min = r.max = r.exact; + } + var oldname_ = function oldname_(prefix, name) { + if (prefix) { + return prefix + name.charAt(0).toUpperCase() + name.slice(1); + } + return name === 'deviceId' ? 'sourceId' : name; + }; + if (r.ideal !== undefined) { + cc.optional = cc.optional || []; + var oc = {}; + if (typeof r.ideal === 'number') { + oc[oldname_('min', key)] = r.ideal; + cc.optional.push(oc); + oc = {}; + oc[oldname_('max', key)] = r.ideal; + cc.optional.push(oc); + } else { + oc[oldname_('', key)] = r.ideal; + cc.optional.push(oc); + } + } + if (r.exact !== undefined && typeof r.exact !== 'number') { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_('', key)] = r.exact; + } else { + ['min', 'max'].forEach(function (mix) { + if (r[mix] !== undefined) { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_(mix, key)] = r[mix]; + } + }); + } + }); + if (c.advanced) { + cc.optional = (cc.optional || []).concat(c.advanced); + } + return cc; + }; + var shimConstraints_ = function shimConstraints_(constraints, func) { + if (browserDetails.version >= 61) { + return func(constraints); + } + constraints = JSON.parse(JSON.stringify(constraints)); + if (constraints && _typeof(constraints.audio) === 'object') { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + constraints = JSON.parse(JSON.stringify(constraints)); + remap(constraints.audio, 'autoGainControl', 'googAutoGainControl'); + remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression'); + constraints.audio = constraintsToChrome_(constraints.audio); + } + if (constraints && _typeof(constraints.video) === 'object') { + // Shim facingMode for mobile & surface pro. + var face = constraints.video.facingMode; + face = face && (_typeof(face) === 'object' ? face : { + ideal: face + }); + var getSupportedFacingModeLies = browserDetails.version < 66; + if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) { + delete constraints.video.facingMode; + var matches; + if (face.exact === 'environment' || face.ideal === 'environment') { + matches = ['back', 'rear']; + } else if (face.exact === 'user' || face.ideal === 'user') { + matches = ['front']; + } + if (matches) { + // Look for matches in label, or use last cam for back (typical). + return navigator.mediaDevices.enumerateDevices().then(function (devices) { + devices = devices.filter(function (d) { + return d.kind === 'videoinput'; + }); + var dev = devices.find(function (d) { + return matches.some(function (match) { + return d.label.toLowerCase().includes(match); + }); + }); + if (!dev && devices.length && matches.includes('back')) { + dev = devices[devices.length - 1]; // more likely the back cam + } + + if (dev) { + constraints.video.deviceId = face.exact ? { + exact: dev.deviceId + } : { + ideal: dev.deviceId + }; + } + constraints.video = constraintsToChrome_(constraints.video); + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }); + } + } + constraints.video = constraintsToChrome_(constraints.video); + } + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }; + var shimError_ = function shimError_(e) { + if (browserDetails.version >= 64) { + return e; + } + return { + name: { + PermissionDeniedError: 'NotAllowedError', + PermissionDismissedError: 'NotAllowedError', + InvalidStateError: 'NotAllowedError', + DevicesNotFoundError: 'NotFoundError', + ConstraintNotSatisfiedError: 'OverconstrainedError', + TrackStartError: 'NotReadableError', + MediaDeviceFailedDueToShutdown: 'NotAllowedError', + MediaDeviceKillSwitchOn: 'NotAllowedError', + TabCaptureError: 'AbortError', + ScreenCaptureError: 'AbortError', + DeviceCaptureError: 'AbortError' + }[e.name] || e.name, + message: e.message, + constraint: e.constraint || e.constraintName, + toString: function toString() { + return this.name + (this.message && ': ') + this.message; + } + }; + }; + var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) { + shimConstraints_(constraints, function (c) { + navigator.webkitGetUserMedia(c, onSuccess, function (e) { + if (onError) { + onError(shimError_(e)); + } + }); + }); + }; + navigator.getUserMedia = getUserMedia_.bind(navigator); + + // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia + // function which returns a Promise, it does not accept spec-style + // constraints. + if (navigator.mediaDevices.getUserMedia) { + var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (cs) { + return shimConstraints_(cs, function (c) { + return origGetUserMedia(c).then(function (stream) { + if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) { + stream.getTracks().forEach(function (track) { + track.stop(); + }); + throw new DOMException('', 'NotFoundError'); + } + return stream; + }, function (e) { + return Promise.reject(shimError_(e)); + }); + }); + }; + } +} + +},{"../utils.js":11}],6:[function(require,module,exports){ +/* + * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.removeExtmapAllowMixed = removeExtmapAllowMixed; +exports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty; +exports.shimConnectionState = shimConnectionState; +exports.shimMaxMessageSize = shimMaxMessageSize; +exports.shimParameterlessSetLocalDescription = shimParameterlessSetLocalDescription; +exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.shimRTCIceCandidateRelayProtocol = shimRTCIceCandidateRelayProtocol; +exports.shimSendThrowTypeError = shimSendThrowTypeError; +var _sdp = _interopRequireDefault(require("sdp")); +var utils = _interopRequireWildcard(require("./utils")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function shimRTCIceCandidate(window) { + // foundation is arbitrarily chosen as an indicator for full support for + // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface + if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) { + return; + } + var NativeRTCIceCandidate = window.RTCIceCandidate; + window.RTCIceCandidate = function RTCIceCandidate(args) { + // Remove the a= which shouldn't be part of the candidate string. + if (_typeof(args) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) { + args = JSON.parse(JSON.stringify(args)); + args.candidate = args.candidate.substring(2); + } + if (args.candidate && args.candidate.length) { + // Augment the native candidate with the parsed fields. + var nativeCandidate = new NativeRTCIceCandidate(args); + var parsedCandidate = _sdp["default"].parseCandidate(args.candidate); + for (var key in parsedCandidate) { + if (!(key in nativeCandidate)) { + Object.defineProperty(nativeCandidate, key, { + value: parsedCandidate[key] + }); + } + } + + // Override serializer to not serialize the extra attributes. + nativeCandidate.toJSON = function toJSON() { + return { + candidate: nativeCandidate.candidate, + sdpMid: nativeCandidate.sdpMid, + sdpMLineIndex: nativeCandidate.sdpMLineIndex, + usernameFragment: nativeCandidate.usernameFragment + }; + }; + return nativeCandidate; + } + return new NativeRTCIceCandidate(args); + }; + window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype; + + // Hook up the augmented candidate in onicecandidate and + // addEventListener('icecandidate', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) { + if (e.candidate) { + Object.defineProperty(e, 'candidate', { + value: new window.RTCIceCandidate(e.candidate), + writable: 'false' + }); + } + return e; + }); +} +function shimRTCIceCandidateRelayProtocol(window) { + if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) { + return; + } + + // Hook up the augmented candidate in onicecandidate and + // addEventListener('icecandidate', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) { + if (e.candidate) { + var parsedCandidate = _sdp["default"].parseCandidate(e.candidate.candidate); + if (parsedCandidate.type === 'relay') { + // This is a libwebrtc-specific mapping of local type preference + // to relayProtocol. + e.candidate.relayProtocol = { + 0: 'tls', + 1: 'tcp', + 2: 'udp' + }[parsedCandidate.priority >> 24]; + } + } + return e; + }); +} +function shimMaxMessageSize(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + if (!('sctp' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + } + }); + } + var sctpInDescription = function sctpInDescription(description) { + if (!description || !description.sdp) { + return false; + } + var sections = _sdp["default"].splitSections(description.sdp); + sections.shift(); + return sections.some(function (mediaSection) { + var mLine = _sdp["default"].parseMLine(mediaSection); + return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1; + }); + }; + var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) { + // TODO: Is there a better solution for detecting Firefox? + var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/); + if (match === null || match.length < 2) { + return -1; + } + var version = parseInt(match[1], 10); + // Test for NaN (yes, this is ugly) + return version !== version ? -1 : version; + }; + var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) { + // Every implementation we know can send at least 64 KiB. + // Note: Although Chrome is technically able to send up to 256 KiB, the + // data does not reach the other peer reliably. + // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419 + var canSendMaxMessageSize = 65536; + if (browserDetails.browser === 'firefox') { + if (browserDetails.version < 57) { + if (remoteIsFirefox === -1) { + // FF < 57 will send in 16 KiB chunks using the deprecated PPID + // fragmentation. + canSendMaxMessageSize = 16384; + } else { + // However, other FF (and RAWRTC) can reassemble PPID-fragmented + // messages. Thus, supporting ~2 GiB when sending. + canSendMaxMessageSize = 2147483637; + } + } else if (browserDetails.version < 60) { + // Currently, all FF >= 57 will reset the remote maximum message size + // to the default value when a data channel is created at a later + // stage. :( + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536; + } else { + // FF >= 60 supports sending ~2 GiB + canSendMaxMessageSize = 2147483637; + } + } + return canSendMaxMessageSize; + }; + var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) { + // Note: 65536 bytes is the default value from the SDP spec. Also, + // every implementation we know supports receiving 65536 bytes. + var maxMessageSize = 65536; + + // FF 57 has a slightly incorrect default remote max message size, so + // we need to adjust it here to avoid a failure when sending. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697 + if (browserDetails.browser === 'firefox' && browserDetails.version === 57) { + maxMessageSize = 65535; + } + var match = _sdp["default"].matchPrefix(description.sdp, 'a=max-message-size:'); + if (match.length > 0) { + maxMessageSize = parseInt(match[0].substring(19), 10); + } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) { + // If the maximum message size is not present in the remote SDP and + // both local and remote are Firefox, the remote peer can receive + // ~2 GiB. + maxMessageSize = 2147483637; + } + return maxMessageSize; + }; + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + this._sctp = null; + // Chrome decided to not expose .sctp in plan-b mode. + // As usual, adapter.js has to do an 'ugly worakaround' + // to cover up the mess. + if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) { + var _this$getConfiguratio = this.getConfiguration(), + sdpSemantics = _this$getConfiguratio.sdpSemantics; + if (sdpSemantics === 'plan-b') { + Object.defineProperty(this, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + }, + enumerable: true, + configurable: true + }); + } + } + if (sctpInDescription(arguments[0])) { + // Check if the remote is FF. + var isFirefox = getRemoteFirefoxVersion(arguments[0]); + + // Get the maximum message size the local peer is capable of sending + var canSendMMS = getCanSendMaxMessageSize(isFirefox); + + // Get the maximum message size of the remote peer. + var remoteMMS = getMaxMessageSize(arguments[0], isFirefox); + + // Determine final maximum message size + var maxMessageSize; + if (canSendMMS === 0 && remoteMMS === 0) { + maxMessageSize = Number.POSITIVE_INFINITY; + } else if (canSendMMS === 0 || remoteMMS === 0) { + maxMessageSize = Math.max(canSendMMS, remoteMMS); + } else { + maxMessageSize = Math.min(canSendMMS, remoteMMS); + } + + // Create a dummy RTCSctpTransport object and the 'maxMessageSize' + // attribute. + var sctp = {}; + Object.defineProperty(sctp, 'maxMessageSize', { + get: function get() { + return maxMessageSize; + } + }); + this._sctp = sctp; + } + return origSetRemoteDescription.apply(this, arguments); + }; +} +function shimSendThrowTypeError(window) { + if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) { + return; + } + + // Note: Although Firefox >= 57 has a native implementation, the maximum + // message size can be reset for all data channels at a later stage. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + + function wrapDcSend(dc, pc) { + var origDataChannelSend = dc.send; + dc.send = function send() { + var data = arguments[0]; + var length = data.length || data.size || data.byteLength; + if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) { + throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)'); + } + return origDataChannelSend.apply(dc, arguments); + }; + } + var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel; + window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() { + var dataChannel = origCreateDataChannel.apply(this, arguments); + wrapDcSend(dataChannel, this); + return dataChannel; + }; + utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) { + wrapDcSend(e.channel, e.target); + return e; + }); +} + +/* shims RTCConnectionState by pretending it is the same as iceConnectionState. + * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12 + * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect + * since DTLS failures would be hidden. See + * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827 + * for the Firefox tracking bug. + */ +function shimConnectionState(window) { + if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) { + return; + } + var proto = window.RTCPeerConnection.prototype; + Object.defineProperty(proto, 'connectionState', { + get: function get() { + return { + completed: 'connected', + checking: 'connecting' + }[this.iceConnectionState] || this.iceConnectionState; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, 'onconnectionstatechange', { + get: function get() { + return this._onconnectionstatechange || null; + }, + set: function set(cb) { + if (this._onconnectionstatechange) { + this.removeEventListener('connectionstatechange', this._onconnectionstatechange); + delete this._onconnectionstatechange; + } + if (cb) { + this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb); + } + }, + enumerable: true, + configurable: true + }); + ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) { + var origMethod = proto[method]; + proto[method] = function () { + if (!this._connectionstatechangepoly) { + this._connectionstatechangepoly = function (e) { + var pc = e.target; + if (pc._lastConnectionState !== pc.connectionState) { + pc._lastConnectionState = pc.connectionState; + var newEvent = new Event('connectionstatechange', e); + pc.dispatchEvent(newEvent); + } + return e; + }; + this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly); + } + return origMethod.apply(this, arguments); + }; + }); +} +function removeExtmapAllowMixed(window, browserDetails) { + /* remove a=extmap-allow-mixed for webrtc.org < M71 */ + if (!window.RTCPeerConnection) { + return; + } + if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) { + return; + } + if (browserDetails.browser === 'safari' && browserDetails.version >= 605) { + return; + } + var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) { + if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) { + var sdp = desc.sdp.split('\n').filter(function (line) { + return line.trim() !== 'a=extmap-allow-mixed'; + }).join('\n'); + // Safari enforces read-only-ness of RTCSessionDescription fields. + if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) { + arguments[0] = new window.RTCSessionDescription({ + type: desc.type, + sdp: sdp + }); + } else { + desc.sdp = sdp; + } + } + return nativeSRD.apply(this, arguments); + }; +} +function shimAddIceCandidateNullOrEmpty(window, browserDetails) { + // Support for addIceCandidate(null or undefined) + // as well as addIceCandidate({candidate: "", ...}) + // https://bugs.chromium.org/p/chromium/issues/detail?id=978582 + // Note: must be called before other polyfills which change the signature. + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; + if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) { + return; + } + window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { + if (!arguments[0]) { + if (arguments[1]) { + arguments[1].apply(null); + } + return Promise.resolve(); + } + // Firefox 68+ emits and processes {candidate: "", ...}, ignore + // in older versions. + // Native support for ignoring exists for Chrome M77+. + // Safari ignores as well, exact version unknown but works in the same + // version that also ignores addIceCandidate(null). + if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') { + return Promise.resolve(); + } + return nativeAddIceCandidate.apply(this, arguments); + }; +} + +// Note: Make sure to call this ahead of APIs that modify +// setLocalDescription.length +function shimParameterlessSetLocalDescription(window, browserDetails) { + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) { + return; + } + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + var _this = this; + var desc = arguments[0] || {}; + if (_typeof(desc) !== 'object' || desc.type && desc.sdp) { + return nativeSetLocalDescription.apply(this, arguments); + } + // The remaining steps should technically happen when SLD comes off the + // RTCPeerConnection's operations chain (not ahead of going on it), but + // this is too difficult to shim. Instead, this shim only covers the + // common case where the operations chain is empty. This is imperfect, but + // should cover many cases. Rationale: Even if we can't reduce the glare + // window to zero on imperfect implementations, there's value in tapping + // into the perfect negotiation pattern that several browsers support. + desc = { + type: desc.type, + sdp: desc.sdp + }; + if (!desc.type) { + switch (this.signalingState) { + case 'stable': + case 'have-local-offer': + case 'have-remote-pranswer': + desc.type = 'offer'; + break; + default: + desc.type = 'answer'; + break; + } + } + if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') { + return nativeSetLocalDescription.apply(this, [desc]); + } + var func = desc.type === 'offer' ? this.createOffer : this.createAnswer; + return func.apply(this).then(function (d) { + return nativeSetLocalDescription.apply(_this, [d]); + }); + }; +} + +},{"./utils":11,"sdp":12}],7:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimAddTransceiver = shimAddTransceiver; +exports.shimCreateAnswer = shimCreateAnswer; +exports.shimCreateOffer = shimCreateOffer; +Object.defineProperty(exports, "shimGetDisplayMedia", { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimGetParameters = shimGetParameters; +Object.defineProperty(exports, "shimGetUserMedia", { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); +exports.shimOnTrack = shimOnTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.shimRTCDataChannel = shimRTCDataChannel; +exports.shimReceiverGetStats = shimReceiverGetStats; +exports.shimRemoveStream = shimRemoveStream; +exports.shimSenderGetStats = shimSenderGetStats; +var utils = _interopRequireWildcard(require("../utils")); +var _getusermedia = require("./getusermedia"); +var _getdisplaymedia = require("./getdisplaymedia"); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function shimOnTrack(window) { + if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { + receiver: this.receiver + }; + } + }); + } +} +function shimPeerConnection(window, browserDetails) { + if (_typeof(window) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { + return; // probably media.peerconnection.enabled=false in about:config + } + + if (!window.RTCPeerConnection && window.mozRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.mozRTCPeerConnection; + } + if (browserDetails.version < 53) { + // shim away need for obsolete RTCIceCandidate/RTCSessionDescription. + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } + var modernStatsTypes = { + inboundrtp: 'inbound-rtp', + outboundrtp: 'outbound-rtp', + candidatepair: 'candidate-pair', + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }; + var nativeGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + return nativeGetStats.apply(this, [selector || null]).then(function (stats) { + if (browserDetails.version < 53 && !onSucc) { + // Shim only promise getStats with spec-hyphens in type names + // Leave callback version alone; misc old uses of forEach before Map + try { + stats.forEach(function (stat) { + stat.type = modernStatsTypes[stat.type] || stat.type; + }); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + // Avoid TypeError: "type" is read-only, in old versions. 34-43ish + stats.forEach(function (stat, i) { + stats.set(i, Object.assign({}, stat, { + type: modernStatsTypes[stat.type] || stat.type + })); + }); + } + } + return stats; + }).then(onSucc, onErr); + }; +} +function shimSenderGetStats(window) { + if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) { + return; + } + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this = this; + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this; + }); + return senders; + }; + } + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map()); + }; +} +function shimReceiverGetStats(window) { + if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) { + return; + } + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this2 = this; + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this2; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + return this._pc.getStats(this.track); + }; +} +function shimRemoveStream(window) { + if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) { + return; + } + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + utils.deprecated('removeStream', 'removeTrack'); + this.getSenders().forEach(function (sender) { + if (sender.track && stream.getTracks().includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; +} +function shimRTCDataChannel(window) { + // rename DataChannel to RTCDataChannel (native fix in FF60): + // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851 + if (window.DataChannel && !window.RTCDataChannel) { + window.RTCDataChannel = window.DataChannel; + } +} +function shimAddTransceiver(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) { + return; + } + var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; + if (origAddTransceiver) { + window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { + this.setParametersPromises = []; + // WebIDL input coercion and validation + var sendEncodings = arguments[1] && arguments[1].sendEncodings; + if (sendEncodings === undefined) { + sendEncodings = []; + } + sendEncodings = _toConsumableArray(sendEncodings); + var shouldPerformCheck = sendEncodings.length > 0; + if (shouldPerformCheck) { + // If sendEncodings params are provided, validate grammar + sendEncodings.forEach(function (encodingParam) { + if ('rid' in encodingParam) { + var ridRegex = /^[a-z0-9]{0,16}$/i; + if (!ridRegex.test(encodingParam.rid)) { + throw new TypeError('Invalid RID value provided.'); + } + } + if ('scaleResolutionDownBy' in encodingParam) { + if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { + throw new RangeError('scale_resolution_down_by must be >= 1.0'); + } + } + if ('maxFramerate' in encodingParam) { + if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { + throw new RangeError('max_framerate must be >= 0.0'); + } + } + }); + } + var transceiver = origAddTransceiver.apply(this, arguments); + if (shouldPerformCheck) { + // Check if the init options were applied. If not we do this in an + // asynchronous way and save the promise reference in a global object. + // This is an ugly hack, but at the same time is way more robust than + // checking the sender parameters before and after the createOffer + // Also note that after the createoffer we are not 100% sure that + // the params were asynchronously applied so we might miss the + // opportunity to recreate offer. + var sender = transceiver.sender; + var params = sender.getParameters(); + if (!('encodings' in params) || + // Avoid being fooled by patched getParameters() below. + params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) { + params.encodings = sendEncodings; + sender.sendEncodings = sendEncodings; + this.setParametersPromises.push(sender.setParameters(params).then(function () { + delete sender.sendEncodings; + })["catch"](function () { + delete sender.sendEncodings; + })); + } + } + return transceiver; + }; + } +} +function shimGetParameters(window) { + if (!(_typeof(window) === 'object' && window.RTCRtpSender)) { + return; + } + var origGetParameters = window.RTCRtpSender.prototype.getParameters; + if (origGetParameters) { + window.RTCRtpSender.prototype.getParameters = function getParameters() { + var params = origGetParameters.apply(this, arguments); + if (!('encodings' in params)) { + params.encodings = [].concat(this.sendEncodings || [{}]); + } + return params; + }; + } +} +function shimCreateOffer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer() { + var _arguments2 = arguments, + _this4 = this; + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateOffer.apply(_this4, _arguments2); + })["finally"](function () { + _this4.setParametersPromises = []; + }); + } + return origCreateOffer.apply(this, arguments); + }; +} +function shimCreateAnswer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; + window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { + var _arguments3 = arguments, + _this5 = this; + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateAnswer.apply(_this5, _arguments3); + })["finally"](function () { + _this5.setParametersPromises = []; + }); + } + return origCreateAnswer.apply(this, arguments); + }; +} + +},{"../utils":11,"./getdisplaymedia":8,"./getusermedia":9}],8:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, preferredMediaSource) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + if (!(constraints && constraints.video)) { + var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined'); + err.name = 'NotFoundError'; + // from https://heycam.github.io/webidl/#idl-DOMException-error-names + err.code = 8; + return Promise.reject(err); + } + if (constraints.video === true) { + constraints.video = { + mediaSource: preferredMediaSource + }; + } else { + constraints.video.mediaSource = preferredMediaSource; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }; +} + +},{}],9:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetUserMedia = shimGetUserMedia; +var utils = _interopRequireWildcard(require("../utils")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + var MediaStreamTrack = window && window.MediaStreamTrack; + navigator.getUserMedia = function (constraints, onSuccess, onError) { + // Replace Firefox 44+'s deprecation warning with unprefixed version. + utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia'); + navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); + }; + if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (c) { + if (_typeof(c) === 'object' && _typeof(c.audio) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c.audio, 'autoGainControl', 'mozAutoGainControl'); + remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeGetUserMedia(c); + }; + if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) { + var nativeGetSettings = MediaStreamTrack.prototype.getSettings; + MediaStreamTrack.prototype.getSettings = function () { + var obj = nativeGetSettings.apply(this, arguments); + remap(obj, 'mozAutoGainControl', 'autoGainControl'); + remap(obj, 'mozNoiseSuppression', 'noiseSuppression'); + return obj; + }; + } + if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) { + var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints; + MediaStreamTrack.prototype.applyConstraints = function (c) { + if (this.kind === 'audio' && _typeof(c) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c, 'autoGainControl', 'mozAutoGainControl'); + remap(c, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeApplyConstraints.apply(this, [c]); + }; + } + } +} + +},{"../utils":11}],10:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimAudioContext = shimAudioContext; +exports.shimCallbacksAPI = shimCallbacksAPI; +exports.shimConstraints = shimConstraints; +exports.shimCreateOfferLegacy = shimCreateOfferLegacy; +exports.shimGetUserMedia = shimGetUserMedia; +exports.shimLocalStreamsAPI = shimLocalStreamsAPI; +exports.shimRTCIceServerUrls = shimRTCIceServerUrls; +exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; +exports.shimTrackEventTransceiver = shimTrackEventTransceiver; +var utils = _interopRequireWildcard(require("../utils")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function shimLocalStreamsAPI(window) { + if (_typeof(window) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + if (!this._localStreams) { + this._localStreams = []; + } + return this._localStreams; + }; + } + if (!('addStream' in window.RTCPeerConnection.prototype)) { + var _addTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this = this; + if (!this._localStreams) { + this._localStreams = []; + } + if (!this._localStreams.includes(stream)) { + this._localStreams.push(stream); + } + // Try to emulate Chrome's behaviour of adding in audio-video order. + // Safari orders by track id. + stream.getAudioTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + stream.getVideoTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + }; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track) { + var _this2 = this; + for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + streams[_key - 1] = arguments[_key]; + } + if (streams) { + streams.forEach(function (stream) { + if (!_this2._localStreams) { + _this2._localStreams = [stream]; + } else if (!_this2._localStreams.includes(stream)) { + _this2._localStreams.push(stream); + } + }); + } + return _addTrack.apply(this, arguments); + }; + } + if (!('removeStream' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + if (!this._localStreams) { + this._localStreams = []; + } + var index = this._localStreams.indexOf(stream); + if (index === -1) { + return; + } + this._localStreams.splice(index, 1); + var tracks = stream.getTracks(); + this.getSenders().forEach(function (sender) { + if (tracks.includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; + } +} +function shimRemoteStreamsAPI(window) { + if (_typeof(window) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() { + return this._remoteStreams ? this._remoteStreams : []; + }; + } + if (!('onaddstream' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', { + get: function get() { + return this._onaddstream; + }, + set: function set(f) { + var _this4 = this; + if (this._onaddstream) { + this.removeEventListener('addstream', this._onaddstream); + this.removeEventListener('track', this._onaddstreampoly); + } + this.addEventListener('addstream', this._onaddstream = f); + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!_this4._remoteStreams) { + _this4._remoteStreams = []; + } + if (_this4._remoteStreams.includes(stream)) { + return; + } + _this4._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + _this4.dispatchEvent(event); + }); + }); + } + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var pc = this; + if (!this._onaddstreampoly) { + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!pc._remoteStreams) { + pc._remoteStreams = []; + } + if (pc._remoteStreams.indexOf(stream) >= 0) { + return; + } + pc._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + pc.dispatchEvent(event); + }); + }); + } + return origSetRemoteDescription.apply(pc, arguments); + }; + } +} +function shimCallbacksAPI(window) { + if (_typeof(window) !== 'object' || !window.RTCPeerConnection) { + return; + } + var prototype = window.RTCPeerConnection.prototype; + var origCreateOffer = prototype.createOffer; + var origCreateAnswer = prototype.createAnswer; + var setLocalDescription = prototype.setLocalDescription; + var setRemoteDescription = prototype.setRemoteDescription; + var addIceCandidate = prototype.addIceCandidate; + prototype.createOffer = function createOffer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateOffer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.createAnswer = function createAnswer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateAnswer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + var withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setLocalDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setLocalDescription = withCallback; + withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setRemoteDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setRemoteDescription = withCallback; + withCallback = function withCallback(candidate, successCallback, failureCallback) { + var promise = addIceCandidate.apply(this, [candidate]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.addIceCandidate = withCallback; +} +function shimGetUserMedia(window) { + var navigator = window && window.navigator; + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + // shim not needed in Safari 12.1 + var mediaDevices = navigator.mediaDevices; + var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices); + navigator.mediaDevices.getUserMedia = function (constraints) { + return _getUserMedia(shimConstraints(constraints)); + }; + } + if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) { + navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb); + }.bind(navigator); + } +} +function shimConstraints(constraints) { + if (constraints && constraints.video !== undefined) { + return Object.assign({}, constraints, { + video: utils.compactObject(constraints.video) + }); + } + return constraints; +} +function shimRTCIceServerUrls(window) { + if (!window.RTCPeerConnection) { + return; + } + // migrate from non-spec RTCIceServer.url to RTCIceServer.urls + var OrigPeerConnection = window.RTCPeerConnection; + window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) { + if (pcConfig && pcConfig.iceServers) { + var newIceServers = []; + for (var i = 0; i < pcConfig.iceServers.length; i++) { + var server = pcConfig.iceServers[i]; + if (server.urls === undefined && server.url) { + utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls'); + server = JSON.parse(JSON.stringify(server)); + server.urls = server.url; + delete server.url; + newIceServers.push(server); + } else { + newIceServers.push(pcConfig.iceServers[i]); + } + } + pcConfig.iceServers = newIceServers; + } + return new OrigPeerConnection(pcConfig, pcConstraints); + }; + window.RTCPeerConnection.prototype = OrigPeerConnection.prototype; + // wrap static methods. Currently just generateCertificate. + if ('generateCertificate' in OrigPeerConnection) { + Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { + get: function get() { + return OrigPeerConnection.generateCertificate; + } + }); + } +} +function shimTrackEventTransceiver(window) { + // Add event.transceiver member over deprecated event.receiver + if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { + receiver: this.receiver + }; + } + }); + } +} +function shimCreateOfferLegacy(window) { + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) { + if (offerOptions) { + if (typeof offerOptions.offerToReceiveAudio !== 'undefined') { + // support bit values + offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio; + } + var audioTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'audio'; + }); + if (offerOptions.offerToReceiveAudio === false && audioTransceiver) { + if (audioTransceiver.direction === 'sendrecv') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('sendonly'); + } else { + audioTransceiver.direction = 'sendonly'; + } + } else if (audioTransceiver.direction === 'recvonly') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('inactive'); + } else { + audioTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) { + this.addTransceiver('audio', { + direction: 'recvonly' + }); + } + if (typeof offerOptions.offerToReceiveVideo !== 'undefined') { + // support bit values + offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo; + } + var videoTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'video'; + }); + if (offerOptions.offerToReceiveVideo === false && videoTransceiver) { + if (videoTransceiver.direction === 'sendrecv') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('sendonly'); + } else { + videoTransceiver.direction = 'sendonly'; + } + } else if (videoTransceiver.direction === 'recvonly') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('inactive'); + } else { + videoTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) { + this.addTransceiver('video', { + direction: 'recvonly' + }); + } + } + return origCreateOffer.apply(this, arguments); + }; +} +function shimAudioContext(window) { + if (_typeof(window) !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} + +},{"../utils":11}],11:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.compactObject = compactObject; +exports.deprecated = deprecated; +exports.detectBrowser = detectBrowser; +exports.disableLog = disableLog; +exports.disableWarnings = disableWarnings; +exports.extractVersion = extractVersion; +exports.filterStats = filterStats; +exports.log = log; +exports.walkStats = walkStats; +exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +var logDisabled_ = true; +var deprecationWarnings_ = true; + +/** + * Extract browser version out of the provided user agent string. + * + * @param {!string} uastring userAgent string. + * @param {!string} expr Regular expression used as match criteria. + * @param {!number} pos position in the version string to be returned. + * @return {!number} browser version. + */ +function extractVersion(uastring, expr, pos) { + var match = uastring.match(expr); + return match && match.length >= pos && parseInt(match[pos], 10); +} + +// Wraps the peerconnection event eventNameToWrap in a function +// which returns the modified event object (or false to prevent +// the event). +function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { + if (!window.RTCPeerConnection) { + return; + } + var proto = window.RTCPeerConnection.prototype; + var nativeAddEventListener = proto.addEventListener; + proto.addEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap) { + return nativeAddEventListener.apply(this, arguments); + } + var wrappedCallback = function wrappedCallback(e) { + var modifiedEvent = wrapper(e); + if (modifiedEvent) { + if (cb.handleEvent) { + cb.handleEvent(modifiedEvent); + } else { + cb(modifiedEvent); + } + } + }; + this._eventMap = this._eventMap || {}; + if (!this._eventMap[eventNameToWrap]) { + this._eventMap[eventNameToWrap] = new Map(); + } + this._eventMap[eventNameToWrap].set(cb, wrappedCallback); + return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]); + }; + var nativeRemoveEventListener = proto.removeEventListener; + proto.removeEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) { + return nativeRemoveEventListener.apply(this, arguments); + } + if (!this._eventMap[eventNameToWrap].has(cb)) { + return nativeRemoveEventListener.apply(this, arguments); + } + var unwrappedCb = this._eventMap[eventNameToWrap].get(cb); + this._eventMap[eventNameToWrap]["delete"](cb); + if (this._eventMap[eventNameToWrap].size === 0) { + delete this._eventMap[eventNameToWrap]; + } + if (Object.keys(this._eventMap).length === 0) { + delete this._eventMap; + } + return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]); + }; + Object.defineProperty(proto, 'on' + eventNameToWrap, { + get: function get() { + return this['_on' + eventNameToWrap]; + }, + set: function set(cb) { + if (this['_on' + eventNameToWrap]) { + this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]); + delete this['_on' + eventNameToWrap]; + } + if (cb) { + this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb); + } + }, + enumerable: true, + configurable: true + }); +} +function disableLog(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.'); + } + logDisabled_ = bool; + return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled'; +} + +/** + * Disable or enable deprecation warnings + * @param {!boolean} bool set to true to disable warnings. + */ +function disableWarnings(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.'); + } + deprecationWarnings_ = !bool; + return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled'); +} +function log() { + if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object') { + if (logDisabled_) { + return; + } + if (typeof console !== 'undefined' && typeof console.log === 'function') { + console.log.apply(console, arguments); + } + } +} + +/** + * Shows a deprecation warning suggesting the modern and spec-compatible API. + */ +function deprecated(oldMethod, newMethod) { + if (!deprecationWarnings_) { + return; + } + console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.'); +} + +/** + * Browser detector. + * + * @return {object} result containing browser and version + * properties. + */ +function detectBrowser(window) { + // Returned result object. + var result = { + browser: null, + version: null + }; + + // Fail early if it's not a browser + if (typeof window === 'undefined' || !window.navigator) { + result.browser = 'Not a browser.'; + return result; + } + var navigator = window.navigator; + if (navigator.mozGetUserMedia) { + // Firefox. + result.browser = 'firefox'; + result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1); + } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) { + // Chrome, Chromium, Webview, Opera. + // Version matches Chrome/WebRTC version. + // Chrome 74 removed webkitGetUserMedia on http as well so we need the + // more complicated fallback to webkitRTCPeerConnection. + result.browser = 'chrome'; + result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2); + } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { + // Safari. + result.browser = 'safari'; + result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1); + result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype; + } else { + // Default fallthrough: not supported. + result.browser = 'Not a supported browser.'; + return result; + } + return result; +} + +/** + * Checks if something is an object. + * + * @param {*} val The something you want to check. + * @return true if val is an object, false otherwise. + */ +function isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; +} + +/** + * Remove all empty objects and undefined values + * from a nested object -- an enhanced and vanilla version + * of Lodash's `compact`. + */ +function compactObject(data) { + if (!isObject(data)) { + return data; + } + return Object.keys(data).reduce(function (accumulator, key) { + var isObj = isObject(data[key]); + var value = isObj ? compactObject(data[key]) : data[key]; + var isEmptyObject = isObj && !Object.keys(value).length; + if (value === undefined || isEmptyObject) { + return accumulator; + } + return Object.assign(accumulator, _defineProperty({}, key, value)); + }, {}); +} + +/* iterates the stats graph recursively. */ +function walkStats(stats, base, resultSet) { + if (!base || resultSet.has(base.id)) { + return; + } + resultSet.set(base.id, base); + Object.keys(base).forEach(function (name) { + if (name.endsWith('Id')) { + walkStats(stats, stats.get(base[name]), resultSet); + } else if (name.endsWith('Ids')) { + base[name].forEach(function (id) { + walkStats(stats, stats.get(id), resultSet); + }); + } + }); +} + +/* filter getStats for a sender/receiver track. */ +function filterStats(result, track, outbound) { + var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; + var filteredResult = new Map(); + if (track === null) { + return filteredResult; + } + var trackStats = []; + result.forEach(function (value) { + if (value.type === 'track' && value.trackIdentifier === track.id) { + trackStats.push(value); + } + }); + trackStats.forEach(function (trackStat) { + result.forEach(function (stats) { + if (stats.type === streamStatsType && stats.trackId === trackStat.id) { + walkStats(result, stats, filteredResult); + } + }); + }); + return filteredResult; +} + +},{}],12:[function(require,module,exports){ +/* eslint-env node */ +'use strict'; + +// SDP helpers. + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var SDPUtils = {}; + +// Generate an alphanumeric identifier for cname or mids. +// TODO: use UUIDs instead? https://gist.github.com/jed/982883 +SDPUtils.generateIdentifier = function () { + return Math.random().toString(36).substring(2, 12); +}; + +// The RTCP CNAME used by all peerconnections from the same JS. +SDPUtils.localCName = SDPUtils.generateIdentifier(); + +// Splits SDP into lines, dealing with both CRLF and LF. +SDPUtils.splitLines = function (blob) { + return blob.trim().split('\n').map(function (line) { + return line.trim(); + }); +}; +// Splits SDP into sessionpart and mediasections. Ensures CRLF. +SDPUtils.splitSections = function (blob) { + var parts = blob.split('\nm='); + return parts.map(function (part, index) { + return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; + }); +}; + +// Returns the session description. +SDPUtils.getDescription = function (blob) { + var sections = SDPUtils.splitSections(blob); + return sections && sections[0]; +}; + +// Returns the individual media sections. +SDPUtils.getMediaSections = function (blob) { + var sections = SDPUtils.splitSections(blob); + sections.shift(); + return sections; +}; + +// Returns lines that start with a certain prefix. +SDPUtils.matchPrefix = function (blob, prefix) { + return SDPUtils.splitLines(blob).filter(function (line) { + return line.indexOf(prefix) === 0; + }); +}; + +// Parses an ICE candidate line. Sample input: +// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 +// rport 55996" +// Input can be prefixed with a=. +SDPUtils.parseCandidate = function (line) { + var parts = void 0; + // Parse both variants. + if (line.indexOf('a=candidate:') === 0) { + parts = line.substring(12).split(' '); + } else { + parts = line.substring(10).split(' '); + } + + var candidate = { + foundation: parts[0], + component: { 1: 'rtp', 2: 'rtcp' }[parts[1]] || parts[1], + protocol: parts[2].toLowerCase(), + priority: parseInt(parts[3], 10), + ip: parts[4], + address: parts[4], // address is an alias for ip. + port: parseInt(parts[5], 10), + // skip parts[6] == 'typ' + type: parts[7] + }; + + for (var i = 8; i < parts.length; i += 2) { + switch (parts[i]) { + case 'raddr': + candidate.relatedAddress = parts[i + 1]; + break; + case 'rport': + candidate.relatedPort = parseInt(parts[i + 1], 10); + break; + case 'tcptype': + candidate.tcpType = parts[i + 1]; + break; + case 'ufrag': + candidate.ufrag = parts[i + 1]; // for backward compatibility. + candidate.usernameFragment = parts[i + 1]; + break; + default: + // extension handling, in particular ufrag. Don't overwrite. + if (candidate[parts[i]] === undefined) { + candidate[parts[i]] = parts[i + 1]; + } + break; + } + } + return candidate; +}; + +// Translates a candidate object into SDP candidate attribute. +// This does not include the a= prefix! +SDPUtils.writeCandidate = function (candidate) { + var sdp = []; + sdp.push(candidate.foundation); + + var component = candidate.component; + if (component === 'rtp') { + sdp.push(1); + } else if (component === 'rtcp') { + sdp.push(2); + } else { + sdp.push(component); + } + sdp.push(candidate.protocol.toUpperCase()); + sdp.push(candidate.priority); + sdp.push(candidate.address || candidate.ip); + sdp.push(candidate.port); + + var type = candidate.type; + sdp.push('typ'); + sdp.push(type); + if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) { + sdp.push('raddr'); + sdp.push(candidate.relatedAddress); + sdp.push('rport'); + sdp.push(candidate.relatedPort); + } + if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { + sdp.push('tcptype'); + sdp.push(candidate.tcpType); + } + if (candidate.usernameFragment || candidate.ufrag) { + sdp.push('ufrag'); + sdp.push(candidate.usernameFragment || candidate.ufrag); + } + return 'candidate:' + sdp.join(' '); +}; + +// Parses an ice-options line, returns an array of option tags. +// Sample input: +// a=ice-options:foo bar +SDPUtils.parseIceOptions = function (line) { + return line.substring(14).split(' '); +}; + +// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input: +// a=rtpmap:111 opus/48000/2 +SDPUtils.parseRtpMap = function (line) { + var parts = line.substring(9).split(' '); + var parsed = { + payloadType: parseInt(parts.shift(), 10) // was: id + }; + + parts = parts[0].split('/'); + + parsed.name = parts[0]; + parsed.clockRate = parseInt(parts[1], 10); // was: clockrate + parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1; + // legacy alias, got renamed back to channels in ORTC. + parsed.numChannels = parsed.channels; + return parsed; +}; + +// Generates a rtpmap line from RTCRtpCodecCapability or +// RTCRtpCodecParameters. +SDPUtils.writeRtpMap = function (codec) { + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + var channels = codec.channels || codec.numChannels || 1; + return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\r\n'; +}; + +// Parses a extmap line (headerextension from RFC 5285). Sample input: +// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset +// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset +SDPUtils.parseExtmap = function (line) { + var parts = line.substring(9).split(' '); + return { + id: parseInt(parts[0], 10), + direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', + uri: parts[1], + attributes: parts.slice(2).join(' ') + }; +}; + +// Generates an extmap line from RTCRtpHeaderExtensionParameters or +// RTCRtpHeaderExtension. +SDPUtils.writeExtmap = function (headerExtension) { + return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\r\n'; +}; + +// Parses a fmtp line, returns dictionary. Sample input: +// a=fmtp:96 vbr=on;cng=on +// Also deals with vbr=on; cng=on +SDPUtils.parseFmtp = function (line) { + var parsed = {}; + var kv = void 0; + var parts = line.substring(line.indexOf(' ') + 1).split(';'); + for (var j = 0; j < parts.length; j++) { + kv = parts[j].trim().split('='); + parsed[kv[0].trim()] = kv[1]; + } + return parsed; +}; + +// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeFmtp = function (codec) { + var line = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.parameters && Object.keys(codec.parameters).length) { + var params = []; + Object.keys(codec.parameters).forEach(function (param) { + if (codec.parameters[param] !== undefined) { + params.push(param + '=' + codec.parameters[param]); + } else { + params.push(param); + } + }); + line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; + } + return line; +}; + +// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: +// a=rtcp-fb:98 nack rpsi +SDPUtils.parseRtcpFb = function (line) { + var parts = line.substring(line.indexOf(' ') + 1).split(' '); + return { + type: parts.shift(), + parameter: parts.join(' ') + }; +}; + +// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeRtcpFb = function (codec) { + var lines = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.rtcpFeedback && codec.rtcpFeedback.length) { + // FIXME: special handling for trr-int? + codec.rtcpFeedback.forEach(function (fb) { + lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\r\n'; + }); + } + return lines; +}; + +// Parses a RFC 5576 ssrc media attribute. Sample input: +// a=ssrc:3735928559 cname:something +SDPUtils.parseSsrcMedia = function (line) { + var sp = line.indexOf(' '); + var parts = { + ssrc: parseInt(line.substring(7, sp), 10) + }; + var colon = line.indexOf(':', sp); + if (colon > -1) { + parts.attribute = line.substring(sp + 1, colon); + parts.value = line.substring(colon + 1); + } else { + parts.attribute = line.substring(sp + 1); + } + return parts; +}; + +// Parse a ssrc-group line (see RFC 5576). Sample input: +// a=ssrc-group:semantics 12 34 +SDPUtils.parseSsrcGroup = function (line) { + var parts = line.substring(13).split(' '); + return { + semantics: parts.shift(), + ssrcs: parts.map(function (ssrc) { + return parseInt(ssrc, 10); + }) + }; +}; + +// Extracts the MID (RFC 5888) from a media section. +// Returns the MID or undefined if no mid line was found. +SDPUtils.getMid = function (mediaSection) { + var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; + if (mid) { + return mid.substring(6); + } +}; + +// Parses a fingerprint line for DTLS-SRTP. +SDPUtils.parseFingerprint = function (line) { + var parts = line.substring(14).split(' '); + return { + algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. + value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572. + }; +}; + +// Extracts DTLS parameters from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the fingerprint line as input. See also getIceParameters. +SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:'); + // Note: a=setup line is ignored since we use the 'auto' role in Edge. + return { + role: 'auto', + fingerprints: lines.map(SDPUtils.parseFingerprint) + }; +}; + +// Serializes DTLS parameters to SDP. +SDPUtils.writeDtlsParameters = function (params, setupType) { + var sdp = 'a=setup:' + setupType + '\r\n'; + params.fingerprints.forEach(function (fp) { + sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; + }); + return sdp; +}; + +// Parses a=crypto lines into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members +SDPUtils.parseCryptoLine = function (line) { + var parts = line.substring(9).split(' '); + return { + tag: parseInt(parts[0], 10), + cryptoSuite: parts[1], + keyParams: parts[2], + sessionParams: parts.slice(3) + }; +}; + +SDPUtils.writeCryptoLine = function (parameters) { + return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (_typeof(parameters.keyParams) === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\r\n'; +}; + +// Parses the crypto key parameters into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* +SDPUtils.parseCryptoKeyParams = function (keyParams) { + if (keyParams.indexOf('inline:') !== 0) { + return null; + } + var parts = keyParams.substring(7).split('|'); + return { + keyMethod: 'inline', + keySalt: parts[0], + lifeTime: parts[1], + mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, + mkiLength: parts[2] ? parts[2].split(':')[1] : undefined + }; +}; + +SDPUtils.writeCryptoKeyParams = function (keyParams) { + return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : ''); +}; + +// Extracts all SDES parameters. +SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:'); + return lines.map(SDPUtils.parseCryptoLine); +}; + +// Parses ICE information from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the ice-ufrag and ice-pwd lines as input. +SDPUtils.getIceParameters = function (mediaSection, sessionpart) { + var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0]; + var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0]; + if (!(ufrag && pwd)) { + return null; + } + return { + usernameFragment: ufrag.substring(12), + password: pwd.substring(10) + }; +}; + +// Serializes ICE parameters to SDP. +SDPUtils.writeIceParameters = function (params) { + var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + 'a=ice-pwd:' + params.password + '\r\n'; + if (params.iceLite) { + sdp += 'a=ice-lite\r\n'; + } + return sdp; +}; + +// Parses the SDP media section and returns RTCRtpParameters. +SDPUtils.parseRtpParameters = function (mediaSection) { + var description = { + codecs: [], + headerExtensions: [], + fecMechanisms: [], + rtcp: [] + }; + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + description.profile = mline[2]; + for (var i = 3; i < mline.length; i++) { + // find all codecs from mline[3..] + var pt = mline[i]; + var rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0]; + if (rtpmapline) { + var codec = SDPUtils.parseRtpMap(rtpmapline); + var fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' '); + // Only the first a=fmtp: is considered. + codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; + codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb); + description.codecs.push(codec); + // parse FEC mechanisms from rtpmap lines. + switch (codec.name.toUpperCase()) { + case 'RED': + case 'ULPFEC': + description.fecMechanisms.push(codec.name.toUpperCase()); + break; + default: + // only RED and ULPFEC are recognized as FEC mechanisms. + break; + } + } + } + SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function (line) { + description.headerExtensions.push(SDPUtils.parseExtmap(line)); + }); + var wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb); + description.codecs.forEach(function (codec) { + wildcardRtcpFb.forEach(function (fb) { + var duplicate = codec.rtcpFeedback.find(function (existingFeedback) { + return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter; + }); + if (!duplicate) { + codec.rtcpFeedback.push(fb); + } + }); + }); + // FIXME: parse rtcp. + return description; +}; + +// Generates parts of the SDP media section describing the capabilities / +// parameters. +SDPUtils.writeRtpDescription = function (kind, caps) { + var sdp = ''; + + // Build the mline. + sdp += 'm=' + kind + ' '; + sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. + sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' '; + sdp += caps.codecs.map(function (codec) { + if (codec.preferredPayloadType !== undefined) { + return codec.preferredPayloadType; + } + return codec.payloadType; + }).join(' ') + '\r\n'; + + sdp += 'c=IN IP4 0.0.0.0\r\n'; + sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; + + // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. + caps.codecs.forEach(function (codec) { + sdp += SDPUtils.writeRtpMap(codec); + sdp += SDPUtils.writeFmtp(codec); + sdp += SDPUtils.writeRtcpFb(codec); + }); + var maxptime = 0; + caps.codecs.forEach(function (codec) { + if (codec.maxptime > maxptime) { + maxptime = codec.maxptime; + } + }); + if (maxptime > 0) { + sdp += 'a=maxptime:' + maxptime + '\r\n'; + } + + if (caps.headerExtensions) { + caps.headerExtensions.forEach(function (extension) { + sdp += SDPUtils.writeExtmap(extension); + }); + } + // FIXME: write fecMechanisms. + return sdp; +}; + +// Parses the SDP media section and returns an array of +// RTCRtpEncodingParameters. +SDPUtils.parseRtpEncodingParameters = function (mediaSection) { + var encodingParameters = []; + var description = SDPUtils.parseRtpParameters(mediaSection); + var hasRed = description.fecMechanisms.indexOf('RED') !== -1; + var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; + + // filter a=ssrc:... cname:, ignore PlanB-msid + var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (parts) { + return parts.attribute === 'cname'; + }); + var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; + var secondarySsrc = void 0; + + var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(function (line) { + var parts = line.substring(17).split(' '); + return parts.map(function (part) { + return parseInt(part, 10); + }); + }); + if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { + secondarySsrc = flows[0][1]; + } + + description.codecs.forEach(function (codec) { + if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { + var encParam = { + ssrc: primarySsrc, + codecPayloadType: parseInt(codec.parameters.apt, 10) + }; + if (primarySsrc && secondarySsrc) { + encParam.rtx = { ssrc: secondarySsrc }; + } + encodingParameters.push(encParam); + if (hasRed) { + encParam = JSON.parse(JSON.stringify(encParam)); + encParam.fec = { + ssrc: primarySsrc, + mechanism: hasUlpfec ? 'red+ulpfec' : 'red' + }; + encodingParameters.push(encParam); + } + } + }); + if (encodingParameters.length === 0 && primarySsrc) { + encodingParameters.push({ + ssrc: primarySsrc + }); + } + + // we support both b=AS and b=TIAS but interpret AS as TIAS. + var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); + if (bandwidth.length) { + if (bandwidth[0].indexOf('b=TIAS:') === 0) { + bandwidth = parseInt(bandwidth[0].substring(7), 10); + } else if (bandwidth[0].indexOf('b=AS:') === 0) { + // use formula from JSEP to convert b=AS to TIAS value. + bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8; + } else { + bandwidth = undefined; + } + encodingParameters.forEach(function (params) { + params.maxBitrate = bandwidth; + }); + } + return encodingParameters; +}; + +// parses http://draft.ortc.org/#rtcrtcpparameters* +SDPUtils.parseRtcpParameters = function (mediaSection) { + var rtcpParameters = {}; + + // Gets the first SSRC. Note that with RTX there might be multiple + // SSRCs. + var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (obj) { + return obj.attribute === 'cname'; + })[0]; + if (remoteSsrc) { + rtcpParameters.cname = remoteSsrc.value; + rtcpParameters.ssrc = remoteSsrc.ssrc; + } + + // Edge uses the compound attribute instead of reducedSize + // compound is !reducedSize + var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); + rtcpParameters.reducedSize = rsize.length > 0; + rtcpParameters.compound = rsize.length === 0; + + // parses the rtcp-mux attrіbute. + // Note that Edge does not support unmuxed RTCP. + var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); + rtcpParameters.mux = mux.length > 0; + + return rtcpParameters; +}; + +SDPUtils.writeRtcpParameters = function (rtcpParameters) { + var sdp = ''; + if (rtcpParameters.reducedSize) { + sdp += 'a=rtcp-rsize\r\n'; + } + if (rtcpParameters.mux) { + sdp += 'a=rtcp-mux\r\n'; + } + if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) { + sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\r\n'; + } + return sdp; +}; + +// parses either a=msid: or a=ssrc:... msid lines and returns +// the id of the MediaStream and MediaStreamTrack. +SDPUtils.parseMsid = function (mediaSection) { + var parts = void 0; + var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); + if (spec.length === 1) { + parts = spec[0].substring(7).split(' '); + return { stream: parts[0], track: parts[1] }; + } + var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (msidParts) { + return msidParts.attribute === 'msid'; + }); + if (planB.length > 0) { + parts = planB[0].value.split(' '); + return { stream: parts[0], track: parts[1] }; + } +}; + +// SCTP +// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back +// to draft-ietf-mmusic-sctp-sdp-05 +SDPUtils.parseSctpDescription = function (mediaSection) { + var mline = SDPUtils.parseMLine(mediaSection); + var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); + var maxMessageSize = void 0; + if (maxSizeLine.length > 0) { + maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10); + } + if (isNaN(maxMessageSize)) { + maxMessageSize = 65536; + } + var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); + if (sctpPort.length > 0) { + return { + port: parseInt(sctpPort[0].substring(12), 10), + protocol: mline.fmt, + maxMessageSize: maxMessageSize + }; + } + var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); + if (sctpMapLines.length > 0) { + var parts = sctpMapLines[0].substring(10).split(' '); + return { + port: parseInt(parts[0], 10), + protocol: parts[1], + maxMessageSize: maxMessageSize + }; + } +}; + +// SCTP +// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers +// support by now receiving in this format, unless we originally parsed +// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line +// protocol of DTLS/SCTP -- without UDP/ or TCP/) +SDPUtils.writeSctpDescription = function (media, sctp) { + var output = []; + if (media.protocol !== 'DTLS/SCTP') { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctp-port:' + sctp.port + '\r\n']; + } else { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n']; + } + if (sctp.maxMessageSize !== undefined) { + output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); + } + return output.join(''); +}; + +// Generate a session ID for SDP. +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 +// recommends using a cryptographically random +ve 64-bit value +// but right now this should be acceptable and within the right range +SDPUtils.generateSessionId = function () { + return Math.random().toString().substr(2, 22); +}; + +// Write boiler plate for start of SDP +// sessId argument is optional - if not supplied it will +// be generated randomly +// sessVersion is optional and defaults to 2 +// sessUser is optional and defaults to 'thisisadapterortc' +SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) { + var sessionId = void 0; + var version = sessVer !== undefined ? sessVer : 2; + if (sessId) { + sessionId = sessId; + } else { + sessionId = SDPUtils.generateSessionId(); + } + var user = sessUser || 'thisisadapterortc'; + // FIXME: sess-id should be an NTP timestamp. + return 'v=0\r\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\r\n' + 's=-\r\n' + 't=0 0\r\n'; +}; + +// Gets the direction from the mediaSection or the sessionpart. +SDPUtils.getDirection = function (mediaSection, sessionpart) { + // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. + var lines = SDPUtils.splitLines(mediaSection); + for (var i = 0; i < lines.length; i++) { + switch (lines[i]) { + case 'a=sendrecv': + case 'a=sendonly': + case 'a=recvonly': + case 'a=inactive': + return lines[i].substring(2); + default: + // FIXME: What should happen here? + } + } + if (sessionpart) { + return SDPUtils.getDirection(sessionpart); + } + return 'sendrecv'; +}; + +SDPUtils.getKind = function (mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + return mline[0].substring(2); +}; + +SDPUtils.isRejected = function (mediaSection) { + return mediaSection.split(' ', 2)[1] === '0'; +}; + +SDPUtils.parseMLine = function (mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var parts = lines[0].substring(2).split(' '); + return { + kind: parts[0], + port: parseInt(parts[1], 10), + protocol: parts[2], + fmt: parts.slice(3).join(' ') + }; +}; + +SDPUtils.parseOLine = function (mediaSection) { + var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; + var parts = line.substring(2).split(' '); + return { + username: parts[0], + sessionId: parts[1], + sessionVersion: parseInt(parts[2], 10), + netType: parts[3], + addressType: parts[4], + address: parts[5] + }; +}; + +// a very naive interpretation of a valid SDP. +SDPUtils.isValidSDP = function (blob) { + if (typeof blob !== 'string' || blob.length === 0) { + return false; + } + var lines = SDPUtils.splitLines(blob); + for (var i = 0; i < lines.length; i++) { + if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { + return false; + } + // TODO: check the modifier a bit more. + } + return true; +}; + +// Expose public methods. +if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') { + module.exports = SDPUtils; +} +},{}]},{},[1])(1) +}); diff --git a/static/lib/adapter/adapter.js b/static/lib/adapter/adapter.js new file mode 100644 index 0000000..0ee2b96 --- /dev/null +++ b/static/lib/adapter/adapter.js @@ -0,0 +1,3423 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.adapter = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + window = _ref.window; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + shimChrome: true, + shimFirefox: true, + shimSafari: true + }; + + // Utils. + var logging = utils.log; + var browserDetails = utils.detectBrowser(window); + + var adapter = { + browserDetails: browserDetails, + commonShim: commonShim, + extractVersion: utils.extractVersion, + disableLog: utils.disableLog, + disableWarnings: utils.disableWarnings, + // Expose sdp as a convenience. For production apps include directly. + sdp: sdp + }; + + // Shim browser if found. + switch (browserDetails.browser) { + case 'chrome': + if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) { + logging('Chrome shim is not included in this adapter release.'); + return adapter; + } + if (browserDetails.version === null) { + logging('Chrome shim can not determine version, not shimming.'); + return adapter; + } + logging('adapter.js shimming chrome.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = chromeShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + chromeShim.shimGetUserMedia(window, browserDetails); + chromeShim.shimMediaStream(window, browserDetails); + chromeShim.shimPeerConnection(window, browserDetails); + chromeShim.shimOnTrack(window, browserDetails); + chromeShim.shimAddTrackRemoveTrack(window, browserDetails); + chromeShim.shimGetSendersWithDtmf(window, browserDetails); + chromeShim.shimGetStats(window, browserDetails); + chromeShim.shimSenderReceiverGetStats(window, browserDetails); + chromeShim.fixNegotiationNeeded(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + case 'firefox': + if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) { + logging('Firefox shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming firefox.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = firefoxShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + firefoxShim.shimGetUserMedia(window, browserDetails); + firefoxShim.shimPeerConnection(window, browserDetails); + firefoxShim.shimOnTrack(window, browserDetails); + firefoxShim.shimRemoveStream(window, browserDetails); + firefoxShim.shimSenderGetStats(window, browserDetails); + firefoxShim.shimReceiverGetStats(window, browserDetails); + firefoxShim.shimRTCDataChannel(window, browserDetails); + firefoxShim.shimAddTransceiver(window, browserDetails); + firefoxShim.shimGetParameters(window, browserDetails); + firefoxShim.shimCreateOffer(window, browserDetails); + firefoxShim.shimCreateAnswer(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + break; + case 'safari': + if (!safariShim || !options.shimSafari) { + logging('Safari shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming safari.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = safariShim; + + // Must be called before shimCallbackAPI. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + safariShim.shimRTCIceServerUrls(window, browserDetails); + safariShim.shimCreateOfferLegacy(window, browserDetails); + safariShim.shimCallbacksAPI(window, browserDetails); + safariShim.shimLocalStreamsAPI(window, browserDetails); + safariShim.shimRemoteStreamsAPI(window, browserDetails); + safariShim.shimTrackEventTransceiver(window, browserDetails); + safariShim.shimGetUserMedia(window, browserDetails); + safariShim.shimAudioContext(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + default: + logging('Unsupported browser!'); + break; + } + + return adapter; +} + +// Browser shims. + +},{"./chrome/chrome_shim":3,"./common_shim":6,"./firefox/firefox_shim":7,"./safari/safari_shim":10,"./utils":11,"sdp":12}],3:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimMediaStream = shimMediaStream; +exports.shimOnTrack = shimOnTrack; +exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; +exports.shimGetStats = shimGetStats; +exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; +exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; +exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.fixNegotiationNeeded = fixNegotiationNeeded; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimMediaStream(window) { + window.MediaStream = window.MediaStream || window.webkitMediaStream; +} + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { + get: function get() { + return this._ontrack; + }, + set: function set(f) { + if (this._ontrack) { + this.removeEventListener('track', this._ontrack); + } + this.addEventListener('track', this._ontrack = f); + }, + + enumerable: true, + configurable: true + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var _this = this; + + if (!this._ontrackpoly) { + this._ontrackpoly = function (e) { + // onaddstream does not fire when a track is added to an existing + // stream. But stream.onaddtrack is implemented so we use that. + e.stream.addEventListener('addtrack', function (te) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === te.track.id; + }); + } else { + receiver = { track: te.track }; + } + + var event = new Event('track'); + event.track = te.track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + e.stream.getTracks().forEach(function (track) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === track.id; + }); + } else { + receiver = { track: track }; + } + var event = new Event('track'); + event.track = track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + }; + this.addEventListener('addstream', this._ontrackpoly); + } + return origSetRemoteDescription.apply(this, arguments); + }; + } else { + // even if RTCRtpTransceiver is in window, it is only used and + // emitted in unified-plan. Unfortunately this means we need + // to unconditionally wrap the event. + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + if (!e.transceiver) { + Object.defineProperty(e, 'transceiver', { value: { receiver: e.receiver } }); + } + return e; + }); + } +} + +function shimGetSendersWithDtmf(window) { + // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack. + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { + var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) { + return { + track: track, + get dtmf() { + if (this._dtmf === undefined) { + if (track.kind === 'audio') { + this._dtmf = pc.createDTMFSender(track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + }, + _pc: pc + }; + }; + + // augment addTrack when getSenders is not available. + if (!window.RTCPeerConnection.prototype.getSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + this._senders = this._senders || []; + return this._senders.slice(); // return a copy of the internal state. + }; + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var sender = origAddTrack.apply(this, arguments); + if (!sender) { + sender = shimSenderWithDtmf(this, track); + this._senders.push(sender); + } + return sender; + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + origRemoveTrack.apply(this, arguments); + var idx = this._senders.indexOf(sender); + if (idx !== -1) { + this._senders.splice(idx, 1); + } + }; + } + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this2 = this; + + this._senders = this._senders || []; + origAddStream.apply(this, [stream]); + stream.getTracks().forEach(function (track) { + _this2._senders.push(shimSenderWithDtmf(_this2, track)); + }); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + this._senders = this._senders || []; + origRemoveStream.apply(this, [stream]); + + stream.getTracks().forEach(function (track) { + var sender = _this3._senders.find(function (s) { + return s.track === track; + }); + if (sender) { + // remove sender + _this3._senders.splice(_this3._senders.indexOf(sender), 1); + } + }); + }; + } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this4 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this4; + }); + return senders; + }; + + Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { + get: function get() { + if (this._dtmf === undefined) { + if (this.track.kind === 'audio') { + this._dtmf = this._pc.createDTMFSender(this.track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + } + }); + } +} + +function shimGetStats(window) { + if (!window.RTCPeerConnection) { + return; + } + + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _this5 = this; + + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + // If selector is a function then we are in the old style stats so just + // pass back the original getStats format to avoid breaking old users. + + + if (arguments.length > 0 && typeof selector === 'function') { + return origGetStats.apply(this, arguments); + } + + // When spec-style getStats is supported, return those when called with + // either no arguments or the selector argument is null. + if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) { + return origGetStats.apply(this, []); + } + + var fixChromeStats_ = function fixChromeStats_(response) { + var standardReport = {}; + var reports = response.result(); + reports.forEach(function (report) { + var standardStats = { + id: report.id, + timestamp: report.timestamp, + type: { + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }[report.type] || report.type + }; + report.names().forEach(function (name) { + standardStats[name] = report.stat(name); + }); + standardReport[standardStats.id] = standardStats; + }); + + return standardReport; + }; + + // shim getStats with maplike support + var makeMapStats = function makeMapStats(stats) { + return new Map(Object.keys(stats).map(function (key) { + return [key, stats[key]]; + })); + }; + + if (arguments.length >= 2) { + var successCallbackWrapper_ = function successCallbackWrapper_(response) { + onSucc(makeMapStats(fixChromeStats_(response))); + }; + + return origGetStats.apply(this, [successCallbackWrapper_, selector]); + } + + // promise-support + return new Promise(function (resolve, reject) { + origGetStats.apply(_this5, [function (response) { + resolve(makeMapStats(fixChromeStats_(response))); + }, reject]); + }).then(onSucc, onErr); + }; +} + +function shimSenderReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { + return; + } + + // shim sender stats. + if (!('getStats' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this6 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this6; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + var sender = this; + return this._pc.getStats().then(function (result) { + return ( + /* Note: this will include stats of all senders that + * send a track with the same id as sender.track as + * it is not possible to identify the RTCRtpSender. + */ + utils.filterStats(result, sender.track, true) + ); + }); + }; + } + + // shim receiver stats. + if (!('getStats' in window.RTCRtpReceiver.prototype)) { + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this7 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this7; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + var receiver = this; + return this._pc.getStats().then(function (result) { + return utils.filterStats(result, receiver.track, false); + }); + }; + } + + if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) { + return; + } + + // shim RTCPeerConnection.getStats(track). + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) { + var track = arguments[0]; + var sender = void 0; + var receiver = void 0; + var err = void 0; + this.getSenders().forEach(function (s) { + if (s.track === track) { + if (sender) { + err = true; + } else { + sender = s; + } + } + }); + this.getReceivers().forEach(function (r) { + if (r.track === track) { + if (receiver) { + err = true; + } else { + receiver = r; + } + } + return r.track === track; + }); + if (err || sender && receiver) { + return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError')); + } else if (sender) { + return sender.getStats(); + } else if (receiver) { + return receiver.getStats(); + } + return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError')); + } + return origGetStats.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrackWithNative(window) { + // shim addTrack/removeTrack with native variants in order to make + // the interactions with legacy getLocalStreams behave as in other browsers. + // Keeps a mapping stream.id => [stream, rtpsenders...] + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this8 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + return Object.keys(this._shimmedLocalStreams).map(function (streamId) { + return _this8._shimmedLocalStreams[streamId][0]; + }); + }; + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + if (!stream) { + return origAddTrack.apply(this, arguments); + } + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + var sender = origAddTrack.apply(this, arguments); + if (!this._shimmedLocalStreams[stream.id]) { + this._shimmedLocalStreams[stream.id] = [stream, sender]; + } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) { + this._shimmedLocalStreams[stream.id].push(sender); + } + return sender; + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this9 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this9.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + var existingSenders = this.getSenders(); + origAddStream.apply(this, arguments); + var newSenders = this.getSenders().filter(function (newSender) { + return existingSenders.indexOf(newSender) === -1; + }); + this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + delete this._shimmedLocalStreams[stream.id]; + return origRemoveStream.apply(this, arguments); + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this10 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + if (sender) { + Object.keys(this._shimmedLocalStreams).forEach(function (streamId) { + var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender); + if (idx !== -1) { + _this10._shimmedLocalStreams[streamId].splice(idx, 1); + } + if (_this10._shimmedLocalStreams[streamId].length === 1) { + delete _this10._shimmedLocalStreams[streamId]; + } + }); + } + return origRemoveTrack.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrack(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + // shim addTrack and removeTrack. + if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) { + return shimAddTrackRemoveTrackWithNative(window); + } + + // also shim pc.getLocalStreams when addTrack is shimmed + // to return the original streams. + var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams; + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this11 = this; + + var nativeStreams = origGetLocalStreams.apply(this); + this._reverseStreams = this._reverseStreams || {}; + return nativeStreams.map(function (stream) { + return _this11._reverseStreams[stream.id]; + }); + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this12 = this; + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this12.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + // Add identity mapping for consistency with addTrack. + // Unless this is being used with a stream from addTrack. + if (!this._reverseStreams[stream.id]) { + var newStream = new window.MediaStream(stream.getTracks()); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + stream = newStream; + } + origAddStream.apply(this, [stream]); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + origRemoveStream.apply(this, [this._streams[stream.id] || stream]); + delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id]; + delete this._streams[stream.id]; + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var _this13 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + var streams = [].slice.call(arguments, 1); + if (streams.length !== 1 || !streams[0].getTracks().find(function (t) { + return t === track; + })) { + // this is not fully correct but all we can manage without + // [[associated MediaStreams]] internal slot. + throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError'); + } + + var alreadyExists = this.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + var oldStream = this._streams[stream.id]; + if (oldStream) { + // this is using odd Chrome behaviour, use with caution: + // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815 + // Note: we rely on the high-level addTrack/dtmf shim to + // create the sender with a dtmf sender. + oldStream.addTrack(track); + + // Trigger ONN async. + Promise.resolve().then(function () { + _this13.dispatchEvent(new Event('negotiationneeded')); + }); + } else { + var newStream = new window.MediaStream([track]); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + this.addStream(newStream); + } + return this.getSenders().find(function (s) { + return s.track === track; + }); + }; + + // replace the internal stream id with the external one and + // vice versa. + function replaceInternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + function replaceExternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + ['createOffer', 'createAnswer'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + var _this14 = this; + + var args = arguments; + var isLegacyCall = arguments.length && typeof arguments[0] === 'function'; + if (isLegacyCall) { + return nativeMethod.apply(this, [function (description) { + var desc = replaceInternalStreamId(_this14, description); + args[0].apply(null, [desc]); + }, function (err) { + if (args[1]) { + args[1].apply(null, err); + } + }, arguments[2]]); + } + return nativeMethod.apply(this, arguments).then(function (description) { + return replaceInternalStreamId(_this14, description); + }); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + + var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + if (!arguments.length || !arguments[0].type) { + return origSetLocalDescription.apply(this, arguments); + } + arguments[0] = replaceExternalStreamId(this, arguments[0]); + return origSetLocalDescription.apply(this, arguments); + }; + + // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier + + var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription'); + Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', { + get: function get() { + var description = origLocalDescription.get.apply(this); + if (description.type === '') { + return description; + } + return replaceInternalStreamId(this, description); + } + }); + + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this15 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + // We can not yet check for sender instanceof RTCRtpSender + // since we shim RTPSender. So we check if sender._pc is set. + if (!sender._pc) { + throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError'); + } + var isLocal = sender._pc === this; + if (!isLocal) { + throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError'); + } + + // Search for the native stream the senders track belongs to. + this._streams = this._streams || {}; + var stream = void 0; + Object.keys(this._streams).forEach(function (streamid) { + var hasTrack = _this15._streams[streamid].getTracks().find(function (track) { + return sender.track === track; + }); + if (hasTrack) { + stream = _this15._streams[streamid]; + } + }); + + if (stream) { + if (stream.getTracks().length === 1) { + // if this is the last track of the stream, remove the stream. This + // takes care of any shimmed _senders. + this.removeStream(this._reverseStreams[stream.id]); + } else { + // relying on the same odd chrome behaviour as above. + stream.removeTrack(sender.track); + } + this.dispatchEvent(new Event('negotiationneeded')); + } + }; +} + +function shimPeerConnection(window, browserDetails) { + if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.webkitRTCPeerConnection; + } + if (!window.RTCPeerConnection) { + return; + } + + // shim implicit creation of RTCSessionDescription/RTCIceCandidate + if (browserDetails.version < 53) { + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } +} + +// Attempt to fix ONN in plan-b mode. +function fixNegotiationNeeded(window, browserDetails) { + utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) { + var pc = e.target; + if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') { + if (pc.signalingState !== 'stable') { + return; + } + } + return e; + }); +} + +},{"../utils.js":11,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, getSourceId) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + // getSourceId is a function that returns a promise resolving with + // the sourceId of the screen/window/tab to be shared. + if (typeof getSourceId !== 'function') { + console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function'); + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + return getSourceId(constraints).then(function (sourceId) { + var widthSpecified = constraints.video && constraints.video.width; + var heightSpecified = constraints.video && constraints.video.height; + var frameRateSpecified = constraints.video && constraints.video.frameRate; + constraints.video = { + mandatory: { + chromeMediaSource: 'desktop', + chromeMediaSourceId: sourceId, + maxFrameRate: frameRateSpecified || 3 + } + }; + if (widthSpecified) { + constraints.video.mandatory.maxWidth = widthSpecified; + } + if (heightSpecified) { + constraints.video.mandatory.maxHeight = heightSpecified; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }); + }; +} + +},{}],5:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var logging = utils.log; + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + + if (!navigator.mediaDevices) { + return; + } + + var constraintsToChrome_ = function constraintsToChrome_(c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) { + return c; + } + var cc = {}; + Object.keys(c).forEach(function (key) { + if (key === 'require' || key === 'advanced' || key === 'mediaSource') { + return; + } + var r = _typeof(c[key]) === 'object' ? c[key] : { ideal: c[key] }; + if (r.exact !== undefined && typeof r.exact === 'number') { + r.min = r.max = r.exact; + } + var oldname_ = function oldname_(prefix, name) { + if (prefix) { + return prefix + name.charAt(0).toUpperCase() + name.slice(1); + } + return name === 'deviceId' ? 'sourceId' : name; + }; + if (r.ideal !== undefined) { + cc.optional = cc.optional || []; + var oc = {}; + if (typeof r.ideal === 'number') { + oc[oldname_('min', key)] = r.ideal; + cc.optional.push(oc); + oc = {}; + oc[oldname_('max', key)] = r.ideal; + cc.optional.push(oc); + } else { + oc[oldname_('', key)] = r.ideal; + cc.optional.push(oc); + } + } + if (r.exact !== undefined && typeof r.exact !== 'number') { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_('', key)] = r.exact; + } else { + ['min', 'max'].forEach(function (mix) { + if (r[mix] !== undefined) { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_(mix, key)] = r[mix]; + } + }); + } + }); + if (c.advanced) { + cc.optional = (cc.optional || []).concat(c.advanced); + } + return cc; + }; + + var shimConstraints_ = function shimConstraints_(constraints, func) { + if (browserDetails.version >= 61) { + return func(constraints); + } + constraints = JSON.parse(JSON.stringify(constraints)); + if (constraints && _typeof(constraints.audio) === 'object') { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + constraints = JSON.parse(JSON.stringify(constraints)); + remap(constraints.audio, 'autoGainControl', 'googAutoGainControl'); + remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression'); + constraints.audio = constraintsToChrome_(constraints.audio); + } + if (constraints && _typeof(constraints.video) === 'object') { + // Shim facingMode for mobile & surface pro. + var face = constraints.video.facingMode; + face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face }); + var getSupportedFacingModeLies = browserDetails.version < 66; + + if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) { + delete constraints.video.facingMode; + var matches = void 0; + if (face.exact === 'environment' || face.ideal === 'environment') { + matches = ['back', 'rear']; + } else if (face.exact === 'user' || face.ideal === 'user') { + matches = ['front']; + } + if (matches) { + // Look for matches in label, or use last cam for back (typical). + return navigator.mediaDevices.enumerateDevices().then(function (devices) { + devices = devices.filter(function (d) { + return d.kind === 'videoinput'; + }); + var dev = devices.find(function (d) { + return matches.some(function (match) { + return d.label.toLowerCase().includes(match); + }); + }); + if (!dev && devices.length && matches.includes('back')) { + dev = devices[devices.length - 1]; // more likely the back cam + } + if (dev) { + constraints.video.deviceId = face.exact ? { exact: dev.deviceId } : { ideal: dev.deviceId }; + } + constraints.video = constraintsToChrome_(constraints.video); + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }); + } + } + constraints.video = constraintsToChrome_(constraints.video); + } + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }; + + var shimError_ = function shimError_(e) { + if (browserDetails.version >= 64) { + return e; + } + return { + name: { + PermissionDeniedError: 'NotAllowedError', + PermissionDismissedError: 'NotAllowedError', + InvalidStateError: 'NotAllowedError', + DevicesNotFoundError: 'NotFoundError', + ConstraintNotSatisfiedError: 'OverconstrainedError', + TrackStartError: 'NotReadableError', + MediaDeviceFailedDueToShutdown: 'NotAllowedError', + MediaDeviceKillSwitchOn: 'NotAllowedError', + TabCaptureError: 'AbortError', + ScreenCaptureError: 'AbortError', + DeviceCaptureError: 'AbortError' + }[e.name] || e.name, + message: e.message, + constraint: e.constraint || e.constraintName, + toString: function toString() { + return this.name + (this.message && ': ') + this.message; + } + }; + }; + + var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) { + shimConstraints_(constraints, function (c) { + navigator.webkitGetUserMedia(c, onSuccess, function (e) { + if (onError) { + onError(shimError_(e)); + } + }); + }); + }; + navigator.getUserMedia = getUserMedia_.bind(navigator); + + // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia + // function which returns a Promise, it does not accept spec-style + // constraints. + if (navigator.mediaDevices.getUserMedia) { + var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (cs) { + return shimConstraints_(cs, function (c) { + return origGetUserMedia(c).then(function (stream) { + if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) { + stream.getTracks().forEach(function (track) { + track.stop(); + }); + throw new DOMException('', 'NotFoundError'); + } + return stream; + }, function (e) { + return Promise.reject(shimError_(e)); + }); + }); + }; + } +} + +},{"../utils.js":11}],6:[function(require,module,exports){ +/* + * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.shimMaxMessageSize = shimMaxMessageSize; +exports.shimSendThrowTypeError = shimSendThrowTypeError; +exports.shimConnectionState = shimConnectionState; +exports.removeExtmapAllowMixed = removeExtmapAllowMixed; +exports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty; + +var _sdp = require('sdp'); + +var _sdp2 = _interopRequireDefault(_sdp); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function shimRTCIceCandidate(window) { + // foundation is arbitrarily chosen as an indicator for full support for + // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface + if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) { + return; + } + + var NativeRTCIceCandidate = window.RTCIceCandidate; + window.RTCIceCandidate = function RTCIceCandidate(args) { + // Remove the a= which shouldn't be part of the candidate string. + if ((typeof args === 'undefined' ? 'undefined' : _typeof(args)) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) { + args = JSON.parse(JSON.stringify(args)); + args.candidate = args.candidate.substr(2); + } + + if (args.candidate && args.candidate.length) { + // Augment the native candidate with the parsed fields. + var nativeCandidate = new NativeRTCIceCandidate(args); + var parsedCandidate = _sdp2.default.parseCandidate(args.candidate); + var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate); + + // Add a serializer that does not serialize the extra attributes. + augmentedCandidate.toJSON = function toJSON() { + return { + candidate: augmentedCandidate.candidate, + sdpMid: augmentedCandidate.sdpMid, + sdpMLineIndex: augmentedCandidate.sdpMLineIndex, + usernameFragment: augmentedCandidate.usernameFragment + }; + }; + return augmentedCandidate; + } + return new NativeRTCIceCandidate(args); + }; + window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype; + + // Hook up the augmented candidate in onicecandidate and + // addEventListener('icecandidate', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) { + if (e.candidate) { + Object.defineProperty(e, 'candidate', { + value: new window.RTCIceCandidate(e.candidate), + writable: 'false' + }); + } + return e; + }); +} + +function shimMaxMessageSize(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + + if (!('sctp' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + } + }); + } + + var sctpInDescription = function sctpInDescription(description) { + if (!description || !description.sdp) { + return false; + } + var sections = _sdp2.default.splitSections(description.sdp); + sections.shift(); + return sections.some(function (mediaSection) { + var mLine = _sdp2.default.parseMLine(mediaSection); + return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1; + }); + }; + + var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) { + // TODO: Is there a better solution for detecting Firefox? + var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/); + if (match === null || match.length < 2) { + return -1; + } + var version = parseInt(match[1], 10); + // Test for NaN (yes, this is ugly) + return version !== version ? -1 : version; + }; + + var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) { + // Every implementation we know can send at least 64 KiB. + // Note: Although Chrome is technically able to send up to 256 KiB, the + // data does not reach the other peer reliably. + // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419 + var canSendMaxMessageSize = 65536; + if (browserDetails.browser === 'firefox') { + if (browserDetails.version < 57) { + if (remoteIsFirefox === -1) { + // FF < 57 will send in 16 KiB chunks using the deprecated PPID + // fragmentation. + canSendMaxMessageSize = 16384; + } else { + // However, other FF (and RAWRTC) can reassemble PPID-fragmented + // messages. Thus, supporting ~2 GiB when sending. + canSendMaxMessageSize = 2147483637; + } + } else if (browserDetails.version < 60) { + // Currently, all FF >= 57 will reset the remote maximum message size + // to the default value when a data channel is created at a later + // stage. :( + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536; + } else { + // FF >= 60 supports sending ~2 GiB + canSendMaxMessageSize = 2147483637; + } + } + return canSendMaxMessageSize; + }; + + var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) { + // Note: 65536 bytes is the default value from the SDP spec. Also, + // every implementation we know supports receiving 65536 bytes. + var maxMessageSize = 65536; + + // FF 57 has a slightly incorrect default remote max message size, so + // we need to adjust it here to avoid a failure when sending. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697 + if (browserDetails.browser === 'firefox' && browserDetails.version === 57) { + maxMessageSize = 65535; + } + + var match = _sdp2.default.matchPrefix(description.sdp, 'a=max-message-size:'); + if (match.length > 0) { + maxMessageSize = parseInt(match[0].substr(19), 10); + } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) { + // If the maximum message size is not present in the remote SDP and + // both local and remote are Firefox, the remote peer can receive + // ~2 GiB. + maxMessageSize = 2147483637; + } + return maxMessageSize; + }; + + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + this._sctp = null; + // Chrome decided to not expose .sctp in plan-b mode. + // As usual, adapter.js has to do an 'ugly worakaround' + // to cover up the mess. + if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) { + var _getConfiguration = this.getConfiguration(), + sdpSemantics = _getConfiguration.sdpSemantics; + + if (sdpSemantics === 'plan-b') { + Object.defineProperty(this, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + }, + + enumerable: true, + configurable: true + }); + } + } + + if (sctpInDescription(arguments[0])) { + // Check if the remote is FF. + var isFirefox = getRemoteFirefoxVersion(arguments[0]); + + // Get the maximum message size the local peer is capable of sending + var canSendMMS = getCanSendMaxMessageSize(isFirefox); + + // Get the maximum message size of the remote peer. + var remoteMMS = getMaxMessageSize(arguments[0], isFirefox); + + // Determine final maximum message size + var maxMessageSize = void 0; + if (canSendMMS === 0 && remoteMMS === 0) { + maxMessageSize = Number.POSITIVE_INFINITY; + } else if (canSendMMS === 0 || remoteMMS === 0) { + maxMessageSize = Math.max(canSendMMS, remoteMMS); + } else { + maxMessageSize = Math.min(canSendMMS, remoteMMS); + } + + // Create a dummy RTCSctpTransport object and the 'maxMessageSize' + // attribute. + var sctp = {}; + Object.defineProperty(sctp, 'maxMessageSize', { + get: function get() { + return maxMessageSize; + } + }); + this._sctp = sctp; + } + + return origSetRemoteDescription.apply(this, arguments); + }; +} + +function shimSendThrowTypeError(window) { + if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) { + return; + } + + // Note: Although Firefox >= 57 has a native implementation, the maximum + // message size can be reset for all data channels at a later stage. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + + function wrapDcSend(dc, pc) { + var origDataChannelSend = dc.send; + dc.send = function send() { + var data = arguments[0]; + var length = data.length || data.size || data.byteLength; + if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) { + throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)'); + } + return origDataChannelSend.apply(dc, arguments); + }; + } + var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel; + window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() { + var dataChannel = origCreateDataChannel.apply(this, arguments); + wrapDcSend(dataChannel, this); + return dataChannel; + }; + utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) { + wrapDcSend(e.channel, e.target); + return e; + }); +} + +/* shims RTCConnectionState by pretending it is the same as iceConnectionState. + * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12 + * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect + * since DTLS failures would be hidden. See + * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827 + * for the Firefox tracking bug. + */ +function shimConnectionState(window) { + if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) { + return; + } + var proto = window.RTCPeerConnection.prototype; + Object.defineProperty(proto, 'connectionState', { + get: function get() { + return { + completed: 'connected', + checking: 'connecting' + }[this.iceConnectionState] || this.iceConnectionState; + }, + + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, 'onconnectionstatechange', { + get: function get() { + return this._onconnectionstatechange || null; + }, + set: function set(cb) { + if (this._onconnectionstatechange) { + this.removeEventListener('connectionstatechange', this._onconnectionstatechange); + delete this._onconnectionstatechange; + } + if (cb) { + this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb); + } + }, + + enumerable: true, + configurable: true + }); + + ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) { + var origMethod = proto[method]; + proto[method] = function () { + if (!this._connectionstatechangepoly) { + this._connectionstatechangepoly = function (e) { + var pc = e.target; + if (pc._lastConnectionState !== pc.connectionState) { + pc._lastConnectionState = pc.connectionState; + var newEvent = new Event('connectionstatechange', e); + pc.dispatchEvent(newEvent); + } + return e; + }; + this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly); + } + return origMethod.apply(this, arguments); + }; + }); +} + +function removeExtmapAllowMixed(window, browserDetails) { + /* remove a=extmap-allow-mixed for webrtc.org < M71 */ + if (!window.RTCPeerConnection) { + return; + } + if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) { + return; + } + if (browserDetails.browser === 'safari' && browserDetails.version >= 605) { + return; + } + var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) { + if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) { + var sdp = desc.sdp.split('\n').filter(function (line) { + return line.trim() !== 'a=extmap-allow-mixed'; + }).join('\n'); + // Safari enforces read-only-ness of RTCSessionDescription fields. + if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) { + arguments[0] = new window.RTCSessionDescription({ + type: desc.type, + sdp: sdp + }); + } else { + desc.sdp = sdp; + } + } + return nativeSRD.apply(this, arguments); + }; +} + +function shimAddIceCandidateNullOrEmpty(window, browserDetails) { + // Support for addIceCandidate(null or undefined) + // as well as addIceCandidate({candidate: "", ...}) + // https://bugs.chromium.org/p/chromium/issues/detail?id=978582 + // Note: must be called before other polyfills which change the signature. + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; + if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) { + return; + } + window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { + if (!arguments[0]) { + if (arguments[1]) { + arguments[1].apply(null); + } + return Promise.resolve(); + } + // Firefox 68+ emits and processes {candidate: "", ...}, ignore + // in older versions. + // Native support for ignoring exists for Chrome M77+. + // Safari ignores as well, exact version unknown but works in the same + // version that also ignores addIceCandidate(null). + if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') { + return Promise.resolve(); + } + return nativeAddIceCandidate.apply(this, arguments); + }; +} + +},{"./utils":11,"sdp":12}],7:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimOnTrack = shimOnTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.shimSenderGetStats = shimSenderGetStats; +exports.shimReceiverGetStats = shimReceiverGetStats; +exports.shimRemoveStream = shimRemoveStream; +exports.shimRTCDataChannel = shimRTCDataChannel; +exports.shimAddTransceiver = shimAddTransceiver; +exports.shimGetParameters = shimGetParameters; +exports.shimCreateOffer = shimCreateOffer; +exports.shimCreateAnswer = shimCreateAnswer; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimPeerConnection(window, browserDetails) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { + return; // probably media.peerconnection.enabled=false in about:config + } + if (!window.RTCPeerConnection && window.mozRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.mozRTCPeerConnection; + } + + if (browserDetails.version < 53) { + // shim away need for obsolete RTCIceCandidate/RTCSessionDescription. + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } + + var modernStatsTypes = { + inboundrtp: 'inbound-rtp', + outboundrtp: 'outbound-rtp', + candidatepair: 'candidate-pair', + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }; + + var nativeGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + return nativeGetStats.apply(this, [selector || null]).then(function (stats) { + if (browserDetails.version < 53 && !onSucc) { + // Shim only promise getStats with spec-hyphens in type names + // Leave callback version alone; misc old uses of forEach before Map + try { + stats.forEach(function (stat) { + stat.type = modernStatsTypes[stat.type] || stat.type; + }); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + // Avoid TypeError: "type" is read-only, in old versions. 34-43ish + stats.forEach(function (stat, i) { + stats.set(i, Object.assign({}, stat, { + type: modernStatsTypes[stat.type] || stat.type + })); + }); + } + } + return stats; + }).then(onSucc, onErr); + }; +} + +function shimSenderGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) { + return; + } + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map()); + }; +} + +function shimReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) { + return; + } + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this2 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this2; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + return this._pc.getStats(this.track); + }; +} + +function shimRemoveStream(window) { + if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) { + return; + } + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + utils.deprecated('removeStream', 'removeTrack'); + this.getSenders().forEach(function (sender) { + if (sender.track && stream.getTracks().includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; +} + +function shimRTCDataChannel(window) { + // rename DataChannel to RTCDataChannel (native fix in FF60): + // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851 + if (window.DataChannel && !window.RTCDataChannel) { + window.RTCDataChannel = window.DataChannel; + } +} + +function shimAddTransceiver(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; + if (origAddTransceiver) { + window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { + this.setParametersPromises = []; + var initParameters = arguments[1]; + var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters; + if (shouldPerformCheck) { + // If sendEncodings params are provided, validate grammar + initParameters.sendEncodings.forEach(function (encodingParam) { + if ('rid' in encodingParam) { + var ridRegex = /^[a-z0-9]{0,16}$/i; + if (!ridRegex.test(encodingParam.rid)) { + throw new TypeError('Invalid RID value provided.'); + } + } + if ('scaleResolutionDownBy' in encodingParam) { + if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { + throw new RangeError('scale_resolution_down_by must be >= 1.0'); + } + } + if ('maxFramerate' in encodingParam) { + if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { + throw new RangeError('max_framerate must be >= 0.0'); + } + } + }); + } + var transceiver = origAddTransceiver.apply(this, arguments); + if (shouldPerformCheck) { + // Check if the init options were applied. If not we do this in an + // asynchronous way and save the promise reference in a global object. + // This is an ugly hack, but at the same time is way more robust than + // checking the sender parameters before and after the createOffer + // Also note that after the createoffer we are not 100% sure that + // the params were asynchronously applied so we might miss the + // opportunity to recreate offer. + var sender = transceiver.sender; + + var params = sender.getParameters(); + if (!('encodings' in params) || + // Avoid being fooled by patched getParameters() below. + params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) { + params.encodings = initParameters.sendEncodings; + sender.sendEncodings = initParameters.sendEncodings; + this.setParametersPromises.push(sender.setParameters(params).then(function () { + delete sender.sendEncodings; + }).catch(function () { + delete sender.sendEncodings; + })); + } + } + return transceiver; + }; + } +} + +function shimGetParameters(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCRtpSender)) { + return; + } + var origGetParameters = window.RTCRtpSender.prototype.getParameters; + if (origGetParameters) { + window.RTCRtpSender.prototype.getParameters = function getParameters() { + var params = origGetParameters.apply(this, arguments); + if (!('encodings' in params)) { + params.encodings = [].concat(this.sendEncodings || [{}]); + } + return params; + }; + } +} + +function shimCreateOffer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer() { + var _this4 = this, + _arguments2 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateOffer.apply(_this4, _arguments2); + }).finally(function () { + _this4.setParametersPromises = []; + }); + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimCreateAnswer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; + window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { + var _this5 = this, + _arguments3 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateAnswer.apply(_this5, _arguments3); + }).finally(function () { + _this5.setParametersPromises = []; + }); + } + return origCreateAnswer.apply(this, arguments); + }; +} + +},{"../utils":11,"./getdisplaymedia":8,"./getusermedia":9}],8:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, preferredMediaSource) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + if (!(constraints && constraints.video)) { + var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined'); + err.name = 'NotFoundError'; + // from https://heycam.github.io/webidl/#idl-DOMException-error-names + err.code = 8; + return Promise.reject(err); + } + if (constraints.video === true) { + constraints.video = { mediaSource: preferredMediaSource }; + } else { + constraints.video.mediaSource = preferredMediaSource; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }; +} + +},{}],9:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + var MediaStreamTrack = window && window.MediaStreamTrack; + + navigator.getUserMedia = function (constraints, onSuccess, onError) { + // Replace Firefox 44+'s deprecation warning with unprefixed version. + utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia'); + navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); + }; + + if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + + var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object' && _typeof(c.audio) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c.audio, 'autoGainControl', 'mozAutoGainControl'); + remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeGetUserMedia(c); + }; + + if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) { + var nativeGetSettings = MediaStreamTrack.prototype.getSettings; + MediaStreamTrack.prototype.getSettings = function () { + var obj = nativeGetSettings.apply(this, arguments); + remap(obj, 'mozAutoGainControl', 'autoGainControl'); + remap(obj, 'mozNoiseSuppression', 'noiseSuppression'); + return obj; + }; + } + + if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) { + var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints; + MediaStreamTrack.prototype.applyConstraints = function (c) { + if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c, 'autoGainControl', 'mozAutoGainControl'); + remap(c, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeApplyConstraints.apply(this, [c]); + }; + } + } +} + +},{"../utils":11}],10:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimLocalStreamsAPI = shimLocalStreamsAPI; +exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; +exports.shimCallbacksAPI = shimCallbacksAPI; +exports.shimGetUserMedia = shimGetUserMedia; +exports.shimConstraints = shimConstraints; +exports.shimRTCIceServerUrls = shimRTCIceServerUrls; +exports.shimTrackEventTransceiver = shimTrackEventTransceiver; +exports.shimCreateOfferLegacy = shimCreateOfferLegacy; +exports.shimAudioContext = shimAudioContext; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimLocalStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + if (!this._localStreams) { + this._localStreams = []; + } + return this._localStreams; + }; + } + if (!('addStream' in window.RTCPeerConnection.prototype)) { + var _addTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this = this; + + if (!this._localStreams) { + this._localStreams = []; + } + if (!this._localStreams.includes(stream)) { + this._localStreams.push(stream); + } + // Try to emulate Chrome's behaviour of adding in audio-video order. + // Safari orders by track id. + stream.getAudioTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + stream.getVideoTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track) { + var _this2 = this; + + for (var _len = arguments.length, streams = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + streams[_key - 1] = arguments[_key]; + } + + if (streams) { + streams.forEach(function (stream) { + if (!_this2._localStreams) { + _this2._localStreams = [stream]; + } else if (!_this2._localStreams.includes(stream)) { + _this2._localStreams.push(stream); + } + }); + } + return _addTrack.apply(this, arguments); + }; + } + if (!('removeStream' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + if (!this._localStreams) { + this._localStreams = []; + } + var index = this._localStreams.indexOf(stream); + if (index === -1) { + return; + } + this._localStreams.splice(index, 1); + var tracks = stream.getTracks(); + this.getSenders().forEach(function (sender) { + if (tracks.includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; + } +} + +function shimRemoteStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() { + return this._remoteStreams ? this._remoteStreams : []; + }; + } + if (!('onaddstream' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', { + get: function get() { + return this._onaddstream; + }, + set: function set(f) { + var _this4 = this; + + if (this._onaddstream) { + this.removeEventListener('addstream', this._onaddstream); + this.removeEventListener('track', this._onaddstreampoly); + } + this.addEventListener('addstream', this._onaddstream = f); + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!_this4._remoteStreams) { + _this4._remoteStreams = []; + } + if (_this4._remoteStreams.includes(stream)) { + return; + } + _this4._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + _this4.dispatchEvent(event); + }); + }); + } + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var pc = this; + if (!this._onaddstreampoly) { + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!pc._remoteStreams) { + pc._remoteStreams = []; + } + if (pc._remoteStreams.indexOf(stream) >= 0) { + return; + } + pc._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + pc.dispatchEvent(event); + }); + }); + } + return origSetRemoteDescription.apply(pc, arguments); + }; + } +} + +function shimCallbacksAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + var prototype = window.RTCPeerConnection.prototype; + var origCreateOffer = prototype.createOffer; + var origCreateAnswer = prototype.createAnswer; + var setLocalDescription = prototype.setLocalDescription; + var setRemoteDescription = prototype.setRemoteDescription; + var addIceCandidate = prototype.addIceCandidate; + + prototype.createOffer = function createOffer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateOffer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + prototype.createAnswer = function createAnswer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateAnswer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + var withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setLocalDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setLocalDescription = withCallback; + + withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setRemoteDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setRemoteDescription = withCallback; + + withCallback = function withCallback(candidate, successCallback, failureCallback) { + var promise = addIceCandidate.apply(this, [candidate]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.addIceCandidate = withCallback; +} + +function shimGetUserMedia(window) { + var navigator = window && window.navigator; + + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + // shim not needed in Safari 12.1 + var mediaDevices = navigator.mediaDevices; + var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices); + navigator.mediaDevices.getUserMedia = function (constraints) { + return _getUserMedia(shimConstraints(constraints)); + }; + } + + if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) { + navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb); + }.bind(navigator); + } +} + +function shimConstraints(constraints) { + if (constraints && constraints.video !== undefined) { + return Object.assign({}, constraints, { video: utils.compactObject(constraints.video) }); + } + + return constraints; +} + +function shimRTCIceServerUrls(window) { + if (!window.RTCPeerConnection) { + return; + } + // migrate from non-spec RTCIceServer.url to RTCIceServer.urls + var OrigPeerConnection = window.RTCPeerConnection; + window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) { + if (pcConfig && pcConfig.iceServers) { + var newIceServers = []; + for (var i = 0; i < pcConfig.iceServers.length; i++) { + var server = pcConfig.iceServers[i]; + if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) { + utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls'); + server = JSON.parse(JSON.stringify(server)); + server.urls = server.url; + delete server.url; + newIceServers.push(server); + } else { + newIceServers.push(pcConfig.iceServers[i]); + } + } + pcConfig.iceServers = newIceServers; + } + return new OrigPeerConnection(pcConfig, pcConstraints); + }; + window.RTCPeerConnection.prototype = OrigPeerConnection.prototype; + // wrap static methods. Currently just generateCertificate. + if ('generateCertificate' in OrigPeerConnection) { + Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { + get: function get() { + return OrigPeerConnection.generateCertificate; + } + }); + } +} + +function shimTrackEventTransceiver(window) { + // Add event.transceiver member over deprecated event.receiver + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimCreateOfferLegacy(window) { + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) { + if (offerOptions) { + if (typeof offerOptions.offerToReceiveAudio !== 'undefined') { + // support bit values + offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio; + } + var audioTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'audio'; + }); + if (offerOptions.offerToReceiveAudio === false && audioTransceiver) { + if (audioTransceiver.direction === 'sendrecv') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('sendonly'); + } else { + audioTransceiver.direction = 'sendonly'; + } + } else if (audioTransceiver.direction === 'recvonly') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('inactive'); + } else { + audioTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) { + this.addTransceiver('audio'); + } + + if (typeof offerOptions.offerToReceiveVideo !== 'undefined') { + // support bit values + offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo; + } + var videoTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'video'; + }); + if (offerOptions.offerToReceiveVideo === false && videoTransceiver) { + if (videoTransceiver.direction === 'sendrecv') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('sendonly'); + } else { + videoTransceiver.direction = 'sendonly'; + } + } else if (videoTransceiver.direction === 'recvonly') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('inactive'); + } else { + videoTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) { + this.addTransceiver('video'); + } + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimAudioContext(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} + +},{"../utils":11}],11:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.extractVersion = extractVersion; +exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +exports.disableLog = disableLog; +exports.disableWarnings = disableWarnings; +exports.log = log; +exports.deprecated = deprecated; +exports.detectBrowser = detectBrowser; +exports.compactObject = compactObject; +exports.walkStats = walkStats; +exports.filterStats = filterStats; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var logDisabled_ = true; +var deprecationWarnings_ = true; + +/** + * Extract browser version out of the provided user agent string. + * + * @param {!string} uastring userAgent string. + * @param {!string} expr Regular expression used as match criteria. + * @param {!number} pos position in the version string to be returned. + * @return {!number} browser version. + */ +function extractVersion(uastring, expr, pos) { + var match = uastring.match(expr); + return match && match.length >= pos && parseInt(match[pos], 10); +} + +// Wraps the peerconnection event eventNameToWrap in a function +// which returns the modified event object (or false to prevent +// the event). +function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { + if (!window.RTCPeerConnection) { + return; + } + var proto = window.RTCPeerConnection.prototype; + var nativeAddEventListener = proto.addEventListener; + proto.addEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap) { + return nativeAddEventListener.apply(this, arguments); + } + var wrappedCallback = function wrappedCallback(e) { + var modifiedEvent = wrapper(e); + if (modifiedEvent) { + if (cb.handleEvent) { + cb.handleEvent(modifiedEvent); + } else { + cb(modifiedEvent); + } + } + }; + this._eventMap = this._eventMap || {}; + if (!this._eventMap[eventNameToWrap]) { + this._eventMap[eventNameToWrap] = new Map(); + } + this._eventMap[eventNameToWrap].set(cb, wrappedCallback); + return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]); + }; + + var nativeRemoveEventListener = proto.removeEventListener; + proto.removeEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) { + return nativeRemoveEventListener.apply(this, arguments); + } + if (!this._eventMap[eventNameToWrap].has(cb)) { + return nativeRemoveEventListener.apply(this, arguments); + } + var unwrappedCb = this._eventMap[eventNameToWrap].get(cb); + this._eventMap[eventNameToWrap].delete(cb); + if (this._eventMap[eventNameToWrap].size === 0) { + delete this._eventMap[eventNameToWrap]; + } + if (Object.keys(this._eventMap).length === 0) { + delete this._eventMap; + } + return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]); + }; + + Object.defineProperty(proto, 'on' + eventNameToWrap, { + get: function get() { + return this['_on' + eventNameToWrap]; + }, + set: function set(cb) { + if (this['_on' + eventNameToWrap]) { + this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]); + delete this['_on' + eventNameToWrap]; + } + if (cb) { + this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb); + } + }, + + enumerable: true, + configurable: true + }); +} + +function disableLog(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + logDisabled_ = bool; + return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled'; +} + +/** + * Disable or enable deprecation warnings + * @param {!boolean} bool set to true to disable warnings. + */ +function disableWarnings(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + deprecationWarnings_ = !bool; + return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled'); +} + +function log() { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') { + if (logDisabled_) { + return; + } + if (typeof console !== 'undefined' && typeof console.log === 'function') { + console.log.apply(console, arguments); + } + } +} + +/** + * Shows a deprecation warning suggesting the modern and spec-compatible API. + */ +function deprecated(oldMethod, newMethod) { + if (!deprecationWarnings_) { + return; + } + console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.'); +} + +/** + * Browser detector. + * + * @return {object} result containing browser and version + * properties. + */ +function detectBrowser(window) { + // Returned result object. + var result = { browser: null, version: null }; + + // Fail early if it's not a browser + if (typeof window === 'undefined' || !window.navigator) { + result.browser = 'Not a browser.'; + return result; + } + + var navigator = window.navigator; + + + if (navigator.mozGetUserMedia) { + // Firefox. + result.browser = 'firefox'; + result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1); + } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) { + // Chrome, Chromium, Webview, Opera. + // Version matches Chrome/WebRTC version. + // Chrome 74 removed webkitGetUserMedia on http as well so we need the + // more complicated fallback to webkitRTCPeerConnection. + result.browser = 'chrome'; + result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2); + } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { + // Safari. + result.browser = 'safari'; + result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1); + result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype; + } else { + // Default fallthrough: not supported. + result.browser = 'Not a supported browser.'; + return result; + } + + return result; +} + +/** + * Checks if something is an object. + * + * @param {*} val The something you want to check. + * @return true if val is an object, false otherwise. + */ +function isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; +} + +/** + * Remove all empty objects and undefined values + * from a nested object -- an enhanced and vanilla version + * of Lodash's `compact`. + */ +function compactObject(data) { + if (!isObject(data)) { + return data; + } + + return Object.keys(data).reduce(function (accumulator, key) { + var isObj = isObject(data[key]); + var value = isObj ? compactObject(data[key]) : data[key]; + var isEmptyObject = isObj && !Object.keys(value).length; + if (value === undefined || isEmptyObject) { + return accumulator; + } + return Object.assign(accumulator, _defineProperty({}, key, value)); + }, {}); +} + +/* iterates the stats graph recursively. */ +function walkStats(stats, base, resultSet) { + if (!base || resultSet.has(base.id)) { + return; + } + resultSet.set(base.id, base); + Object.keys(base).forEach(function (name) { + if (name.endsWith('Id')) { + walkStats(stats, stats.get(base[name]), resultSet); + } else if (name.endsWith('Ids')) { + base[name].forEach(function (id) { + walkStats(stats, stats.get(id), resultSet); + }); + } + }); +} + +/* filter getStats for a sender/receiver track. */ +function filterStats(result, track, outbound) { + var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; + var filteredResult = new Map(); + if (track === null) { + return filteredResult; + } + var trackStats = []; + result.forEach(function (value) { + if (value.type === 'track' && value.trackIdentifier === track.id) { + trackStats.push(value); + } + }); + trackStats.forEach(function (trackStat) { + result.forEach(function (stats) { + if (stats.type === streamStatsType && stats.trackId === trackStat.id) { + walkStats(result, stats, filteredResult); + } + }); + }); + return filteredResult; +} + +},{}],12:[function(require,module,exports){ +/* eslint-env node */ +'use strict'; + +// SDP helpers. + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var SDPUtils = {}; + +// Generate an alphanumeric identifier for cname or mids. +// TODO: use UUIDs instead? https://gist.github.com/jed/982883 +SDPUtils.generateIdentifier = function () { + return Math.random().toString(36).substr(2, 10); +}; + +// The RTCP CNAME used by all peerconnections from the same JS. +SDPUtils.localCName = SDPUtils.generateIdentifier(); + +// Splits SDP into lines, dealing with both CRLF and LF. +SDPUtils.splitLines = function (blob) { + return blob.trim().split('\n').map(function (line) { + return line.trim(); + }); +}; +// Splits SDP into sessionpart and mediasections. Ensures CRLF. +SDPUtils.splitSections = function (blob) { + var parts = blob.split('\nm='); + return parts.map(function (part, index) { + return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; + }); +}; + +// returns the session description. +SDPUtils.getDescription = function (blob) { + var sections = SDPUtils.splitSections(blob); + return sections && sections[0]; +}; + +// returns the individual media sections. +SDPUtils.getMediaSections = function (blob) { + var sections = SDPUtils.splitSections(blob); + sections.shift(); + return sections; +}; + +// Returns lines that start with a certain prefix. +SDPUtils.matchPrefix = function (blob, prefix) { + return SDPUtils.splitLines(blob).filter(function (line) { + return line.indexOf(prefix) === 0; + }); +}; + +// Parses an ICE candidate line. Sample input: +// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 +// rport 55996" +SDPUtils.parseCandidate = function (line) { + var parts = void 0; + // Parse both variants. + if (line.indexOf('a=candidate:') === 0) { + parts = line.substring(12).split(' '); + } else { + parts = line.substring(10).split(' '); + } + + var candidate = { + foundation: parts[0], + component: { 1: 'rtp', 2: 'rtcp' }[parts[1]], + protocol: parts[2].toLowerCase(), + priority: parseInt(parts[3], 10), + ip: parts[4], + address: parts[4], // address is an alias for ip. + port: parseInt(parts[5], 10), + // skip parts[6] == 'typ' + type: parts[7] + }; + + for (var i = 8; i < parts.length; i += 2) { + switch (parts[i]) { + case 'raddr': + candidate.relatedAddress = parts[i + 1]; + break; + case 'rport': + candidate.relatedPort = parseInt(parts[i + 1], 10); + break; + case 'tcptype': + candidate.tcpType = parts[i + 1]; + break; + case 'ufrag': + candidate.ufrag = parts[i + 1]; // for backward compatibility. + candidate.usernameFragment = parts[i + 1]; + break; + default: + // extension handling, in particular ufrag. Don't overwrite. + if (candidate[parts[i]] === undefined) { + candidate[parts[i]] = parts[i + 1]; + } + break; + } + } + return candidate; +}; + +// Translates a candidate object into SDP candidate attribute. +SDPUtils.writeCandidate = function (candidate) { + var sdp = []; + sdp.push(candidate.foundation); + + var component = candidate.component; + if (component === 'rtp') { + sdp.push(1); + } else if (component === 'rtcp') { + sdp.push(2); + } else { + sdp.push(component); + } + sdp.push(candidate.protocol.toUpperCase()); + sdp.push(candidate.priority); + sdp.push(candidate.address || candidate.ip); + sdp.push(candidate.port); + + var type = candidate.type; + sdp.push('typ'); + sdp.push(type); + if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) { + sdp.push('raddr'); + sdp.push(candidate.relatedAddress); + sdp.push('rport'); + sdp.push(candidate.relatedPort); + } + if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { + sdp.push('tcptype'); + sdp.push(candidate.tcpType); + } + if (candidate.usernameFragment || candidate.ufrag) { + sdp.push('ufrag'); + sdp.push(candidate.usernameFragment || candidate.ufrag); + } + return 'candidate:' + sdp.join(' '); +}; + +// Parses an ice-options line, returns an array of option tags. +// a=ice-options:foo bar +SDPUtils.parseIceOptions = function (line) { + return line.substr(14).split(' '); +}; + +// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: +// a=rtpmap:111 opus/48000/2 +SDPUtils.parseRtpMap = function (line) { + var parts = line.substr(9).split(' '); + var parsed = { + payloadType: parseInt(parts.shift(), 10) // was: id + }; + + parts = parts[0].split('/'); + + parsed.name = parts[0]; + parsed.clockRate = parseInt(parts[1], 10); // was: clockrate + parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1; + // legacy alias, got renamed back to channels in ORTC. + parsed.numChannels = parsed.channels; + return parsed; +}; + +// Generate an a=rtpmap line from RTCRtpCodecCapability or +// RTCRtpCodecParameters. +SDPUtils.writeRtpMap = function (codec) { + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + var channels = codec.channels || codec.numChannels || 1; + return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\r\n'; +}; + +// Parses an a=extmap line (headerextension from RFC 5285). Sample input: +// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset +// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset +SDPUtils.parseExtmap = function (line) { + var parts = line.substr(9).split(' '); + return { + id: parseInt(parts[0], 10), + direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', + uri: parts[1] + }; +}; + +// Generates a=extmap line from RTCRtpHeaderExtensionParameters or +// RTCRtpHeaderExtension. +SDPUtils.writeExtmap = function (headerExtension) { + return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + '\r\n'; +}; + +// Parses an ftmp line, returns dictionary. Sample input: +// a=fmtp:96 vbr=on;cng=on +// Also deals with vbr=on; cng=on +SDPUtils.parseFmtp = function (line) { + var parsed = {}; + var kv = void 0; + var parts = line.substr(line.indexOf(' ') + 1).split(';'); + for (var j = 0; j < parts.length; j++) { + kv = parts[j].trim().split('='); + parsed[kv[0].trim()] = kv[1]; + } + return parsed; +}; + +// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeFmtp = function (codec) { + var line = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.parameters && Object.keys(codec.parameters).length) { + var params = []; + Object.keys(codec.parameters).forEach(function (param) { + if (codec.parameters[param]) { + params.push(param + '=' + codec.parameters[param]); + } else { + params.push(param); + } + }); + line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; + } + return line; +}; + +// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: +// a=rtcp-fb:98 nack rpsi +SDPUtils.parseRtcpFb = function (line) { + var parts = line.substr(line.indexOf(' ') + 1).split(' '); + return { + type: parts.shift(), + parameter: parts.join(' ') + }; +}; +// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeRtcpFb = function (codec) { + var lines = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.rtcpFeedback && codec.rtcpFeedback.length) { + // FIXME: special handling for trr-int? + codec.rtcpFeedback.forEach(function (fb) { + lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\r\n'; + }); + } + return lines; +}; + +// Parses an RFC 5576 ssrc media attribute. Sample input: +// a=ssrc:3735928559 cname:something +SDPUtils.parseSsrcMedia = function (line) { + var sp = line.indexOf(' '); + var parts = { + ssrc: parseInt(line.substr(7, sp - 7), 10) + }; + var colon = line.indexOf(':', sp); + if (colon > -1) { + parts.attribute = line.substr(sp + 1, colon - sp - 1); + parts.value = line.substr(colon + 1); + } else { + parts.attribute = line.substr(sp + 1); + } + return parts; +}; + +SDPUtils.parseSsrcGroup = function (line) { + var parts = line.substr(13).split(' '); + return { + semantics: parts.shift(), + ssrcs: parts.map(function (ssrc) { + return parseInt(ssrc, 10); + }) + }; +}; + +// Extracts the MID (RFC 5888) from a media section. +// returns the MID or undefined if no mid line was found. +SDPUtils.getMid = function (mediaSection) { + var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; + if (mid) { + return mid.substr(6); + } +}; + +SDPUtils.parseFingerprint = function (line) { + var parts = line.substr(14).split(' '); + return { + algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. + value: parts[1] + }; +}; + +// Extracts DTLS parameters from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the fingerprint line as input. See also getIceParameters. +SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:'); + // Note: a=setup line is ignored since we use the 'auto' role. + // Note2: 'algorithm' is not case sensitive except in Edge. + return { + role: 'auto', + fingerprints: lines.map(SDPUtils.parseFingerprint) + }; +}; + +// Serializes DTLS parameters to SDP. +SDPUtils.writeDtlsParameters = function (params, setupType) { + var sdp = 'a=setup:' + setupType + '\r\n'; + params.fingerprints.forEach(function (fp) { + sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; + }); + return sdp; +}; + +// Parses a=crypto lines into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members +SDPUtils.parseCryptoLine = function (line) { + var parts = line.substr(9).split(' '); + return { + tag: parseInt(parts[0], 10), + cryptoSuite: parts[1], + keyParams: parts[2], + sessionParams: parts.slice(3) + }; +}; + +SDPUtils.writeCryptoLine = function (parameters) { + return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (_typeof(parameters.keyParams) === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\r\n'; +}; + +// Parses the crypto key parameters into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* +SDPUtils.parseCryptoKeyParams = function (keyParams) { + if (keyParams.indexOf('inline:') !== 0) { + return null; + } + var parts = keyParams.substr(7).split('|'); + return { + keyMethod: 'inline', + keySalt: parts[0], + lifeTime: parts[1], + mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, + mkiLength: parts[2] ? parts[2].split(':')[1] : undefined + }; +}; + +SDPUtils.writeCryptoKeyParams = function (keyParams) { + return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : ''); +}; + +// Extracts all SDES parameters. +SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:'); + return lines.map(SDPUtils.parseCryptoLine); +}; + +// Parses ICE information from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the ice-ufrag and ice-pwd lines as input. +SDPUtils.getIceParameters = function (mediaSection, sessionpart) { + var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0]; + var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0]; + if (!(ufrag && pwd)) { + return null; + } + return { + usernameFragment: ufrag.substr(12), + password: pwd.substr(10) + }; +}; + +// Serializes ICE parameters to SDP. +SDPUtils.writeIceParameters = function (params) { + var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + 'a=ice-pwd:' + params.password + '\r\n'; + if (params.iceLite) { + sdp += 'a=ice-lite\r\n'; + } + return sdp; +}; + +// Parses the SDP media section and returns RTCRtpParameters. +SDPUtils.parseRtpParameters = function (mediaSection) { + var description = { + codecs: [], + headerExtensions: [], + fecMechanisms: [], + rtcp: [] + }; + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + for (var i = 3; i < mline.length; i++) { + // find all codecs from mline[3..] + var pt = mline[i]; + var rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0]; + if (rtpmapline) { + var codec = SDPUtils.parseRtpMap(rtpmapline); + var fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' '); + // Only the first a=fmtp: is considered. + codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; + codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb); + description.codecs.push(codec); + // parse FEC mechanisms from rtpmap lines. + switch (codec.name.toUpperCase()) { + case 'RED': + case 'ULPFEC': + description.fecMechanisms.push(codec.name.toUpperCase()); + break; + default: + // only RED and ULPFEC are recognized as FEC mechanisms. + break; + } + } + } + SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function (line) { + description.headerExtensions.push(SDPUtils.parseExtmap(line)); + }); + // FIXME: parse rtcp. + return description; +}; + +// Generates parts of the SDP media section describing the capabilities / +// parameters. +SDPUtils.writeRtpDescription = function (kind, caps) { + var sdp = ''; + + // Build the mline. + sdp += 'm=' + kind + ' '; + sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. + sdp += ' UDP/TLS/RTP/SAVPF '; + sdp += caps.codecs.map(function (codec) { + if (codec.preferredPayloadType !== undefined) { + return codec.preferredPayloadType; + } + return codec.payloadType; + }).join(' ') + '\r\n'; + + sdp += 'c=IN IP4 0.0.0.0\r\n'; + sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; + + // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. + caps.codecs.forEach(function (codec) { + sdp += SDPUtils.writeRtpMap(codec); + sdp += SDPUtils.writeFmtp(codec); + sdp += SDPUtils.writeRtcpFb(codec); + }); + var maxptime = 0; + caps.codecs.forEach(function (codec) { + if (codec.maxptime > maxptime) { + maxptime = codec.maxptime; + } + }); + if (maxptime > 0) { + sdp += 'a=maxptime:' + maxptime + '\r\n'; + } + + if (caps.headerExtensions) { + caps.headerExtensions.forEach(function (extension) { + sdp += SDPUtils.writeExtmap(extension); + }); + } + // FIXME: write fecMechanisms. + return sdp; +}; + +// Parses the SDP media section and returns an array of +// RTCRtpEncodingParameters. +SDPUtils.parseRtpEncodingParameters = function (mediaSection) { + var encodingParameters = []; + var description = SDPUtils.parseRtpParameters(mediaSection); + var hasRed = description.fecMechanisms.indexOf('RED') !== -1; + var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; + + // filter a=ssrc:... cname:, ignore PlanB-msid + var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (parts) { + return parts.attribute === 'cname'; + }); + var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; + var secondarySsrc = void 0; + + var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(function (line) { + var parts = line.substr(17).split(' '); + return parts.map(function (part) { + return parseInt(part, 10); + }); + }); + if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { + secondarySsrc = flows[0][1]; + } + + description.codecs.forEach(function (codec) { + if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { + var encParam = { + ssrc: primarySsrc, + codecPayloadType: parseInt(codec.parameters.apt, 10) + }; + if (primarySsrc && secondarySsrc) { + encParam.rtx = { ssrc: secondarySsrc }; + } + encodingParameters.push(encParam); + if (hasRed) { + encParam = JSON.parse(JSON.stringify(encParam)); + encParam.fec = { + ssrc: primarySsrc, + mechanism: hasUlpfec ? 'red+ulpfec' : 'red' + }; + encodingParameters.push(encParam); + } + } + }); + if (encodingParameters.length === 0 && primarySsrc) { + encodingParameters.push({ + ssrc: primarySsrc + }); + } + + // we support both b=AS and b=TIAS but interpret AS as TIAS. + var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); + if (bandwidth.length) { + if (bandwidth[0].indexOf('b=TIAS:') === 0) { + bandwidth = parseInt(bandwidth[0].substr(7), 10); + } else if (bandwidth[0].indexOf('b=AS:') === 0) { + // use formula from JSEP to convert b=AS to TIAS value. + bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - 50 * 40 * 8; + } else { + bandwidth = undefined; + } + encodingParameters.forEach(function (params) { + params.maxBitrate = bandwidth; + }); + } + return encodingParameters; +}; + +// parses http://draft.ortc.org/#rtcrtcpparameters* +SDPUtils.parseRtcpParameters = function (mediaSection) { + var rtcpParameters = {}; + + // Gets the first SSRC. Note that with RTX there might be multiple + // SSRCs. + var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (obj) { + return obj.attribute === 'cname'; + })[0]; + if (remoteSsrc) { + rtcpParameters.cname = remoteSsrc.value; + rtcpParameters.ssrc = remoteSsrc.ssrc; + } + + // Edge uses the compound attribute instead of reducedSize + // compound is !reducedSize + var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); + rtcpParameters.reducedSize = rsize.length > 0; + rtcpParameters.compound = rsize.length === 0; + + // parses the rtcp-mux attrіbute. + // Note that Edge does not support unmuxed RTCP. + var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); + rtcpParameters.mux = mux.length > 0; + + return rtcpParameters; +}; + +SDPUtils.writeRtcpParameters = function (rtcpParameters) { + var sdp = ''; + if (rtcpParameters.reducedSize) { + sdp += 'a=rtcp-rsize\r\n'; + } + if (rtcpParameters.mux) { + sdp += 'a=rtcp-mux\r\n'; + } + if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) { + sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\r\n'; + } + return sdp; +}; + +// parses either a=msid: or a=ssrc:... msid lines and returns +// the id of the MediaStream and MediaStreamTrack. +SDPUtils.parseMsid = function (mediaSection) { + var parts = void 0; + var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); + if (spec.length === 1) { + parts = spec[0].substr(7).split(' '); + return { stream: parts[0], track: parts[1] }; + } + var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (msidParts) { + return msidParts.attribute === 'msid'; + }); + if (planB.length > 0) { + parts = planB[0].value.split(' '); + return { stream: parts[0], track: parts[1] }; + } +}; + +// SCTP +// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back +// to draft-ietf-mmusic-sctp-sdp-05 +SDPUtils.parseSctpDescription = function (mediaSection) { + var mline = SDPUtils.parseMLine(mediaSection); + var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); + var maxMessageSize = void 0; + if (maxSizeLine.length > 0) { + maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10); + } + if (isNaN(maxMessageSize)) { + maxMessageSize = 65536; + } + var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); + if (sctpPort.length > 0) { + return { + port: parseInt(sctpPort[0].substr(12), 10), + protocol: mline.fmt, + maxMessageSize: maxMessageSize + }; + } + var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); + if (sctpMapLines.length > 0) { + var parts = sctpMapLines[0].substr(10).split(' '); + return { + port: parseInt(parts[0], 10), + protocol: parts[1], + maxMessageSize: maxMessageSize + }; + } +}; + +// SCTP +// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers +// support by now receiving in this format, unless we originally parsed +// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line +// protocol of DTLS/SCTP -- without UDP/ or TCP/) +SDPUtils.writeSctpDescription = function (media, sctp) { + var output = []; + if (media.protocol !== 'DTLS/SCTP') { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctp-port:' + sctp.port + '\r\n']; + } else { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n']; + } + if (sctp.maxMessageSize !== undefined) { + output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); + } + return output.join(''); +}; + +// Generate a session ID for SDP. +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 +// recommends using a cryptographically random +ve 64-bit value +// but right now this should be acceptable and within the right range +SDPUtils.generateSessionId = function () { + return Math.random().toString().substr(2, 21); +}; + +// Write boiler plate for start of SDP +// sessId argument is optional - if not supplied it will +// be generated randomly +// sessVersion is optional and defaults to 2 +// sessUser is optional and defaults to 'thisisadapterortc' +SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) { + var sessionId = void 0; + var version = sessVer !== undefined ? sessVer : 2; + if (sessId) { + sessionId = sessId; + } else { + sessionId = SDPUtils.generateSessionId(); + } + var user = sessUser || 'thisisadapterortc'; + // FIXME: sess-id should be an NTP timestamp. + return 'v=0\r\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\r\n' + 's=-\r\n' + 't=0 0\r\n'; +}; + +// Gets the direction from the mediaSection or the sessionpart. +SDPUtils.getDirection = function (mediaSection, sessionpart) { + // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. + var lines = SDPUtils.splitLines(mediaSection); + for (var i = 0; i < lines.length; i++) { + switch (lines[i]) { + case 'a=sendrecv': + case 'a=sendonly': + case 'a=recvonly': + case 'a=inactive': + return lines[i].substr(2); + default: + // FIXME: What should happen here? + } + } + if (sessionpart) { + return SDPUtils.getDirection(sessionpart); + } + return 'sendrecv'; +}; + +SDPUtils.getKind = function (mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + return mline[0].substr(2); +}; + +SDPUtils.isRejected = function (mediaSection) { + return mediaSection.split(' ', 2)[1] === '0'; +}; + +SDPUtils.parseMLine = function (mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var parts = lines[0].substr(2).split(' '); + return { + kind: parts[0], + port: parseInt(parts[1], 10), + protocol: parts[2], + fmt: parts.slice(3).join(' ') + }; +}; + +SDPUtils.parseOLine = function (mediaSection) { + var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; + var parts = line.substr(2).split(' '); + return { + username: parts[0], + sessionId: parts[1], + sessionVersion: parseInt(parts[2], 10), + netType: parts[3], + addressType: parts[4], + address: parts[5] + }; +}; + +// a very naive interpretation of a valid SDP. +SDPUtils.isValidSDP = function (blob) { + if (typeof blob !== 'string' || blob.length === 0) { + return false; + } + var lines = SDPUtils.splitLines(blob); + for (var i = 0; i < lines.length; i++) { + if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { + return false; + } + // TODO: check the modifier a bit more. + } + return true; +}; + +// Expose public methods. +if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') { + module.exports = SDPUtils; +} +},{}]},{},[1])(1) +}); diff --git a/static/lib/adapter/adapter.js.gz b/static/lib/adapter/adapter.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..347c03b5a37f7b3b7144928ecf23e2619cbe7060 GIT binary patch literal 35272 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 0 && arguments[0] !== undefined ? arguments[0] : {}, + window = _ref.window; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + shimChrome: true, + shimFirefox: true, + shimEdge: true, + shimSafari: true + }; + + // Utils. + var logging = utils.log; + var browserDetails = utils.detectBrowser(window); + + var adapter = { + browserDetails: browserDetails, + commonShim: commonShim, + extractVersion: utils.extractVersion, + disableLog: utils.disableLog, + disableWarnings: utils.disableWarnings + }; + + // Shim browser if found. + switch (browserDetails.browser) { + case 'chrome': + if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) { + logging('Chrome shim is not included in this adapter release.'); + return adapter; + } + if (browserDetails.version === null) { + logging('Chrome shim can not determine version, not shimming.'); + return adapter; + } + logging('adapter.js shimming chrome.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = chromeShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + chromeShim.shimGetUserMedia(window, browserDetails); + chromeShim.shimMediaStream(window, browserDetails); + chromeShim.shimPeerConnection(window, browserDetails); + chromeShim.shimOnTrack(window, browserDetails); + chromeShim.shimAddTrackRemoveTrack(window, browserDetails); + chromeShim.shimGetSendersWithDtmf(window, browserDetails); + chromeShim.shimGetStats(window, browserDetails); + chromeShim.shimSenderReceiverGetStats(window, browserDetails); + chromeShim.fixNegotiationNeeded(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + case 'firefox': + if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) { + logging('Firefox shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming firefox.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = firefoxShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + firefoxShim.shimGetUserMedia(window, browserDetails); + firefoxShim.shimPeerConnection(window, browserDetails); + firefoxShim.shimOnTrack(window, browserDetails); + firefoxShim.shimRemoveStream(window, browserDetails); + firefoxShim.shimSenderGetStats(window, browserDetails); + firefoxShim.shimReceiverGetStats(window, browserDetails); + firefoxShim.shimRTCDataChannel(window, browserDetails); + firefoxShim.shimAddTransceiver(window, browserDetails); + firefoxShim.shimGetParameters(window, browserDetails); + firefoxShim.shimCreateOffer(window, browserDetails); + firefoxShim.shimCreateAnswer(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + break; + case 'edge': + if (!edgeShim || !edgeShim.shimPeerConnection || !options.shimEdge) { + logging('MS edge shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming edge.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = edgeShim; + + edgeShim.shimGetUserMedia(window, browserDetails); + edgeShim.shimGetDisplayMedia(window, browserDetails); + edgeShim.shimPeerConnection(window, browserDetails); + edgeShim.shimReplaceTrack(window, browserDetails); + + // the edge shim implements the full RTCIceCandidate object. + + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + break; + case 'safari': + if (!safariShim || !options.shimSafari) { + logging('Safari shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming safari.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = safariShim; + + // Must be called before shimCallbackAPI. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + safariShim.shimRTCIceServerUrls(window, browserDetails); + safariShim.shimCreateOfferLegacy(window, browserDetails); + safariShim.shimCallbacksAPI(window, browserDetails); + safariShim.shimLocalStreamsAPI(window, browserDetails); + safariShim.shimRemoteStreamsAPI(window, browserDetails); + safariShim.shimTrackEventTransceiver(window, browserDetails); + safariShim.shimGetUserMedia(window, browserDetails); + safariShim.shimAudioContext(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + default: + logging('Unsupported browser!'); + break; + } + + return adapter; +} + +// Browser shims. + +},{"./chrome/chrome_shim":3,"./common_shim":6,"./edge/edge_shim":12,"./firefox/firefox_shim":7,"./safari/safari_shim":10,"./utils":11}],3:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimMediaStream = shimMediaStream; +exports.shimOnTrack = shimOnTrack; +exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; +exports.shimGetStats = shimGetStats; +exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; +exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; +exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.fixNegotiationNeeded = fixNegotiationNeeded; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimMediaStream(window) { + window.MediaStream = window.MediaStream || window.webkitMediaStream; +} + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { + get: function get() { + return this._ontrack; + }, + set: function set(f) { + if (this._ontrack) { + this.removeEventListener('track', this._ontrack); + } + this.addEventListener('track', this._ontrack = f); + }, + + enumerable: true, + configurable: true + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var _this = this; + + if (!this._ontrackpoly) { + this._ontrackpoly = function (e) { + // onaddstream does not fire when a track is added to an existing + // stream. But stream.onaddtrack is implemented so we use that. + e.stream.addEventListener('addtrack', function (te) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === te.track.id; + }); + } else { + receiver = { track: te.track }; + } + + var event = new Event('track'); + event.track = te.track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + e.stream.getTracks().forEach(function (track) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === track.id; + }); + } else { + receiver = { track: track }; + } + var event = new Event('track'); + event.track = track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + }; + this.addEventListener('addstream', this._ontrackpoly); + } + return origSetRemoteDescription.apply(this, arguments); + }; + } else { + // even if RTCRtpTransceiver is in window, it is only used and + // emitted in unified-plan. Unfortunately this means we need + // to unconditionally wrap the event. + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + if (!e.transceiver) { + Object.defineProperty(e, 'transceiver', { value: { receiver: e.receiver } }); + } + return e; + }); + } +} + +function shimGetSendersWithDtmf(window) { + // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack. + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { + var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) { + return { + track: track, + get dtmf() { + if (this._dtmf === undefined) { + if (track.kind === 'audio') { + this._dtmf = pc.createDTMFSender(track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + }, + _pc: pc + }; + }; + + // augment addTrack when getSenders is not available. + if (!window.RTCPeerConnection.prototype.getSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + this._senders = this._senders || []; + return this._senders.slice(); // return a copy of the internal state. + }; + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var sender = origAddTrack.apply(this, arguments); + if (!sender) { + sender = shimSenderWithDtmf(this, track); + this._senders.push(sender); + } + return sender; + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + origRemoveTrack.apply(this, arguments); + var idx = this._senders.indexOf(sender); + if (idx !== -1) { + this._senders.splice(idx, 1); + } + }; + } + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this2 = this; + + this._senders = this._senders || []; + origAddStream.apply(this, [stream]); + stream.getTracks().forEach(function (track) { + _this2._senders.push(shimSenderWithDtmf(_this2, track)); + }); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + this._senders = this._senders || []; + origRemoveStream.apply(this, [stream]); + + stream.getTracks().forEach(function (track) { + var sender = _this3._senders.find(function (s) { + return s.track === track; + }); + if (sender) { + // remove sender + _this3._senders.splice(_this3._senders.indexOf(sender), 1); + } + }); + }; + } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this4 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this4; + }); + return senders; + }; + + Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { + get: function get() { + if (this._dtmf === undefined) { + if (this.track.kind === 'audio') { + this._dtmf = this._pc.createDTMFSender(this.track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + } + }); + } +} + +function shimGetStats(window) { + if (!window.RTCPeerConnection) { + return; + } + + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _this5 = this; + + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + // If selector is a function then we are in the old style stats so just + // pass back the original getStats format to avoid breaking old users. + + + if (arguments.length > 0 && typeof selector === 'function') { + return origGetStats.apply(this, arguments); + } + + // When spec-style getStats is supported, return those when called with + // either no arguments or the selector argument is null. + if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) { + return origGetStats.apply(this, []); + } + + var fixChromeStats_ = function fixChromeStats_(response) { + var standardReport = {}; + var reports = response.result(); + reports.forEach(function (report) { + var standardStats = { + id: report.id, + timestamp: report.timestamp, + type: { + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }[report.type] || report.type + }; + report.names().forEach(function (name) { + standardStats[name] = report.stat(name); + }); + standardReport[standardStats.id] = standardStats; + }); + + return standardReport; + }; + + // shim getStats with maplike support + var makeMapStats = function makeMapStats(stats) { + return new Map(Object.keys(stats).map(function (key) { + return [key, stats[key]]; + })); + }; + + if (arguments.length >= 2) { + var successCallbackWrapper_ = function successCallbackWrapper_(response) { + onSucc(makeMapStats(fixChromeStats_(response))); + }; + + return origGetStats.apply(this, [successCallbackWrapper_, selector]); + } + + // promise-support + return new Promise(function (resolve, reject) { + origGetStats.apply(_this5, [function (response) { + resolve(makeMapStats(fixChromeStats_(response))); + }, reject]); + }).then(onSucc, onErr); + }; +} + +function shimSenderReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { + return; + } + + // shim sender stats. + if (!('getStats' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this6 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this6; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + var sender = this; + return this._pc.getStats().then(function (result) { + return ( + /* Note: this will include stats of all senders that + * send a track with the same id as sender.track as + * it is not possible to identify the RTCRtpSender. + */ + utils.filterStats(result, sender.track, true) + ); + }); + }; + } + + // shim receiver stats. + if (!('getStats' in window.RTCRtpReceiver.prototype)) { + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this7 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this7; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + var receiver = this; + return this._pc.getStats().then(function (result) { + return utils.filterStats(result, receiver.track, false); + }); + }; + } + + if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) { + return; + } + + // shim RTCPeerConnection.getStats(track). + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) { + var track = arguments[0]; + var sender = void 0; + var receiver = void 0; + var err = void 0; + this.getSenders().forEach(function (s) { + if (s.track === track) { + if (sender) { + err = true; + } else { + sender = s; + } + } + }); + this.getReceivers().forEach(function (r) { + if (r.track === track) { + if (receiver) { + err = true; + } else { + receiver = r; + } + } + return r.track === track; + }); + if (err || sender && receiver) { + return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError')); + } else if (sender) { + return sender.getStats(); + } else if (receiver) { + return receiver.getStats(); + } + return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError')); + } + return origGetStats.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrackWithNative(window) { + // shim addTrack/removeTrack with native variants in order to make + // the interactions with legacy getLocalStreams behave as in other browsers. + // Keeps a mapping stream.id => [stream, rtpsenders...] + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this8 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + return Object.keys(this._shimmedLocalStreams).map(function (streamId) { + return _this8._shimmedLocalStreams[streamId][0]; + }); + }; + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + if (!stream) { + return origAddTrack.apply(this, arguments); + } + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + var sender = origAddTrack.apply(this, arguments); + if (!this._shimmedLocalStreams[stream.id]) { + this._shimmedLocalStreams[stream.id] = [stream, sender]; + } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) { + this._shimmedLocalStreams[stream.id].push(sender); + } + return sender; + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this9 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this9.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + var existingSenders = this.getSenders(); + origAddStream.apply(this, arguments); + var newSenders = this.getSenders().filter(function (newSender) { + return existingSenders.indexOf(newSender) === -1; + }); + this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + delete this._shimmedLocalStreams[stream.id]; + return origRemoveStream.apply(this, arguments); + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this10 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + if (sender) { + Object.keys(this._shimmedLocalStreams).forEach(function (streamId) { + var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender); + if (idx !== -1) { + _this10._shimmedLocalStreams[streamId].splice(idx, 1); + } + if (_this10._shimmedLocalStreams[streamId].length === 1) { + delete _this10._shimmedLocalStreams[streamId]; + } + }); + } + return origRemoveTrack.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrack(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + // shim addTrack and removeTrack. + if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) { + return shimAddTrackRemoveTrackWithNative(window); + } + + // also shim pc.getLocalStreams when addTrack is shimmed + // to return the original streams. + var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams; + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this11 = this; + + var nativeStreams = origGetLocalStreams.apply(this); + this._reverseStreams = this._reverseStreams || {}; + return nativeStreams.map(function (stream) { + return _this11._reverseStreams[stream.id]; + }); + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this12 = this; + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this12.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + // Add identity mapping for consistency with addTrack. + // Unless this is being used with a stream from addTrack. + if (!this._reverseStreams[stream.id]) { + var newStream = new window.MediaStream(stream.getTracks()); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + stream = newStream; + } + origAddStream.apply(this, [stream]); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + origRemoveStream.apply(this, [this._streams[stream.id] || stream]); + delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id]; + delete this._streams[stream.id]; + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var _this13 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + var streams = [].slice.call(arguments, 1); + if (streams.length !== 1 || !streams[0].getTracks().find(function (t) { + return t === track; + })) { + // this is not fully correct but all we can manage without + // [[associated MediaStreams]] internal slot. + throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError'); + } + + var alreadyExists = this.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + var oldStream = this._streams[stream.id]; + if (oldStream) { + // this is using odd Chrome behaviour, use with caution: + // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815 + // Note: we rely on the high-level addTrack/dtmf shim to + // create the sender with a dtmf sender. + oldStream.addTrack(track); + + // Trigger ONN async. + Promise.resolve().then(function () { + _this13.dispatchEvent(new Event('negotiationneeded')); + }); + } else { + var newStream = new window.MediaStream([track]); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + this.addStream(newStream); + } + return this.getSenders().find(function (s) { + return s.track === track; + }); + }; + + // replace the internal stream id with the external one and + // vice versa. + function replaceInternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + function replaceExternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + ['createOffer', 'createAnswer'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + var _this14 = this; + + var args = arguments; + var isLegacyCall = arguments.length && typeof arguments[0] === 'function'; + if (isLegacyCall) { + return nativeMethod.apply(this, [function (description) { + var desc = replaceInternalStreamId(_this14, description); + args[0].apply(null, [desc]); + }, function (err) { + if (args[1]) { + args[1].apply(null, err); + } + }, arguments[2]]); + } + return nativeMethod.apply(this, arguments).then(function (description) { + return replaceInternalStreamId(_this14, description); + }); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + + var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + if (!arguments.length || !arguments[0].type) { + return origSetLocalDescription.apply(this, arguments); + } + arguments[0] = replaceExternalStreamId(this, arguments[0]); + return origSetLocalDescription.apply(this, arguments); + }; + + // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier + + var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription'); + Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', { + get: function get() { + var description = origLocalDescription.get.apply(this); + if (description.type === '') { + return description; + } + return replaceInternalStreamId(this, description); + } + }); + + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this15 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + // We can not yet check for sender instanceof RTCRtpSender + // since we shim RTPSender. So we check if sender._pc is set. + if (!sender._pc) { + throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError'); + } + var isLocal = sender._pc === this; + if (!isLocal) { + throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError'); + } + + // Search for the native stream the senders track belongs to. + this._streams = this._streams || {}; + var stream = void 0; + Object.keys(this._streams).forEach(function (streamid) { + var hasTrack = _this15._streams[streamid].getTracks().find(function (track) { + return sender.track === track; + }); + if (hasTrack) { + stream = _this15._streams[streamid]; + } + }); + + if (stream) { + if (stream.getTracks().length === 1) { + // if this is the last track of the stream, remove the stream. This + // takes care of any shimmed _senders. + this.removeStream(this._reverseStreams[stream.id]); + } else { + // relying on the same odd chrome behaviour as above. + stream.removeTrack(sender.track); + } + this.dispatchEvent(new Event('negotiationneeded')); + } + }; +} + +function shimPeerConnection(window, browserDetails) { + if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.webkitRTCPeerConnection; + } + if (!window.RTCPeerConnection) { + return; + } + + // shim implicit creation of RTCSessionDescription/RTCIceCandidate + if (browserDetails.version < 53) { + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } +} + +// Attempt to fix ONN in plan-b mode. +function fixNegotiationNeeded(window, browserDetails) { + utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) { + var pc = e.target; + if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') { + if (pc.signalingState !== 'stable') { + return; + } + } + return e; + }); +} + +},{"../utils.js":11,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, getSourceId) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + // getSourceId is a function that returns a promise resolving with + // the sourceId of the screen/window/tab to be shared. + if (typeof getSourceId !== 'function') { + console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function'); + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + return getSourceId(constraints).then(function (sourceId) { + var widthSpecified = constraints.video && constraints.video.width; + var heightSpecified = constraints.video && constraints.video.height; + var frameRateSpecified = constraints.video && constraints.video.frameRate; + constraints.video = { + mandatory: { + chromeMediaSource: 'desktop', + chromeMediaSourceId: sourceId, + maxFrameRate: frameRateSpecified || 3 + } + }; + if (widthSpecified) { + constraints.video.mandatory.maxWidth = widthSpecified; + } + if (heightSpecified) { + constraints.video.mandatory.maxHeight = heightSpecified; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }); + }; +} + +},{}],5:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var logging = utils.log; + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + + if (!navigator.mediaDevices) { + return; + } + + var constraintsToChrome_ = function constraintsToChrome_(c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) { + return c; + } + var cc = {}; + Object.keys(c).forEach(function (key) { + if (key === 'require' || key === 'advanced' || key === 'mediaSource') { + return; + } + var r = _typeof(c[key]) === 'object' ? c[key] : { ideal: c[key] }; + if (r.exact !== undefined && typeof r.exact === 'number') { + r.min = r.max = r.exact; + } + var oldname_ = function oldname_(prefix, name) { + if (prefix) { + return prefix + name.charAt(0).toUpperCase() + name.slice(1); + } + return name === 'deviceId' ? 'sourceId' : name; + }; + if (r.ideal !== undefined) { + cc.optional = cc.optional || []; + var oc = {}; + if (typeof r.ideal === 'number') { + oc[oldname_('min', key)] = r.ideal; + cc.optional.push(oc); + oc = {}; + oc[oldname_('max', key)] = r.ideal; + cc.optional.push(oc); + } else { + oc[oldname_('', key)] = r.ideal; + cc.optional.push(oc); + } + } + if (r.exact !== undefined && typeof r.exact !== 'number') { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_('', key)] = r.exact; + } else { + ['min', 'max'].forEach(function (mix) { + if (r[mix] !== undefined) { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_(mix, key)] = r[mix]; + } + }); + } + }); + if (c.advanced) { + cc.optional = (cc.optional || []).concat(c.advanced); + } + return cc; + }; + + var shimConstraints_ = function shimConstraints_(constraints, func) { + if (browserDetails.version >= 61) { + return func(constraints); + } + constraints = JSON.parse(JSON.stringify(constraints)); + if (constraints && _typeof(constraints.audio) === 'object') { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + constraints = JSON.parse(JSON.stringify(constraints)); + remap(constraints.audio, 'autoGainControl', 'googAutoGainControl'); + remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression'); + constraints.audio = constraintsToChrome_(constraints.audio); + } + if (constraints && _typeof(constraints.video) === 'object') { + // Shim facingMode for mobile & surface pro. + var face = constraints.video.facingMode; + face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face }); + var getSupportedFacingModeLies = browserDetails.version < 66; + + if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) { + delete constraints.video.facingMode; + var matches = void 0; + if (face.exact === 'environment' || face.ideal === 'environment') { + matches = ['back', 'rear']; + } else if (face.exact === 'user' || face.ideal === 'user') { + matches = ['front']; + } + if (matches) { + // Look for matches in label, or use last cam for back (typical). + return navigator.mediaDevices.enumerateDevices().then(function (devices) { + devices = devices.filter(function (d) { + return d.kind === 'videoinput'; + }); + var dev = devices.find(function (d) { + return matches.some(function (match) { + return d.label.toLowerCase().includes(match); + }); + }); + if (!dev && devices.length && matches.includes('back')) { + dev = devices[devices.length - 1]; // more likely the back cam + } + if (dev) { + constraints.video.deviceId = face.exact ? { exact: dev.deviceId } : { ideal: dev.deviceId }; + } + constraints.video = constraintsToChrome_(constraints.video); + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }); + } + } + constraints.video = constraintsToChrome_(constraints.video); + } + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }; + + var shimError_ = function shimError_(e) { + if (browserDetails.version >= 64) { + return e; + } + return { + name: { + PermissionDeniedError: 'NotAllowedError', + PermissionDismissedError: 'NotAllowedError', + InvalidStateError: 'NotAllowedError', + DevicesNotFoundError: 'NotFoundError', + ConstraintNotSatisfiedError: 'OverconstrainedError', + TrackStartError: 'NotReadableError', + MediaDeviceFailedDueToShutdown: 'NotAllowedError', + MediaDeviceKillSwitchOn: 'NotAllowedError', + TabCaptureError: 'AbortError', + ScreenCaptureError: 'AbortError', + DeviceCaptureError: 'AbortError' + }[e.name] || e.name, + message: e.message, + constraint: e.constraint || e.constraintName, + toString: function toString() { + return this.name + (this.message && ': ') + this.message; + } + }; + }; + + var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) { + shimConstraints_(constraints, function (c) { + navigator.webkitGetUserMedia(c, onSuccess, function (e) { + if (onError) { + onError(shimError_(e)); + } + }); + }); + }; + navigator.getUserMedia = getUserMedia_.bind(navigator); + + // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia + // function which returns a Promise, it does not accept spec-style + // constraints. + if (navigator.mediaDevices.getUserMedia) { + var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (cs) { + return shimConstraints_(cs, function (c) { + return origGetUserMedia(c).then(function (stream) { + if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) { + stream.getTracks().forEach(function (track) { + track.stop(); + }); + throw new DOMException('', 'NotFoundError'); + } + return stream; + }, function (e) { + return Promise.reject(shimError_(e)); + }); + }); + }; + } +} + +},{"../utils.js":11}],6:[function(require,module,exports){ +/* + * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.shimMaxMessageSize = shimMaxMessageSize; +exports.shimSendThrowTypeError = shimSendThrowTypeError; +exports.shimConnectionState = shimConnectionState; +exports.removeExtmapAllowMixed = removeExtmapAllowMixed; +exports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty; + +var _sdp = require('sdp'); + +var _sdp2 = _interopRequireDefault(_sdp); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function shimRTCIceCandidate(window) { + // foundation is arbitrarily chosen as an indicator for full support for + // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface + if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) { + return; + } + + var NativeRTCIceCandidate = window.RTCIceCandidate; + window.RTCIceCandidate = function RTCIceCandidate(args) { + // Remove the a= which shouldn't be part of the candidate string. + if ((typeof args === 'undefined' ? 'undefined' : _typeof(args)) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) { + args = JSON.parse(JSON.stringify(args)); + args.candidate = args.candidate.substr(2); + } + + if (args.candidate && args.candidate.length) { + // Augment the native candidate with the parsed fields. + var nativeCandidate = new NativeRTCIceCandidate(args); + var parsedCandidate = _sdp2.default.parseCandidate(args.candidate); + var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate); + + // Add a serializer that does not serialize the extra attributes. + augmentedCandidate.toJSON = function toJSON() { + return { + candidate: augmentedCandidate.candidate, + sdpMid: augmentedCandidate.sdpMid, + sdpMLineIndex: augmentedCandidate.sdpMLineIndex, + usernameFragment: augmentedCandidate.usernameFragment + }; + }; + return augmentedCandidate; + } + return new NativeRTCIceCandidate(args); + }; + window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype; + + // Hook up the augmented candidate in onicecandidate and + // addEventListener('icecandidate', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) { + if (e.candidate) { + Object.defineProperty(e, 'candidate', { + value: new window.RTCIceCandidate(e.candidate), + writable: 'false' + }); + } + return e; + }); +} + +function shimMaxMessageSize(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + + if (!('sctp' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + } + }); + } + + var sctpInDescription = function sctpInDescription(description) { + if (!description || !description.sdp) { + return false; + } + var sections = _sdp2.default.splitSections(description.sdp); + sections.shift(); + return sections.some(function (mediaSection) { + var mLine = _sdp2.default.parseMLine(mediaSection); + return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1; + }); + }; + + var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) { + // TODO: Is there a better solution for detecting Firefox? + var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/); + if (match === null || match.length < 2) { + return -1; + } + var version = parseInt(match[1], 10); + // Test for NaN (yes, this is ugly) + return version !== version ? -1 : version; + }; + + var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) { + // Every implementation we know can send at least 64 KiB. + // Note: Although Chrome is technically able to send up to 256 KiB, the + // data does not reach the other peer reliably. + // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419 + var canSendMaxMessageSize = 65536; + if (browserDetails.browser === 'firefox') { + if (browserDetails.version < 57) { + if (remoteIsFirefox === -1) { + // FF < 57 will send in 16 KiB chunks using the deprecated PPID + // fragmentation. + canSendMaxMessageSize = 16384; + } else { + // However, other FF (and RAWRTC) can reassemble PPID-fragmented + // messages. Thus, supporting ~2 GiB when sending. + canSendMaxMessageSize = 2147483637; + } + } else if (browserDetails.version < 60) { + // Currently, all FF >= 57 will reset the remote maximum message size + // to the default value when a data channel is created at a later + // stage. :( + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536; + } else { + // FF >= 60 supports sending ~2 GiB + canSendMaxMessageSize = 2147483637; + } + } + return canSendMaxMessageSize; + }; + + var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) { + // Note: 65536 bytes is the default value from the SDP spec. Also, + // every implementation we know supports receiving 65536 bytes. + var maxMessageSize = 65536; + + // FF 57 has a slightly incorrect default remote max message size, so + // we need to adjust it here to avoid a failure when sending. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697 + if (browserDetails.browser === 'firefox' && browserDetails.version === 57) { + maxMessageSize = 65535; + } + + var match = _sdp2.default.matchPrefix(description.sdp, 'a=max-message-size:'); + if (match.length > 0) { + maxMessageSize = parseInt(match[0].substr(19), 10); + } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) { + // If the maximum message size is not present in the remote SDP and + // both local and remote are Firefox, the remote peer can receive + // ~2 GiB. + maxMessageSize = 2147483637; + } + return maxMessageSize; + }; + + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + this._sctp = null; + // Chrome decided to not expose .sctp in plan-b mode. + // As usual, adapter.js has to do an 'ugly worakaround' + // to cover up the mess. + if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) { + var _getConfiguration = this.getConfiguration(), + sdpSemantics = _getConfiguration.sdpSemantics; + + if (sdpSemantics === 'plan-b') { + Object.defineProperty(this, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + }, + + enumerable: true, + configurable: true + }); + } + } + + if (sctpInDescription(arguments[0])) { + // Check if the remote is FF. + var isFirefox = getRemoteFirefoxVersion(arguments[0]); + + // Get the maximum message size the local peer is capable of sending + var canSendMMS = getCanSendMaxMessageSize(isFirefox); + + // Get the maximum message size of the remote peer. + var remoteMMS = getMaxMessageSize(arguments[0], isFirefox); + + // Determine final maximum message size + var maxMessageSize = void 0; + if (canSendMMS === 0 && remoteMMS === 0) { + maxMessageSize = Number.POSITIVE_INFINITY; + } else if (canSendMMS === 0 || remoteMMS === 0) { + maxMessageSize = Math.max(canSendMMS, remoteMMS); + } else { + maxMessageSize = Math.min(canSendMMS, remoteMMS); + } + + // Create a dummy RTCSctpTransport object and the 'maxMessageSize' + // attribute. + var sctp = {}; + Object.defineProperty(sctp, 'maxMessageSize', { + get: function get() { + return maxMessageSize; + } + }); + this._sctp = sctp; + } + + return origSetRemoteDescription.apply(this, arguments); + }; +} + +function shimSendThrowTypeError(window) { + if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) { + return; + } + + // Note: Although Firefox >= 57 has a native implementation, the maximum + // message size can be reset for all data channels at a later stage. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + + function wrapDcSend(dc, pc) { + var origDataChannelSend = dc.send; + dc.send = function send() { + var data = arguments[0]; + var length = data.length || data.size || data.byteLength; + if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) { + throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)'); + } + return origDataChannelSend.apply(dc, arguments); + }; + } + var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel; + window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() { + var dataChannel = origCreateDataChannel.apply(this, arguments); + wrapDcSend(dataChannel, this); + return dataChannel; + }; + utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) { + wrapDcSend(e.channel, e.target); + return e; + }); +} + +/* shims RTCConnectionState by pretending it is the same as iceConnectionState. + * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12 + * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect + * since DTLS failures would be hidden. See + * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827 + * for the Firefox tracking bug. + */ +function shimConnectionState(window) { + if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) { + return; + } + var proto = window.RTCPeerConnection.prototype; + Object.defineProperty(proto, 'connectionState', { + get: function get() { + return { + completed: 'connected', + checking: 'connecting' + }[this.iceConnectionState] || this.iceConnectionState; + }, + + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, 'onconnectionstatechange', { + get: function get() { + return this._onconnectionstatechange || null; + }, + set: function set(cb) { + if (this._onconnectionstatechange) { + this.removeEventListener('connectionstatechange', this._onconnectionstatechange); + delete this._onconnectionstatechange; + } + if (cb) { + this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb); + } + }, + + enumerable: true, + configurable: true + }); + + ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) { + var origMethod = proto[method]; + proto[method] = function () { + if (!this._connectionstatechangepoly) { + this._connectionstatechangepoly = function (e) { + var pc = e.target; + if (pc._lastConnectionState !== pc.connectionState) { + pc._lastConnectionState = pc.connectionState; + var newEvent = new Event('connectionstatechange', e); + pc.dispatchEvent(newEvent); + } + return e; + }; + this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly); + } + return origMethod.apply(this, arguments); + }; + }); +} + +function removeExtmapAllowMixed(window, browserDetails) { + /* remove a=extmap-allow-mixed for webrtc.org < M71 */ + if (!window.RTCPeerConnection) { + return; + } + if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) { + return; + } + if (browserDetails.browser === 'safari' && browserDetails.version >= 605) { + return; + } + var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) { + if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) { + var sdp = desc.sdp.split('\n').filter(function (line) { + return line.trim() !== 'a=extmap-allow-mixed'; + }).join('\n'); + // Safari enforces read-only-ness of RTCSessionDescription fields. + if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) { + arguments[0] = new window.RTCSessionDescription({ + type: desc.type, + sdp: sdp + }); + } else { + desc.sdp = sdp; + } + } + return nativeSRD.apply(this, arguments); + }; +} + +function shimAddIceCandidateNullOrEmpty(window, browserDetails) { + // Support for addIceCandidate(null or undefined) + // as well as addIceCandidate({candidate: "", ...}) + // https://bugs.chromium.org/p/chromium/issues/detail?id=978582 + // Note: must be called before other polyfills which change the signature. + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; + if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) { + return; + } + window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { + if (!arguments[0]) { + if (arguments[1]) { + arguments[1].apply(null); + } + return Promise.resolve(); + } + // Firefox 68+ emits and processes {candidate: "", ...}, ignore + // in older versions. + // Native support for ignoring exists for Chrome M77+. + // Safari ignores as well, exact version unknown but works in the same + // version that also ignores addIceCandidate(null). + if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') { + return Promise.resolve(); + } + return nativeAddIceCandidate.apply(this, arguments); + }; +} + +},{"./utils":11,"sdp":13}],7:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimOnTrack = shimOnTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.shimSenderGetStats = shimSenderGetStats; +exports.shimReceiverGetStats = shimReceiverGetStats; +exports.shimRemoveStream = shimRemoveStream; +exports.shimRTCDataChannel = shimRTCDataChannel; +exports.shimAddTransceiver = shimAddTransceiver; +exports.shimGetParameters = shimGetParameters; +exports.shimCreateOffer = shimCreateOffer; +exports.shimCreateAnswer = shimCreateAnswer; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimPeerConnection(window, browserDetails) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { + return; // probably media.peerconnection.enabled=false in about:config + } + if (!window.RTCPeerConnection && window.mozRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.mozRTCPeerConnection; + } + + if (browserDetails.version < 53) { + // shim away need for obsolete RTCIceCandidate/RTCSessionDescription. + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } + + var modernStatsTypes = { + inboundrtp: 'inbound-rtp', + outboundrtp: 'outbound-rtp', + candidatepair: 'candidate-pair', + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }; + + var nativeGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + return nativeGetStats.apply(this, [selector || null]).then(function (stats) { + if (browserDetails.version < 53 && !onSucc) { + // Shim only promise getStats with spec-hyphens in type names + // Leave callback version alone; misc old uses of forEach before Map + try { + stats.forEach(function (stat) { + stat.type = modernStatsTypes[stat.type] || stat.type; + }); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + // Avoid TypeError: "type" is read-only, in old versions. 34-43ish + stats.forEach(function (stat, i) { + stats.set(i, Object.assign({}, stat, { + type: modernStatsTypes[stat.type] || stat.type + })); + }); + } + } + return stats; + }).then(onSucc, onErr); + }; +} + +function shimSenderGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) { + return; + } + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map()); + }; +} + +function shimReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) { + return; + } + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this2 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this2; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + return this._pc.getStats(this.track); + }; +} + +function shimRemoveStream(window) { + if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) { + return; + } + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + utils.deprecated('removeStream', 'removeTrack'); + this.getSenders().forEach(function (sender) { + if (sender.track && stream.getTracks().includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; +} + +function shimRTCDataChannel(window) { + // rename DataChannel to RTCDataChannel (native fix in FF60): + // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851 + if (window.DataChannel && !window.RTCDataChannel) { + window.RTCDataChannel = window.DataChannel; + } +} + +function shimAddTransceiver(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; + if (origAddTransceiver) { + window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { + this.setParametersPromises = []; + var initParameters = arguments[1]; + var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters; + if (shouldPerformCheck) { + // If sendEncodings params are provided, validate grammar + initParameters.sendEncodings.forEach(function (encodingParam) { + if ('rid' in encodingParam) { + var ridRegex = /^[a-z0-9]{0,16}$/i; + if (!ridRegex.test(encodingParam.rid)) { + throw new TypeError('Invalid RID value provided.'); + } + } + if ('scaleResolutionDownBy' in encodingParam) { + if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { + throw new RangeError('scale_resolution_down_by must be >= 1.0'); + } + } + if ('maxFramerate' in encodingParam) { + if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { + throw new RangeError('max_framerate must be >= 0.0'); + } + } + }); + } + var transceiver = origAddTransceiver.apply(this, arguments); + if (shouldPerformCheck) { + // Check if the init options were applied. If not we do this in an + // asynchronous way and save the promise reference in a global object. + // This is an ugly hack, but at the same time is way more robust than + // checking the sender parameters before and after the createOffer + // Also note that after the createoffer we are not 100% sure that + // the params were asynchronously applied so we might miss the + // opportunity to recreate offer. + var sender = transceiver.sender; + + var params = sender.getParameters(); + if (!('encodings' in params) || + // Avoid being fooled by patched getParameters() below. + params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) { + params.encodings = initParameters.sendEncodings; + sender.sendEncodings = initParameters.sendEncodings; + this.setParametersPromises.push(sender.setParameters(params).then(function () { + delete sender.sendEncodings; + }).catch(function () { + delete sender.sendEncodings; + })); + } + } + return transceiver; + }; + } +} + +function shimGetParameters(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCRtpSender)) { + return; + } + var origGetParameters = window.RTCRtpSender.prototype.getParameters; + if (origGetParameters) { + window.RTCRtpSender.prototype.getParameters = function getParameters() { + var params = origGetParameters.apply(this, arguments); + if (!('encodings' in params)) { + params.encodings = [].concat(this.sendEncodings || [{}]); + } + return params; + }; + } +} + +function shimCreateOffer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer() { + var _this4 = this, + _arguments2 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateOffer.apply(_this4, _arguments2); + }).finally(function () { + _this4.setParametersPromises = []; + }); + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimCreateAnswer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; + window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { + var _this5 = this, + _arguments3 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateAnswer.apply(_this5, _arguments3); + }).finally(function () { + _this5.setParametersPromises = []; + }); + } + return origCreateAnswer.apply(this, arguments); + }; +} + +},{"../utils":11,"./getdisplaymedia":8,"./getusermedia":9}],8:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, preferredMediaSource) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + if (!(constraints && constraints.video)) { + var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined'); + err.name = 'NotFoundError'; + // from https://heycam.github.io/webidl/#idl-DOMException-error-names + err.code = 8; + return Promise.reject(err); + } + if (constraints.video === true) { + constraints.video = { mediaSource: preferredMediaSource }; + } else { + constraints.video.mediaSource = preferredMediaSource; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }; +} + +},{}],9:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + var MediaStreamTrack = window && window.MediaStreamTrack; + + navigator.getUserMedia = function (constraints, onSuccess, onError) { + // Replace Firefox 44+'s deprecation warning with unprefixed version. + utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia'); + navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); + }; + + if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + + var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object' && _typeof(c.audio) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c.audio, 'autoGainControl', 'mozAutoGainControl'); + remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeGetUserMedia(c); + }; + + if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) { + var nativeGetSettings = MediaStreamTrack.prototype.getSettings; + MediaStreamTrack.prototype.getSettings = function () { + var obj = nativeGetSettings.apply(this, arguments); + remap(obj, 'mozAutoGainControl', 'autoGainControl'); + remap(obj, 'mozNoiseSuppression', 'noiseSuppression'); + return obj; + }; + } + + if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) { + var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints; + MediaStreamTrack.prototype.applyConstraints = function (c) { + if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c, 'autoGainControl', 'mozAutoGainControl'); + remap(c, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeApplyConstraints.apply(this, [c]); + }; + } + } +} + +},{"../utils":11}],10:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimLocalStreamsAPI = shimLocalStreamsAPI; +exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; +exports.shimCallbacksAPI = shimCallbacksAPI; +exports.shimGetUserMedia = shimGetUserMedia; +exports.shimConstraints = shimConstraints; +exports.shimRTCIceServerUrls = shimRTCIceServerUrls; +exports.shimTrackEventTransceiver = shimTrackEventTransceiver; +exports.shimCreateOfferLegacy = shimCreateOfferLegacy; +exports.shimAudioContext = shimAudioContext; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimLocalStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + if (!this._localStreams) { + this._localStreams = []; + } + return this._localStreams; + }; + } + if (!('addStream' in window.RTCPeerConnection.prototype)) { + var _addTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this = this; + + if (!this._localStreams) { + this._localStreams = []; + } + if (!this._localStreams.includes(stream)) { + this._localStreams.push(stream); + } + // Try to emulate Chrome's behaviour of adding in audio-video order. + // Safari orders by track id. + stream.getAudioTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + stream.getVideoTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track) { + var _this2 = this; + + for (var _len = arguments.length, streams = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + streams[_key - 1] = arguments[_key]; + } + + if (streams) { + streams.forEach(function (stream) { + if (!_this2._localStreams) { + _this2._localStreams = [stream]; + } else if (!_this2._localStreams.includes(stream)) { + _this2._localStreams.push(stream); + } + }); + } + return _addTrack.apply(this, arguments); + }; + } + if (!('removeStream' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + if (!this._localStreams) { + this._localStreams = []; + } + var index = this._localStreams.indexOf(stream); + if (index === -1) { + return; + } + this._localStreams.splice(index, 1); + var tracks = stream.getTracks(); + this.getSenders().forEach(function (sender) { + if (tracks.includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; + } +} + +function shimRemoteStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() { + return this._remoteStreams ? this._remoteStreams : []; + }; + } + if (!('onaddstream' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', { + get: function get() { + return this._onaddstream; + }, + set: function set(f) { + var _this4 = this; + + if (this._onaddstream) { + this.removeEventListener('addstream', this._onaddstream); + this.removeEventListener('track', this._onaddstreampoly); + } + this.addEventListener('addstream', this._onaddstream = f); + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!_this4._remoteStreams) { + _this4._remoteStreams = []; + } + if (_this4._remoteStreams.includes(stream)) { + return; + } + _this4._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + _this4.dispatchEvent(event); + }); + }); + } + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var pc = this; + if (!this._onaddstreampoly) { + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!pc._remoteStreams) { + pc._remoteStreams = []; + } + if (pc._remoteStreams.indexOf(stream) >= 0) { + return; + } + pc._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + pc.dispatchEvent(event); + }); + }); + } + return origSetRemoteDescription.apply(pc, arguments); + }; + } +} + +function shimCallbacksAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + var prototype = window.RTCPeerConnection.prototype; + var origCreateOffer = prototype.createOffer; + var origCreateAnswer = prototype.createAnswer; + var setLocalDescription = prototype.setLocalDescription; + var setRemoteDescription = prototype.setRemoteDescription; + var addIceCandidate = prototype.addIceCandidate; + + prototype.createOffer = function createOffer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateOffer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + prototype.createAnswer = function createAnswer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateAnswer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + var withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setLocalDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setLocalDescription = withCallback; + + withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setRemoteDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setRemoteDescription = withCallback; + + withCallback = function withCallback(candidate, successCallback, failureCallback) { + var promise = addIceCandidate.apply(this, [candidate]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.addIceCandidate = withCallback; +} + +function shimGetUserMedia(window) { + var navigator = window && window.navigator; + + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + // shim not needed in Safari 12.1 + var mediaDevices = navigator.mediaDevices; + var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices); + navigator.mediaDevices.getUserMedia = function (constraints) { + return _getUserMedia(shimConstraints(constraints)); + }; + } + + if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) { + navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb); + }.bind(navigator); + } +} + +function shimConstraints(constraints) { + if (constraints && constraints.video !== undefined) { + return Object.assign({}, constraints, { video: utils.compactObject(constraints.video) }); + } + + return constraints; +} + +function shimRTCIceServerUrls(window) { + if (!window.RTCPeerConnection) { + return; + } + // migrate from non-spec RTCIceServer.url to RTCIceServer.urls + var OrigPeerConnection = window.RTCPeerConnection; + window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) { + if (pcConfig && pcConfig.iceServers) { + var newIceServers = []; + for (var i = 0; i < pcConfig.iceServers.length; i++) { + var server = pcConfig.iceServers[i]; + if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) { + utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls'); + server = JSON.parse(JSON.stringify(server)); + server.urls = server.url; + delete server.url; + newIceServers.push(server); + } else { + newIceServers.push(pcConfig.iceServers[i]); + } + } + pcConfig.iceServers = newIceServers; + } + return new OrigPeerConnection(pcConfig, pcConstraints); + }; + window.RTCPeerConnection.prototype = OrigPeerConnection.prototype; + // wrap static methods. Currently just generateCertificate. + if ('generateCertificate' in OrigPeerConnection) { + Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { + get: function get() { + return OrigPeerConnection.generateCertificate; + } + }); + } +} + +function shimTrackEventTransceiver(window) { + // Add event.transceiver member over deprecated event.receiver + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimCreateOfferLegacy(window) { + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) { + if (offerOptions) { + if (typeof offerOptions.offerToReceiveAudio !== 'undefined') { + // support bit values + offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio; + } + var audioTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'audio'; + }); + if (offerOptions.offerToReceiveAudio === false && audioTransceiver) { + if (audioTransceiver.direction === 'sendrecv') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('sendonly'); + } else { + audioTransceiver.direction = 'sendonly'; + } + } else if (audioTransceiver.direction === 'recvonly') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('inactive'); + } else { + audioTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) { + this.addTransceiver('audio'); + } + + if (typeof offerOptions.offerToReceiveVideo !== 'undefined') { + // support bit values + offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo; + } + var videoTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'video'; + }); + if (offerOptions.offerToReceiveVideo === false && videoTransceiver) { + if (videoTransceiver.direction === 'sendrecv') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('sendonly'); + } else { + videoTransceiver.direction = 'sendonly'; + } + } else if (videoTransceiver.direction === 'recvonly') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('inactive'); + } else { + videoTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) { + this.addTransceiver('video'); + } + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimAudioContext(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} + +},{"../utils":11}],11:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.extractVersion = extractVersion; +exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +exports.disableLog = disableLog; +exports.disableWarnings = disableWarnings; +exports.log = log; +exports.deprecated = deprecated; +exports.detectBrowser = detectBrowser; +exports.compactObject = compactObject; +exports.walkStats = walkStats; +exports.filterStats = filterStats; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var logDisabled_ = true; +var deprecationWarnings_ = true; + +/** + * Extract browser version out of the provided user agent string. + * + * @param {!string} uastring userAgent string. + * @param {!string} expr Regular expression used as match criteria. + * @param {!number} pos position in the version string to be returned. + * @return {!number} browser version. + */ +function extractVersion(uastring, expr, pos) { + var match = uastring.match(expr); + return match && match.length >= pos && parseInt(match[pos], 10); +} + +// Wraps the peerconnection event eventNameToWrap in a function +// which returns the modified event object (or false to prevent +// the event). +function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { + if (!window.RTCPeerConnection) { + return; + } + var proto = window.RTCPeerConnection.prototype; + var nativeAddEventListener = proto.addEventListener; + proto.addEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap) { + return nativeAddEventListener.apply(this, arguments); + } + var wrappedCallback = function wrappedCallback(e) { + var modifiedEvent = wrapper(e); + if (modifiedEvent) { + if (cb.handleEvent) { + cb.handleEvent(modifiedEvent); + } else { + cb(modifiedEvent); + } + } + }; + this._eventMap = this._eventMap || {}; + if (!this._eventMap[eventNameToWrap]) { + this._eventMap[eventNameToWrap] = new Map(); + } + this._eventMap[eventNameToWrap].set(cb, wrappedCallback); + return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]); + }; + + var nativeRemoveEventListener = proto.removeEventListener; + proto.removeEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) { + return nativeRemoveEventListener.apply(this, arguments); + } + if (!this._eventMap[eventNameToWrap].has(cb)) { + return nativeRemoveEventListener.apply(this, arguments); + } + var unwrappedCb = this._eventMap[eventNameToWrap].get(cb); + this._eventMap[eventNameToWrap].delete(cb); + if (this._eventMap[eventNameToWrap].size === 0) { + delete this._eventMap[eventNameToWrap]; + } + if (Object.keys(this._eventMap).length === 0) { + delete this._eventMap; + } + return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]); + }; + + Object.defineProperty(proto, 'on' + eventNameToWrap, { + get: function get() { + return this['_on' + eventNameToWrap]; + }, + set: function set(cb) { + if (this['_on' + eventNameToWrap]) { + this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]); + delete this['_on' + eventNameToWrap]; + } + if (cb) { + this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb); + } + }, + + enumerable: true, + configurable: true + }); +} + +function disableLog(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + logDisabled_ = bool; + return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled'; +} + +/** + * Disable or enable deprecation warnings + * @param {!boolean} bool set to true to disable warnings. + */ +function disableWarnings(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + deprecationWarnings_ = !bool; + return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled'); +} + +function log() { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') { + if (logDisabled_) { + return; + } + if (typeof console !== 'undefined' && typeof console.log === 'function') { + console.log.apply(console, arguments); + } + } +} + +/** + * Shows a deprecation warning suggesting the modern and spec-compatible API. + */ +function deprecated(oldMethod, newMethod) { + if (!deprecationWarnings_) { + return; + } + console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.'); +} + +/** + * Browser detector. + * + * @return {object} result containing browser and version + * properties. + */ +function detectBrowser(window) { + // Returned result object. + var result = { browser: null, version: null }; + + // Fail early if it's not a browser + if (typeof window === 'undefined' || !window.navigator) { + result.browser = 'Not a browser.'; + return result; + } + + var navigator = window.navigator; + + + if (navigator.mozGetUserMedia) { + // Firefox. + result.browser = 'firefox'; + result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1); + } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) { + // Chrome, Chromium, Webview, Opera. + // Version matches Chrome/WebRTC version. + // Chrome 74 removed webkitGetUserMedia on http as well so we need the + // more complicated fallback to webkitRTCPeerConnection. + result.browser = 'chrome'; + result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2); + } else if (navigator.mediaDevices && navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)) { + // Edge. + result.browser = 'edge'; + result.version = extractVersion(navigator.userAgent, /Edge\/(\d+).(\d+)$/, 2); + } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { + // Safari. + result.browser = 'safari'; + result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1); + result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype; + } else { + // Default fallthrough: not supported. + result.browser = 'Not a supported browser.'; + return result; + } + + return result; +} + +/** + * Checks if something is an object. + * + * @param {*} val The something you want to check. + * @return true if val is an object, false otherwise. + */ +function isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; +} + +/** + * Remove all empty objects and undefined values + * from a nested object -- an enhanced and vanilla version + * of Lodash's `compact`. + */ +function compactObject(data) { + if (!isObject(data)) { + return data; + } + + return Object.keys(data).reduce(function (accumulator, key) { + var isObj = isObject(data[key]); + var value = isObj ? compactObject(data[key]) : data[key]; + var isEmptyObject = isObj && !Object.keys(value).length; + if (value === undefined || isEmptyObject) { + return accumulator; + } + return Object.assign(accumulator, _defineProperty({}, key, value)); + }, {}); +} + +/* iterates the stats graph recursively. */ +function walkStats(stats, base, resultSet) { + if (!base || resultSet.has(base.id)) { + return; + } + resultSet.set(base.id, base); + Object.keys(base).forEach(function (name) { + if (name.endsWith('Id')) { + walkStats(stats, stats.get(base[name]), resultSet); + } else if (name.endsWith('Ids')) { + base[name].forEach(function (id) { + walkStats(stats, stats.get(id), resultSet); + }); + } + }); +} + +/* filter getStats for a sender/receiver track. */ +function filterStats(result, track, outbound) { + var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; + var filteredResult = new Map(); + if (track === null) { + return filteredResult; + } + var trackStats = []; + result.forEach(function (value) { + if (value.type === 'track' && value.trackIdentifier === track.id) { + trackStats.push(value); + } + }); + trackStats.forEach(function (trackStat) { + result.forEach(function (stats) { + if (stats.type === streamStatsType && stats.trackId === trackStat.id) { + walkStats(result, stats, filteredResult); + } + }); + }); + return filteredResult; +} + +},{}],12:[function(require,module,exports){ + +},{}],13:[function(require,module,exports){ +/* eslint-env node */ +'use strict'; + +// SDP helpers. +var SDPUtils = {}; + +// Generate an alphanumeric identifier for cname or mids. +// TODO: use UUIDs instead? https://gist.github.com/jed/982883 +SDPUtils.generateIdentifier = function() { + return Math.random().toString(36).substr(2, 10); +}; + +// The RTCP CNAME used by all peerconnections from the same JS. +SDPUtils.localCName = SDPUtils.generateIdentifier(); + +// Splits SDP into lines, dealing with both CRLF and LF. +SDPUtils.splitLines = function(blob) { + return blob.trim().split('\n').map(function(line) { + return line.trim(); + }); +}; +// Splits SDP into sessionpart and mediasections. Ensures CRLF. +SDPUtils.splitSections = function(blob) { + var parts = blob.split('\nm='); + return parts.map(function(part, index) { + return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; + }); +}; + +// returns the session description. +SDPUtils.getDescription = function(blob) { + var sections = SDPUtils.splitSections(blob); + return sections && sections[0]; +}; + +// returns the individual media sections. +SDPUtils.getMediaSections = function(blob) { + var sections = SDPUtils.splitSections(blob); + sections.shift(); + return sections; +}; + +// Returns lines that start with a certain prefix. +SDPUtils.matchPrefix = function(blob, prefix) { + return SDPUtils.splitLines(blob).filter(function(line) { + return line.indexOf(prefix) === 0; + }); +}; + +// Parses an ICE candidate line. Sample input: +// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 +// rport 55996" +SDPUtils.parseCandidate = function(line) { + var parts; + // Parse both variants. + if (line.indexOf('a=candidate:') === 0) { + parts = line.substring(12).split(' '); + } else { + parts = line.substring(10).split(' '); + } + + var candidate = { + foundation: parts[0], + component: parseInt(parts[1], 10), + protocol: parts[2].toLowerCase(), + priority: parseInt(parts[3], 10), + ip: parts[4], + address: parts[4], // address is an alias for ip. + port: parseInt(parts[5], 10), + // skip parts[6] == 'typ' + type: parts[7] + }; + + for (var i = 8; i < parts.length; i += 2) { + switch (parts[i]) { + case 'raddr': + candidate.relatedAddress = parts[i + 1]; + break; + case 'rport': + candidate.relatedPort = parseInt(parts[i + 1], 10); + break; + case 'tcptype': + candidate.tcpType = parts[i + 1]; + break; + case 'ufrag': + candidate.ufrag = parts[i + 1]; // for backward compability. + candidate.usernameFragment = parts[i + 1]; + break; + default: // extension handling, in particular ufrag + candidate[parts[i]] = parts[i + 1]; + break; + } + } + return candidate; +}; + +// Translates a candidate object into SDP candidate attribute. +SDPUtils.writeCandidate = function(candidate) { + var sdp = []; + sdp.push(candidate.foundation); + sdp.push(candidate.component); + sdp.push(candidate.protocol.toUpperCase()); + sdp.push(candidate.priority); + sdp.push(candidate.address || candidate.ip); + sdp.push(candidate.port); + + var type = candidate.type; + sdp.push('typ'); + sdp.push(type); + if (type !== 'host' && candidate.relatedAddress && + candidate.relatedPort) { + sdp.push('raddr'); + sdp.push(candidate.relatedAddress); + sdp.push('rport'); + sdp.push(candidate.relatedPort); + } + if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { + sdp.push('tcptype'); + sdp.push(candidate.tcpType); + } + if (candidate.usernameFragment || candidate.ufrag) { + sdp.push('ufrag'); + sdp.push(candidate.usernameFragment || candidate.ufrag); + } + return 'candidate:' + sdp.join(' '); +}; + +// Parses an ice-options line, returns an array of option tags. +// a=ice-options:foo bar +SDPUtils.parseIceOptions = function(line) { + return line.substr(14).split(' '); +}; + +// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: +// a=rtpmap:111 opus/48000/2 +SDPUtils.parseRtpMap = function(line) { + var parts = line.substr(9).split(' '); + var parsed = { + payloadType: parseInt(parts.shift(), 10) // was: id + }; + + parts = parts[0].split('/'); + + parsed.name = parts[0]; + parsed.clockRate = parseInt(parts[1], 10); // was: clockrate + parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1; + // legacy alias, got renamed back to channels in ORTC. + parsed.numChannels = parsed.channels; + return parsed; +}; + +// Generate an a=rtpmap line from RTCRtpCodecCapability or +// RTCRtpCodecParameters. +SDPUtils.writeRtpMap = function(codec) { + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + var channels = codec.channels || codec.numChannels || 1; + return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + + (channels !== 1 ? '/' + channels : '') + '\r\n'; +}; + +// Parses an a=extmap line (headerextension from RFC 5285). Sample input: +// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset +// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset +SDPUtils.parseExtmap = function(line) { + var parts = line.substr(9).split(' '); + return { + id: parseInt(parts[0], 10), + direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', + uri: parts[1] + }; +}; + +// Generates a=extmap line from RTCRtpHeaderExtensionParameters or +// RTCRtpHeaderExtension. +SDPUtils.writeExtmap = function(headerExtension) { + return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + + (headerExtension.direction && headerExtension.direction !== 'sendrecv' + ? '/' + headerExtension.direction + : '') + + ' ' + headerExtension.uri + '\r\n'; +}; + +// Parses an ftmp line, returns dictionary. Sample input: +// a=fmtp:96 vbr=on;cng=on +// Also deals with vbr=on; cng=on +SDPUtils.parseFmtp = function(line) { + var parsed = {}; + var kv; + var parts = line.substr(line.indexOf(' ') + 1).split(';'); + for (var j = 0; j < parts.length; j++) { + kv = parts[j].trim().split('='); + parsed[kv[0].trim()] = kv[1]; + } + return parsed; +}; + +// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeFmtp = function(codec) { + var line = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.parameters && Object.keys(codec.parameters).length) { + var params = []; + Object.keys(codec.parameters).forEach(function(param) { + if (codec.parameters[param]) { + params.push(param + '=' + codec.parameters[param]); + } else { + params.push(param); + } + }); + line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; + } + return line; +}; + +// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: +// a=rtcp-fb:98 nack rpsi +SDPUtils.parseRtcpFb = function(line) { + var parts = line.substr(line.indexOf(' ') + 1).split(' '); + return { + type: parts.shift(), + parameter: parts.join(' ') + }; +}; +// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeRtcpFb = function(codec) { + var lines = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.rtcpFeedback && codec.rtcpFeedback.length) { + // FIXME: special handling for trr-int? + codec.rtcpFeedback.forEach(function(fb) { + lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + + '\r\n'; + }); + } + return lines; +}; + +// Parses an RFC 5576 ssrc media attribute. Sample input: +// a=ssrc:3735928559 cname:something +SDPUtils.parseSsrcMedia = function(line) { + var sp = line.indexOf(' '); + var parts = { + ssrc: parseInt(line.substr(7, sp - 7), 10) + }; + var colon = line.indexOf(':', sp); + if (colon > -1) { + parts.attribute = line.substr(sp + 1, colon - sp - 1); + parts.value = line.substr(colon + 1); + } else { + parts.attribute = line.substr(sp + 1); + } + return parts; +}; + +SDPUtils.parseSsrcGroup = function(line) { + var parts = line.substr(13).split(' '); + return { + semantics: parts.shift(), + ssrcs: parts.map(function(ssrc) { + return parseInt(ssrc, 10); + }) + }; +}; + +// Extracts the MID (RFC 5888) from a media section. +// returns the MID or undefined if no mid line was found. +SDPUtils.getMid = function(mediaSection) { + var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; + if (mid) { + return mid.substr(6); + } +}; + +SDPUtils.parseFingerprint = function(line) { + var parts = line.substr(14).split(' '); + return { + algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. + value: parts[1] + }; +}; + +// Extracts DTLS parameters from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the fingerprint line as input. See also getIceParameters. +SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=fingerprint:'); + // Note: a=setup line is ignored since we use the 'auto' role. + // Note2: 'algorithm' is not case sensitive except in Edge. + return { + role: 'auto', + fingerprints: lines.map(SDPUtils.parseFingerprint) + }; +}; + +// Serializes DTLS parameters to SDP. +SDPUtils.writeDtlsParameters = function(params, setupType) { + var sdp = 'a=setup:' + setupType + '\r\n'; + params.fingerprints.forEach(function(fp) { + sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; + }); + return sdp; +}; + +// Parses a=crypto lines into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members +SDPUtils.parseCryptoLine = function(line) { + var parts = line.substr(9).split(' '); + return { + tag: parseInt(parts[0], 10), + cryptoSuite: parts[1], + keyParams: parts[2], + sessionParams: parts.slice(3), + }; +}; + +SDPUtils.writeCryptoLine = function(parameters) { + return 'a=crypto:' + parameters.tag + ' ' + + parameters.cryptoSuite + ' ' + + (typeof parameters.keyParams === 'object' + ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) + : parameters.keyParams) + + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + + '\r\n'; +}; + +// Parses the crypto key parameters into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* +SDPUtils.parseCryptoKeyParams = function(keyParams) { + if (keyParams.indexOf('inline:') !== 0) { + return null; + } + var parts = keyParams.substr(7).split('|'); + return { + keyMethod: 'inline', + keySalt: parts[0], + lifeTime: parts[1], + mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, + mkiLength: parts[2] ? parts[2].split(':')[1] : undefined, + }; +}; + +SDPUtils.writeCryptoKeyParams = function(keyParams) { + return keyParams.keyMethod + ':' + + keyParams.keySalt + + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + + (keyParams.mkiValue && keyParams.mkiLength + ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength + : ''); +}; + +// Extracts all SDES paramters. +SDPUtils.getCryptoParameters = function(mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=crypto:'); + return lines.map(SDPUtils.parseCryptoLine); +}; + +// Parses ICE information from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the ice-ufrag and ice-pwd lines as input. +SDPUtils.getIceParameters = function(mediaSection, sessionpart) { + var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=ice-ufrag:')[0]; + var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=ice-pwd:')[0]; + if (!(ufrag && pwd)) { + return null; + } + return { + usernameFragment: ufrag.substr(12), + password: pwd.substr(10), + }; +}; + +// Serializes ICE parameters to SDP. +SDPUtils.writeIceParameters = function(params) { + return 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + + 'a=ice-pwd:' + params.password + '\r\n'; +}; + +// Parses the SDP media section and returns RTCRtpParameters. +SDPUtils.parseRtpParameters = function(mediaSection) { + var description = { + codecs: [], + headerExtensions: [], + fecMechanisms: [], + rtcp: [] + }; + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..] + var pt = mline[i]; + var rtpmapline = SDPUtils.matchPrefix( + mediaSection, 'a=rtpmap:' + pt + ' ')[0]; + if (rtpmapline) { + var codec = SDPUtils.parseRtpMap(rtpmapline); + var fmtps = SDPUtils.matchPrefix( + mediaSection, 'a=fmtp:' + pt + ' '); + // Only the first a=fmtp: is considered. + codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; + codec.rtcpFeedback = SDPUtils.matchPrefix( + mediaSection, 'a=rtcp-fb:' + pt + ' ') + .map(SDPUtils.parseRtcpFb); + description.codecs.push(codec); + // parse FEC mechanisms from rtpmap lines. + switch (codec.name.toUpperCase()) { + case 'RED': + case 'ULPFEC': + description.fecMechanisms.push(codec.name.toUpperCase()); + break; + default: // only RED and ULPFEC are recognized as FEC mechanisms. + break; + } + } + } + SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) { + description.headerExtensions.push(SDPUtils.parseExtmap(line)); + }); + // FIXME: parse rtcp. + return description; +}; + +// Generates parts of the SDP media section describing the capabilities / +// parameters. +SDPUtils.writeRtpDescription = function(kind, caps) { + var sdp = ''; + + // Build the mline. + sdp += 'm=' + kind + ' '; + sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. + sdp += ' UDP/TLS/RTP/SAVPF '; + sdp += caps.codecs.map(function(codec) { + if (codec.preferredPayloadType !== undefined) { + return codec.preferredPayloadType; + } + return codec.payloadType; + }).join(' ') + '\r\n'; + + sdp += 'c=IN IP4 0.0.0.0\r\n'; + sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; + + // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. + caps.codecs.forEach(function(codec) { + sdp += SDPUtils.writeRtpMap(codec); + sdp += SDPUtils.writeFmtp(codec); + sdp += SDPUtils.writeRtcpFb(codec); + }); + var maxptime = 0; + caps.codecs.forEach(function(codec) { + if (codec.maxptime > maxptime) { + maxptime = codec.maxptime; + } + }); + if (maxptime > 0) { + sdp += 'a=maxptime:' + maxptime + '\r\n'; + } + sdp += 'a=rtcp-mux\r\n'; + + if (caps.headerExtensions) { + caps.headerExtensions.forEach(function(extension) { + sdp += SDPUtils.writeExtmap(extension); + }); + } + // FIXME: write fecMechanisms. + return sdp; +}; + +// Parses the SDP media section and returns an array of +// RTCRtpEncodingParameters. +SDPUtils.parseRtpEncodingParameters = function(mediaSection) { + var encodingParameters = []; + var description = SDPUtils.parseRtpParameters(mediaSection); + var hasRed = description.fecMechanisms.indexOf('RED') !== -1; + var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; + + // filter a=ssrc:... cname:, ignore PlanB-msid + var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(parts) { + return parts.attribute === 'cname'; + }); + var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; + var secondarySsrc; + + var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID') + .map(function(line) { + var parts = line.substr(17).split(' '); + return parts.map(function(part) { + return parseInt(part, 10); + }); + }); + if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { + secondarySsrc = flows[0][1]; + } + + description.codecs.forEach(function(codec) { + if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { + var encParam = { + ssrc: primarySsrc, + codecPayloadType: parseInt(codec.parameters.apt, 10) + }; + if (primarySsrc && secondarySsrc) { + encParam.rtx = {ssrc: secondarySsrc}; + } + encodingParameters.push(encParam); + if (hasRed) { + encParam = JSON.parse(JSON.stringify(encParam)); + encParam.fec = { + ssrc: primarySsrc, + mechanism: hasUlpfec ? 'red+ulpfec' : 'red' + }; + encodingParameters.push(encParam); + } + } + }); + if (encodingParameters.length === 0 && primarySsrc) { + encodingParameters.push({ + ssrc: primarySsrc + }); + } + + // we support both b=AS and b=TIAS but interpret AS as TIAS. + var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); + if (bandwidth.length) { + if (bandwidth[0].indexOf('b=TIAS:') === 0) { + bandwidth = parseInt(bandwidth[0].substr(7), 10); + } else if (bandwidth[0].indexOf('b=AS:') === 0) { + // use formula from JSEP to convert b=AS to TIAS value. + bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 + - (50 * 40 * 8); + } else { + bandwidth = undefined; + } + encodingParameters.forEach(function(params) { + params.maxBitrate = bandwidth; + }); + } + return encodingParameters; +}; + +// parses http://draft.ortc.org/#rtcrtcpparameters* +SDPUtils.parseRtcpParameters = function(mediaSection) { + var rtcpParameters = {}; + + // Gets the first SSRC. Note tha with RTX there might be multiple + // SSRCs. + var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(obj) { + return obj.attribute === 'cname'; + })[0]; + if (remoteSsrc) { + rtcpParameters.cname = remoteSsrc.value; + rtcpParameters.ssrc = remoteSsrc.ssrc; + } + + // Edge uses the compound attribute instead of reducedSize + // compound is !reducedSize + var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); + rtcpParameters.reducedSize = rsize.length > 0; + rtcpParameters.compound = rsize.length === 0; + + // parses the rtcp-mux attrіbute. + // Note that Edge does not support unmuxed RTCP. + var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); + rtcpParameters.mux = mux.length > 0; + + return rtcpParameters; +}; + +// parses either a=msid: or a=ssrc:... msid lines and returns +// the id of the MediaStream and MediaStreamTrack. +SDPUtils.parseMsid = function(mediaSection) { + var parts; + var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); + if (spec.length === 1) { + parts = spec[0].substr(7).split(' '); + return {stream: parts[0], track: parts[1]}; + } + var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(msidParts) { + return msidParts.attribute === 'msid'; + }); + if (planB.length > 0) { + parts = planB[0].value.split(' '); + return {stream: parts[0], track: parts[1]}; + } +}; + +// SCTP +// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back +// to draft-ietf-mmusic-sctp-sdp-05 +SDPUtils.parseSctpDescription = function(mediaSection) { + var mline = SDPUtils.parseMLine(mediaSection); + var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); + var maxMessageSize; + if (maxSizeLine.length > 0) { + maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10); + } + if (isNaN(maxMessageSize)) { + maxMessageSize = 65536; + } + var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); + if (sctpPort.length > 0) { + return { + port: parseInt(sctpPort[0].substr(12), 10), + protocol: mline.fmt, + maxMessageSize: maxMessageSize + }; + } + var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); + if (sctpMapLines.length > 0) { + var parts = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0] + .substr(10) + .split(' '); + return { + port: parseInt(parts[0], 10), + protocol: parts[1], + maxMessageSize: maxMessageSize + }; + } +}; + +// SCTP +// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers +// support by now receiving in this format, unless we originally parsed +// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line +// protocol of DTLS/SCTP -- without UDP/ or TCP/) +SDPUtils.writeSctpDescription = function(media, sctp) { + var output = []; + if (media.protocol !== 'DTLS/SCTP') { + output = [ + 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', + 'c=IN IP4 0.0.0.0\r\n', + 'a=sctp-port:' + sctp.port + '\r\n' + ]; + } else { + output = [ + 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', + 'c=IN IP4 0.0.0.0\r\n', + 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n' + ]; + } + if (sctp.maxMessageSize !== undefined) { + output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); + } + return output.join(''); +}; + +// Generate a session ID for SDP. +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 +// recommends using a cryptographically random +ve 64-bit value +// but right now this should be acceptable and within the right range +SDPUtils.generateSessionId = function() { + return Math.random().toString().substr(2, 21); +}; + +// Write boilder plate for start of SDP +// sessId argument is optional - if not supplied it will +// be generated randomly +// sessVersion is optional and defaults to 2 +// sessUser is optional and defaults to 'thisisadapterortc' +SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) { + var sessionId; + var version = sessVer !== undefined ? sessVer : 2; + if (sessId) { + sessionId = sessId; + } else { + sessionId = SDPUtils.generateSessionId(); + } + var user = sessUser || 'thisisadapterortc'; + // FIXME: sess-id should be an NTP timestamp. + return 'v=0\r\n' + + 'o=' + user + ' ' + sessionId + ' ' + version + + ' IN IP4 127.0.0.1\r\n' + + 's=-\r\n' + + 't=0 0\r\n'; +}; + +SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) { + var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps); + + // Map ICE parameters (ufrag, pwd) to SDP. + sdp += SDPUtils.writeIceParameters( + transceiver.iceGatherer.getLocalParameters()); + + // Map DTLS parameters to SDP. + sdp += SDPUtils.writeDtlsParameters( + transceiver.dtlsTransport.getLocalParameters(), + type === 'offer' ? 'actpass' : 'active'); + + sdp += 'a=mid:' + transceiver.mid + '\r\n'; + + if (transceiver.direction) { + sdp += 'a=' + transceiver.direction + '\r\n'; + } else if (transceiver.rtpSender && transceiver.rtpReceiver) { + sdp += 'a=sendrecv\r\n'; + } else if (transceiver.rtpSender) { + sdp += 'a=sendonly\r\n'; + } else if (transceiver.rtpReceiver) { + sdp += 'a=recvonly\r\n'; + } else { + sdp += 'a=inactive\r\n'; + } + + if (transceiver.rtpSender) { + // spec. + var msid = 'msid:' + stream.id + ' ' + + transceiver.rtpSender.track.id + '\r\n'; + sdp += 'a=' + msid; + + // for Chrome. + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + + ' ' + msid; + if (transceiver.sendEncodingParameters[0].rtx) { + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + + ' ' + msid; + sdp += 'a=ssrc-group:FID ' + + transceiver.sendEncodingParameters[0].ssrc + ' ' + + transceiver.sendEncodingParameters[0].rtx.ssrc + + '\r\n'; + } + } + // FIXME: this should be written by writeRtpDescription. + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + + ' cname:' + SDPUtils.localCName + '\r\n'; + if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) { + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + + ' cname:' + SDPUtils.localCName + '\r\n'; + } + return sdp; +}; + +// Gets the direction from the mediaSection or the sessionpart. +SDPUtils.getDirection = function(mediaSection, sessionpart) { + // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. + var lines = SDPUtils.splitLines(mediaSection); + for (var i = 0; i < lines.length; i++) { + switch (lines[i]) { + case 'a=sendrecv': + case 'a=sendonly': + case 'a=recvonly': + case 'a=inactive': + return lines[i].substr(2); + default: + // FIXME: What should happen here? + } + } + if (sessionpart) { + return SDPUtils.getDirection(sessionpart); + } + return 'sendrecv'; +}; + +SDPUtils.getKind = function(mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + return mline[0].substr(2); +}; + +SDPUtils.isRejected = function(mediaSection) { + return mediaSection.split(' ', 2)[1] === '0'; +}; + +SDPUtils.parseMLine = function(mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var parts = lines[0].substr(2).split(' '); + return { + kind: parts[0], + port: parseInt(parts[1], 10), + protocol: parts[2], + fmt: parts.slice(3).join(' ') + }; +}; + +SDPUtils.parseOLine = function(mediaSection) { + var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; + var parts = line.substr(2).split(' '); + return { + username: parts[0], + sessionId: parts[1], + sessionVersion: parseInt(parts[2], 10), + netType: parts[3], + addressType: parts[4], + address: parts[5] + }; +}; + +// a very naive interpretation of a valid SDP. +SDPUtils.isValidSDP = function(blob) { + if (typeof blob !== 'string' || blob.length === 0) { + return false; + } + var lines = SDPUtils.splitLines(blob); + for (var i = 0; i < lines.length; i++) { + if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { + return false; + } + // TODO: check the modifier a bit more. + } + return true; +}; + +// Expose public methods. +if (typeof module === 'object') { + module.exports = SDPUtils; +} + +},{}]},{},[1])(1) +}); diff --git a/static/lib/adapter/adapter_no_edge_no_global.js b/static/lib/adapter/adapter_no_edge_no_global.js new file mode 100644 index 0000000..5dfe9e7 --- /dev/null +++ b/static/lib/adapter/adapter_no_edge_no_global.js @@ -0,0 +1,3518 @@ +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + window = _ref.window; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + shimChrome: true, + shimFirefox: true, + shimEdge: true, + shimSafari: true + }; + + // Utils. + var logging = utils.log; + var browserDetails = utils.detectBrowser(window); + + var adapter = { + browserDetails: browserDetails, + commonShim: commonShim, + extractVersion: utils.extractVersion, + disableLog: utils.disableLog, + disableWarnings: utils.disableWarnings + }; + + // Shim browser if found. + switch (browserDetails.browser) { + case 'chrome': + if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) { + logging('Chrome shim is not included in this adapter release.'); + return adapter; + } + if (browserDetails.version === null) { + logging('Chrome shim can not determine version, not shimming.'); + return adapter; + } + logging('adapter.js shimming chrome.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = chromeShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + chromeShim.shimGetUserMedia(window, browserDetails); + chromeShim.shimMediaStream(window, browserDetails); + chromeShim.shimPeerConnection(window, browserDetails); + chromeShim.shimOnTrack(window, browserDetails); + chromeShim.shimAddTrackRemoveTrack(window, browserDetails); + chromeShim.shimGetSendersWithDtmf(window, browserDetails); + chromeShim.shimGetStats(window, browserDetails); + chromeShim.shimSenderReceiverGetStats(window, browserDetails); + chromeShim.fixNegotiationNeeded(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + case 'firefox': + if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) { + logging('Firefox shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming firefox.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = firefoxShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + firefoxShim.shimGetUserMedia(window, browserDetails); + firefoxShim.shimPeerConnection(window, browserDetails); + firefoxShim.shimOnTrack(window, browserDetails); + firefoxShim.shimRemoveStream(window, browserDetails); + firefoxShim.shimSenderGetStats(window, browserDetails); + firefoxShim.shimReceiverGetStats(window, browserDetails); + firefoxShim.shimRTCDataChannel(window, browserDetails); + firefoxShim.shimAddTransceiver(window, browserDetails); + firefoxShim.shimGetParameters(window, browserDetails); + firefoxShim.shimCreateOffer(window, browserDetails); + firefoxShim.shimCreateAnswer(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + break; + case 'edge': + if (!edgeShim || !edgeShim.shimPeerConnection || !options.shimEdge) { + logging('MS edge shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming edge.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = edgeShim; + + edgeShim.shimGetUserMedia(window, browserDetails); + edgeShim.shimGetDisplayMedia(window, browserDetails); + edgeShim.shimPeerConnection(window, browserDetails); + edgeShim.shimReplaceTrack(window, browserDetails); + + // the edge shim implements the full RTCIceCandidate object. + + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + break; + case 'safari': + if (!safariShim || !options.shimSafari) { + logging('Safari shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming safari.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = safariShim; + + // Must be called before shimCallbackAPI. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + safariShim.shimRTCIceServerUrls(window, browserDetails); + safariShim.shimCreateOfferLegacy(window, browserDetails); + safariShim.shimCallbacksAPI(window, browserDetails); + safariShim.shimLocalStreamsAPI(window, browserDetails); + safariShim.shimRemoteStreamsAPI(window, browserDetails); + safariShim.shimTrackEventTransceiver(window, browserDetails); + safariShim.shimGetUserMedia(window, browserDetails); + safariShim.shimAudioContext(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + default: + logging('Unsupported browser!'); + break; + } + + return adapter; +} + +// Browser shims. + +},{"./chrome/chrome_shim":3,"./common_shim":6,"./edge/edge_shim":12,"./firefox/firefox_shim":7,"./safari/safari_shim":10,"./utils":11}],3:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimMediaStream = shimMediaStream; +exports.shimOnTrack = shimOnTrack; +exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; +exports.shimGetStats = shimGetStats; +exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; +exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; +exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.fixNegotiationNeeded = fixNegotiationNeeded; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimMediaStream(window) { + window.MediaStream = window.MediaStream || window.webkitMediaStream; +} + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { + get: function get() { + return this._ontrack; + }, + set: function set(f) { + if (this._ontrack) { + this.removeEventListener('track', this._ontrack); + } + this.addEventListener('track', this._ontrack = f); + }, + + enumerable: true, + configurable: true + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var _this = this; + + if (!this._ontrackpoly) { + this._ontrackpoly = function (e) { + // onaddstream does not fire when a track is added to an existing + // stream. But stream.onaddtrack is implemented so we use that. + e.stream.addEventListener('addtrack', function (te) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === te.track.id; + }); + } else { + receiver = { track: te.track }; + } + + var event = new Event('track'); + event.track = te.track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + e.stream.getTracks().forEach(function (track) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === track.id; + }); + } else { + receiver = { track: track }; + } + var event = new Event('track'); + event.track = track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + }; + this.addEventListener('addstream', this._ontrackpoly); + } + return origSetRemoteDescription.apply(this, arguments); + }; + } else { + // even if RTCRtpTransceiver is in window, it is only used and + // emitted in unified-plan. Unfortunately this means we need + // to unconditionally wrap the event. + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + if (!e.transceiver) { + Object.defineProperty(e, 'transceiver', { value: { receiver: e.receiver } }); + } + return e; + }); + } +} + +function shimGetSendersWithDtmf(window) { + // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack. + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { + var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) { + return { + track: track, + get dtmf() { + if (this._dtmf === undefined) { + if (track.kind === 'audio') { + this._dtmf = pc.createDTMFSender(track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + }, + _pc: pc + }; + }; + + // augment addTrack when getSenders is not available. + if (!window.RTCPeerConnection.prototype.getSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + this._senders = this._senders || []; + return this._senders.slice(); // return a copy of the internal state. + }; + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var sender = origAddTrack.apply(this, arguments); + if (!sender) { + sender = shimSenderWithDtmf(this, track); + this._senders.push(sender); + } + return sender; + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + origRemoveTrack.apply(this, arguments); + var idx = this._senders.indexOf(sender); + if (idx !== -1) { + this._senders.splice(idx, 1); + } + }; + } + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this2 = this; + + this._senders = this._senders || []; + origAddStream.apply(this, [stream]); + stream.getTracks().forEach(function (track) { + _this2._senders.push(shimSenderWithDtmf(_this2, track)); + }); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + this._senders = this._senders || []; + origRemoveStream.apply(this, [stream]); + + stream.getTracks().forEach(function (track) { + var sender = _this3._senders.find(function (s) { + return s.track === track; + }); + if (sender) { + // remove sender + _this3._senders.splice(_this3._senders.indexOf(sender), 1); + } + }); + }; + } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this4 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this4; + }); + return senders; + }; + + Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { + get: function get() { + if (this._dtmf === undefined) { + if (this.track.kind === 'audio') { + this._dtmf = this._pc.createDTMFSender(this.track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + } + }); + } +} + +function shimGetStats(window) { + if (!window.RTCPeerConnection) { + return; + } + + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _this5 = this; + + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + // If selector is a function then we are in the old style stats so just + // pass back the original getStats format to avoid breaking old users. + + + if (arguments.length > 0 && typeof selector === 'function') { + return origGetStats.apply(this, arguments); + } + + // When spec-style getStats is supported, return those when called with + // either no arguments or the selector argument is null. + if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) { + return origGetStats.apply(this, []); + } + + var fixChromeStats_ = function fixChromeStats_(response) { + var standardReport = {}; + var reports = response.result(); + reports.forEach(function (report) { + var standardStats = { + id: report.id, + timestamp: report.timestamp, + type: { + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }[report.type] || report.type + }; + report.names().forEach(function (name) { + standardStats[name] = report.stat(name); + }); + standardReport[standardStats.id] = standardStats; + }); + + return standardReport; + }; + + // shim getStats with maplike support + var makeMapStats = function makeMapStats(stats) { + return new Map(Object.keys(stats).map(function (key) { + return [key, stats[key]]; + })); + }; + + if (arguments.length >= 2) { + var successCallbackWrapper_ = function successCallbackWrapper_(response) { + onSucc(makeMapStats(fixChromeStats_(response))); + }; + + return origGetStats.apply(this, [successCallbackWrapper_, selector]); + } + + // promise-support + return new Promise(function (resolve, reject) { + origGetStats.apply(_this5, [function (response) { + resolve(makeMapStats(fixChromeStats_(response))); + }, reject]); + }).then(onSucc, onErr); + }; +} + +function shimSenderReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { + return; + } + + // shim sender stats. + if (!('getStats' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this6 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this6; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + var sender = this; + return this._pc.getStats().then(function (result) { + return ( + /* Note: this will include stats of all senders that + * send a track with the same id as sender.track as + * it is not possible to identify the RTCRtpSender. + */ + utils.filterStats(result, sender.track, true) + ); + }); + }; + } + + // shim receiver stats. + if (!('getStats' in window.RTCRtpReceiver.prototype)) { + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this7 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this7; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + var receiver = this; + return this._pc.getStats().then(function (result) { + return utils.filterStats(result, receiver.track, false); + }); + }; + } + + if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) { + return; + } + + // shim RTCPeerConnection.getStats(track). + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) { + var track = arguments[0]; + var sender = void 0; + var receiver = void 0; + var err = void 0; + this.getSenders().forEach(function (s) { + if (s.track === track) { + if (sender) { + err = true; + } else { + sender = s; + } + } + }); + this.getReceivers().forEach(function (r) { + if (r.track === track) { + if (receiver) { + err = true; + } else { + receiver = r; + } + } + return r.track === track; + }); + if (err || sender && receiver) { + return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError')); + } else if (sender) { + return sender.getStats(); + } else if (receiver) { + return receiver.getStats(); + } + return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError')); + } + return origGetStats.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrackWithNative(window) { + // shim addTrack/removeTrack with native variants in order to make + // the interactions with legacy getLocalStreams behave as in other browsers. + // Keeps a mapping stream.id => [stream, rtpsenders...] + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this8 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + return Object.keys(this._shimmedLocalStreams).map(function (streamId) { + return _this8._shimmedLocalStreams[streamId][0]; + }); + }; + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + if (!stream) { + return origAddTrack.apply(this, arguments); + } + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + var sender = origAddTrack.apply(this, arguments); + if (!this._shimmedLocalStreams[stream.id]) { + this._shimmedLocalStreams[stream.id] = [stream, sender]; + } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) { + this._shimmedLocalStreams[stream.id].push(sender); + } + return sender; + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this9 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this9.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + var existingSenders = this.getSenders(); + origAddStream.apply(this, arguments); + var newSenders = this.getSenders().filter(function (newSender) { + return existingSenders.indexOf(newSender) === -1; + }); + this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + delete this._shimmedLocalStreams[stream.id]; + return origRemoveStream.apply(this, arguments); + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this10 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + if (sender) { + Object.keys(this._shimmedLocalStreams).forEach(function (streamId) { + var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender); + if (idx !== -1) { + _this10._shimmedLocalStreams[streamId].splice(idx, 1); + } + if (_this10._shimmedLocalStreams[streamId].length === 1) { + delete _this10._shimmedLocalStreams[streamId]; + } + }); + } + return origRemoveTrack.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrack(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + // shim addTrack and removeTrack. + if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) { + return shimAddTrackRemoveTrackWithNative(window); + } + + // also shim pc.getLocalStreams when addTrack is shimmed + // to return the original streams. + var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams; + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this11 = this; + + var nativeStreams = origGetLocalStreams.apply(this); + this._reverseStreams = this._reverseStreams || {}; + return nativeStreams.map(function (stream) { + return _this11._reverseStreams[stream.id]; + }); + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this12 = this; + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this12.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + // Add identity mapping for consistency with addTrack. + // Unless this is being used with a stream from addTrack. + if (!this._reverseStreams[stream.id]) { + var newStream = new window.MediaStream(stream.getTracks()); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + stream = newStream; + } + origAddStream.apply(this, [stream]); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + origRemoveStream.apply(this, [this._streams[stream.id] || stream]); + delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id]; + delete this._streams[stream.id]; + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var _this13 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + var streams = [].slice.call(arguments, 1); + if (streams.length !== 1 || !streams[0].getTracks().find(function (t) { + return t === track; + })) { + // this is not fully correct but all we can manage without + // [[associated MediaStreams]] internal slot. + throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError'); + } + + var alreadyExists = this.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + var oldStream = this._streams[stream.id]; + if (oldStream) { + // this is using odd Chrome behaviour, use with caution: + // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815 + // Note: we rely on the high-level addTrack/dtmf shim to + // create the sender with a dtmf sender. + oldStream.addTrack(track); + + // Trigger ONN async. + Promise.resolve().then(function () { + _this13.dispatchEvent(new Event('negotiationneeded')); + }); + } else { + var newStream = new window.MediaStream([track]); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + this.addStream(newStream); + } + return this.getSenders().find(function (s) { + return s.track === track; + }); + }; + + // replace the internal stream id with the external one and + // vice versa. + function replaceInternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + function replaceExternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + ['createOffer', 'createAnswer'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + var _this14 = this; + + var args = arguments; + var isLegacyCall = arguments.length && typeof arguments[0] === 'function'; + if (isLegacyCall) { + return nativeMethod.apply(this, [function (description) { + var desc = replaceInternalStreamId(_this14, description); + args[0].apply(null, [desc]); + }, function (err) { + if (args[1]) { + args[1].apply(null, err); + } + }, arguments[2]]); + } + return nativeMethod.apply(this, arguments).then(function (description) { + return replaceInternalStreamId(_this14, description); + }); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + + var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + if (!arguments.length || !arguments[0].type) { + return origSetLocalDescription.apply(this, arguments); + } + arguments[0] = replaceExternalStreamId(this, arguments[0]); + return origSetLocalDescription.apply(this, arguments); + }; + + // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier + + var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription'); + Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', { + get: function get() { + var description = origLocalDescription.get.apply(this); + if (description.type === '') { + return description; + } + return replaceInternalStreamId(this, description); + } + }); + + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this15 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + // We can not yet check for sender instanceof RTCRtpSender + // since we shim RTPSender. So we check if sender._pc is set. + if (!sender._pc) { + throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError'); + } + var isLocal = sender._pc === this; + if (!isLocal) { + throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError'); + } + + // Search for the native stream the senders track belongs to. + this._streams = this._streams || {}; + var stream = void 0; + Object.keys(this._streams).forEach(function (streamid) { + var hasTrack = _this15._streams[streamid].getTracks().find(function (track) { + return sender.track === track; + }); + if (hasTrack) { + stream = _this15._streams[streamid]; + } + }); + + if (stream) { + if (stream.getTracks().length === 1) { + // if this is the last track of the stream, remove the stream. This + // takes care of any shimmed _senders. + this.removeStream(this._reverseStreams[stream.id]); + } else { + // relying on the same odd chrome behaviour as above. + stream.removeTrack(sender.track); + } + this.dispatchEvent(new Event('negotiationneeded')); + } + }; +} + +function shimPeerConnection(window, browserDetails) { + if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.webkitRTCPeerConnection; + } + if (!window.RTCPeerConnection) { + return; + } + + // shim implicit creation of RTCSessionDescription/RTCIceCandidate + if (browserDetails.version < 53) { + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } +} + +// Attempt to fix ONN in plan-b mode. +function fixNegotiationNeeded(window, browserDetails) { + utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) { + var pc = e.target; + if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') { + if (pc.signalingState !== 'stable') { + return; + } + } + return e; + }); +} + +},{"../utils.js":11,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, getSourceId) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + // getSourceId is a function that returns a promise resolving with + // the sourceId of the screen/window/tab to be shared. + if (typeof getSourceId !== 'function') { + console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function'); + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + return getSourceId(constraints).then(function (sourceId) { + var widthSpecified = constraints.video && constraints.video.width; + var heightSpecified = constraints.video && constraints.video.height; + var frameRateSpecified = constraints.video && constraints.video.frameRate; + constraints.video = { + mandatory: { + chromeMediaSource: 'desktop', + chromeMediaSourceId: sourceId, + maxFrameRate: frameRateSpecified || 3 + } + }; + if (widthSpecified) { + constraints.video.mandatory.maxWidth = widthSpecified; + } + if (heightSpecified) { + constraints.video.mandatory.maxHeight = heightSpecified; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }); + }; +} + +},{}],5:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var logging = utils.log; + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + + if (!navigator.mediaDevices) { + return; + } + + var constraintsToChrome_ = function constraintsToChrome_(c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) { + return c; + } + var cc = {}; + Object.keys(c).forEach(function (key) { + if (key === 'require' || key === 'advanced' || key === 'mediaSource') { + return; + } + var r = _typeof(c[key]) === 'object' ? c[key] : { ideal: c[key] }; + if (r.exact !== undefined && typeof r.exact === 'number') { + r.min = r.max = r.exact; + } + var oldname_ = function oldname_(prefix, name) { + if (prefix) { + return prefix + name.charAt(0).toUpperCase() + name.slice(1); + } + return name === 'deviceId' ? 'sourceId' : name; + }; + if (r.ideal !== undefined) { + cc.optional = cc.optional || []; + var oc = {}; + if (typeof r.ideal === 'number') { + oc[oldname_('min', key)] = r.ideal; + cc.optional.push(oc); + oc = {}; + oc[oldname_('max', key)] = r.ideal; + cc.optional.push(oc); + } else { + oc[oldname_('', key)] = r.ideal; + cc.optional.push(oc); + } + } + if (r.exact !== undefined && typeof r.exact !== 'number') { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_('', key)] = r.exact; + } else { + ['min', 'max'].forEach(function (mix) { + if (r[mix] !== undefined) { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_(mix, key)] = r[mix]; + } + }); + } + }); + if (c.advanced) { + cc.optional = (cc.optional || []).concat(c.advanced); + } + return cc; + }; + + var shimConstraints_ = function shimConstraints_(constraints, func) { + if (browserDetails.version >= 61) { + return func(constraints); + } + constraints = JSON.parse(JSON.stringify(constraints)); + if (constraints && _typeof(constraints.audio) === 'object') { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + constraints = JSON.parse(JSON.stringify(constraints)); + remap(constraints.audio, 'autoGainControl', 'googAutoGainControl'); + remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression'); + constraints.audio = constraintsToChrome_(constraints.audio); + } + if (constraints && _typeof(constraints.video) === 'object') { + // Shim facingMode for mobile & surface pro. + var face = constraints.video.facingMode; + face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face }); + var getSupportedFacingModeLies = browserDetails.version < 66; + + if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) { + delete constraints.video.facingMode; + var matches = void 0; + if (face.exact === 'environment' || face.ideal === 'environment') { + matches = ['back', 'rear']; + } else if (face.exact === 'user' || face.ideal === 'user') { + matches = ['front']; + } + if (matches) { + // Look for matches in label, or use last cam for back (typical). + return navigator.mediaDevices.enumerateDevices().then(function (devices) { + devices = devices.filter(function (d) { + return d.kind === 'videoinput'; + }); + var dev = devices.find(function (d) { + return matches.some(function (match) { + return d.label.toLowerCase().includes(match); + }); + }); + if (!dev && devices.length && matches.includes('back')) { + dev = devices[devices.length - 1]; // more likely the back cam + } + if (dev) { + constraints.video.deviceId = face.exact ? { exact: dev.deviceId } : { ideal: dev.deviceId }; + } + constraints.video = constraintsToChrome_(constraints.video); + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }); + } + } + constraints.video = constraintsToChrome_(constraints.video); + } + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }; + + var shimError_ = function shimError_(e) { + if (browserDetails.version >= 64) { + return e; + } + return { + name: { + PermissionDeniedError: 'NotAllowedError', + PermissionDismissedError: 'NotAllowedError', + InvalidStateError: 'NotAllowedError', + DevicesNotFoundError: 'NotFoundError', + ConstraintNotSatisfiedError: 'OverconstrainedError', + TrackStartError: 'NotReadableError', + MediaDeviceFailedDueToShutdown: 'NotAllowedError', + MediaDeviceKillSwitchOn: 'NotAllowedError', + TabCaptureError: 'AbortError', + ScreenCaptureError: 'AbortError', + DeviceCaptureError: 'AbortError' + }[e.name] || e.name, + message: e.message, + constraint: e.constraint || e.constraintName, + toString: function toString() { + return this.name + (this.message && ': ') + this.message; + } + }; + }; + + var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) { + shimConstraints_(constraints, function (c) { + navigator.webkitGetUserMedia(c, onSuccess, function (e) { + if (onError) { + onError(shimError_(e)); + } + }); + }); + }; + navigator.getUserMedia = getUserMedia_.bind(navigator); + + // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia + // function which returns a Promise, it does not accept spec-style + // constraints. + if (navigator.mediaDevices.getUserMedia) { + var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (cs) { + return shimConstraints_(cs, function (c) { + return origGetUserMedia(c).then(function (stream) { + if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) { + stream.getTracks().forEach(function (track) { + track.stop(); + }); + throw new DOMException('', 'NotFoundError'); + } + return stream; + }, function (e) { + return Promise.reject(shimError_(e)); + }); + }); + }; + } +} + +},{"../utils.js":11}],6:[function(require,module,exports){ +/* + * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.shimMaxMessageSize = shimMaxMessageSize; +exports.shimSendThrowTypeError = shimSendThrowTypeError; +exports.shimConnectionState = shimConnectionState; +exports.removeExtmapAllowMixed = removeExtmapAllowMixed; +exports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty; + +var _sdp = require('sdp'); + +var _sdp2 = _interopRequireDefault(_sdp); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function shimRTCIceCandidate(window) { + // foundation is arbitrarily chosen as an indicator for full support for + // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface + if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) { + return; + } + + var NativeRTCIceCandidate = window.RTCIceCandidate; + window.RTCIceCandidate = function RTCIceCandidate(args) { + // Remove the a= which shouldn't be part of the candidate string. + if ((typeof args === 'undefined' ? 'undefined' : _typeof(args)) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) { + args = JSON.parse(JSON.stringify(args)); + args.candidate = args.candidate.substr(2); + } + + if (args.candidate && args.candidate.length) { + // Augment the native candidate with the parsed fields. + var nativeCandidate = new NativeRTCIceCandidate(args); + var parsedCandidate = _sdp2.default.parseCandidate(args.candidate); + var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate); + + // Add a serializer that does not serialize the extra attributes. + augmentedCandidate.toJSON = function toJSON() { + return { + candidate: augmentedCandidate.candidate, + sdpMid: augmentedCandidate.sdpMid, + sdpMLineIndex: augmentedCandidate.sdpMLineIndex, + usernameFragment: augmentedCandidate.usernameFragment + }; + }; + return augmentedCandidate; + } + return new NativeRTCIceCandidate(args); + }; + window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype; + + // Hook up the augmented candidate in onicecandidate and + // addEventListener('icecandidate', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) { + if (e.candidate) { + Object.defineProperty(e, 'candidate', { + value: new window.RTCIceCandidate(e.candidate), + writable: 'false' + }); + } + return e; + }); +} + +function shimMaxMessageSize(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + + if (!('sctp' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + } + }); + } + + var sctpInDescription = function sctpInDescription(description) { + if (!description || !description.sdp) { + return false; + } + var sections = _sdp2.default.splitSections(description.sdp); + sections.shift(); + return sections.some(function (mediaSection) { + var mLine = _sdp2.default.parseMLine(mediaSection); + return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1; + }); + }; + + var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) { + // TODO: Is there a better solution for detecting Firefox? + var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/); + if (match === null || match.length < 2) { + return -1; + } + var version = parseInt(match[1], 10); + // Test for NaN (yes, this is ugly) + return version !== version ? -1 : version; + }; + + var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) { + // Every implementation we know can send at least 64 KiB. + // Note: Although Chrome is technically able to send up to 256 KiB, the + // data does not reach the other peer reliably. + // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419 + var canSendMaxMessageSize = 65536; + if (browserDetails.browser === 'firefox') { + if (browserDetails.version < 57) { + if (remoteIsFirefox === -1) { + // FF < 57 will send in 16 KiB chunks using the deprecated PPID + // fragmentation. + canSendMaxMessageSize = 16384; + } else { + // However, other FF (and RAWRTC) can reassemble PPID-fragmented + // messages. Thus, supporting ~2 GiB when sending. + canSendMaxMessageSize = 2147483637; + } + } else if (browserDetails.version < 60) { + // Currently, all FF >= 57 will reset the remote maximum message size + // to the default value when a data channel is created at a later + // stage. :( + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536; + } else { + // FF >= 60 supports sending ~2 GiB + canSendMaxMessageSize = 2147483637; + } + } + return canSendMaxMessageSize; + }; + + var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) { + // Note: 65536 bytes is the default value from the SDP spec. Also, + // every implementation we know supports receiving 65536 bytes. + var maxMessageSize = 65536; + + // FF 57 has a slightly incorrect default remote max message size, so + // we need to adjust it here to avoid a failure when sending. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697 + if (browserDetails.browser === 'firefox' && browserDetails.version === 57) { + maxMessageSize = 65535; + } + + var match = _sdp2.default.matchPrefix(description.sdp, 'a=max-message-size:'); + if (match.length > 0) { + maxMessageSize = parseInt(match[0].substr(19), 10); + } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) { + // If the maximum message size is not present in the remote SDP and + // both local and remote are Firefox, the remote peer can receive + // ~2 GiB. + maxMessageSize = 2147483637; + } + return maxMessageSize; + }; + + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + this._sctp = null; + // Chrome decided to not expose .sctp in plan-b mode. + // As usual, adapter.js has to do an 'ugly worakaround' + // to cover up the mess. + if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) { + var _getConfiguration = this.getConfiguration(), + sdpSemantics = _getConfiguration.sdpSemantics; + + if (sdpSemantics === 'plan-b') { + Object.defineProperty(this, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + }, + + enumerable: true, + configurable: true + }); + } + } + + if (sctpInDescription(arguments[0])) { + // Check if the remote is FF. + var isFirefox = getRemoteFirefoxVersion(arguments[0]); + + // Get the maximum message size the local peer is capable of sending + var canSendMMS = getCanSendMaxMessageSize(isFirefox); + + // Get the maximum message size of the remote peer. + var remoteMMS = getMaxMessageSize(arguments[0], isFirefox); + + // Determine final maximum message size + var maxMessageSize = void 0; + if (canSendMMS === 0 && remoteMMS === 0) { + maxMessageSize = Number.POSITIVE_INFINITY; + } else if (canSendMMS === 0 || remoteMMS === 0) { + maxMessageSize = Math.max(canSendMMS, remoteMMS); + } else { + maxMessageSize = Math.min(canSendMMS, remoteMMS); + } + + // Create a dummy RTCSctpTransport object and the 'maxMessageSize' + // attribute. + var sctp = {}; + Object.defineProperty(sctp, 'maxMessageSize', { + get: function get() { + return maxMessageSize; + } + }); + this._sctp = sctp; + } + + return origSetRemoteDescription.apply(this, arguments); + }; +} + +function shimSendThrowTypeError(window) { + if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) { + return; + } + + // Note: Although Firefox >= 57 has a native implementation, the maximum + // message size can be reset for all data channels at a later stage. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + + function wrapDcSend(dc, pc) { + var origDataChannelSend = dc.send; + dc.send = function send() { + var data = arguments[0]; + var length = data.length || data.size || data.byteLength; + if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) { + throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)'); + } + return origDataChannelSend.apply(dc, arguments); + }; + } + var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel; + window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() { + var dataChannel = origCreateDataChannel.apply(this, arguments); + wrapDcSend(dataChannel, this); + return dataChannel; + }; + utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) { + wrapDcSend(e.channel, e.target); + return e; + }); +} + +/* shims RTCConnectionState by pretending it is the same as iceConnectionState. + * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12 + * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect + * since DTLS failures would be hidden. See + * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827 + * for the Firefox tracking bug. + */ +function shimConnectionState(window) { + if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) { + return; + } + var proto = window.RTCPeerConnection.prototype; + Object.defineProperty(proto, 'connectionState', { + get: function get() { + return { + completed: 'connected', + checking: 'connecting' + }[this.iceConnectionState] || this.iceConnectionState; + }, + + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, 'onconnectionstatechange', { + get: function get() { + return this._onconnectionstatechange || null; + }, + set: function set(cb) { + if (this._onconnectionstatechange) { + this.removeEventListener('connectionstatechange', this._onconnectionstatechange); + delete this._onconnectionstatechange; + } + if (cb) { + this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb); + } + }, + + enumerable: true, + configurable: true + }); + + ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) { + var origMethod = proto[method]; + proto[method] = function () { + if (!this._connectionstatechangepoly) { + this._connectionstatechangepoly = function (e) { + var pc = e.target; + if (pc._lastConnectionState !== pc.connectionState) { + pc._lastConnectionState = pc.connectionState; + var newEvent = new Event('connectionstatechange', e); + pc.dispatchEvent(newEvent); + } + return e; + }; + this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly); + } + return origMethod.apply(this, arguments); + }; + }); +} + +function removeExtmapAllowMixed(window, browserDetails) { + /* remove a=extmap-allow-mixed for webrtc.org < M71 */ + if (!window.RTCPeerConnection) { + return; + } + if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) { + return; + } + if (browserDetails.browser === 'safari' && browserDetails.version >= 605) { + return; + } + var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) { + if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) { + var sdp = desc.sdp.split('\n').filter(function (line) { + return line.trim() !== 'a=extmap-allow-mixed'; + }).join('\n'); + // Safari enforces read-only-ness of RTCSessionDescription fields. + if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) { + arguments[0] = new window.RTCSessionDescription({ + type: desc.type, + sdp: sdp + }); + } else { + desc.sdp = sdp; + } + } + return nativeSRD.apply(this, arguments); + }; +} + +function shimAddIceCandidateNullOrEmpty(window, browserDetails) { + // Support for addIceCandidate(null or undefined) + // as well as addIceCandidate({candidate: "", ...}) + // https://bugs.chromium.org/p/chromium/issues/detail?id=978582 + // Note: must be called before other polyfills which change the signature. + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; + if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) { + return; + } + window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { + if (!arguments[0]) { + if (arguments[1]) { + arguments[1].apply(null); + } + return Promise.resolve(); + } + // Firefox 68+ emits and processes {candidate: "", ...}, ignore + // in older versions. + // Native support for ignoring exists for Chrome M77+. + // Safari ignores as well, exact version unknown but works in the same + // version that also ignores addIceCandidate(null). + if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') { + return Promise.resolve(); + } + return nativeAddIceCandidate.apply(this, arguments); + }; +} + +},{"./utils":11,"sdp":13}],7:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimOnTrack = shimOnTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.shimSenderGetStats = shimSenderGetStats; +exports.shimReceiverGetStats = shimReceiverGetStats; +exports.shimRemoveStream = shimRemoveStream; +exports.shimRTCDataChannel = shimRTCDataChannel; +exports.shimAddTransceiver = shimAddTransceiver; +exports.shimGetParameters = shimGetParameters; +exports.shimCreateOffer = shimCreateOffer; +exports.shimCreateAnswer = shimCreateAnswer; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimPeerConnection(window, browserDetails) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { + return; // probably media.peerconnection.enabled=false in about:config + } + if (!window.RTCPeerConnection && window.mozRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.mozRTCPeerConnection; + } + + if (browserDetails.version < 53) { + // shim away need for obsolete RTCIceCandidate/RTCSessionDescription. + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } + + var modernStatsTypes = { + inboundrtp: 'inbound-rtp', + outboundrtp: 'outbound-rtp', + candidatepair: 'candidate-pair', + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }; + + var nativeGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + return nativeGetStats.apply(this, [selector || null]).then(function (stats) { + if (browserDetails.version < 53 && !onSucc) { + // Shim only promise getStats with spec-hyphens in type names + // Leave callback version alone; misc old uses of forEach before Map + try { + stats.forEach(function (stat) { + stat.type = modernStatsTypes[stat.type] || stat.type; + }); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + // Avoid TypeError: "type" is read-only, in old versions. 34-43ish + stats.forEach(function (stat, i) { + stats.set(i, Object.assign({}, stat, { + type: modernStatsTypes[stat.type] || stat.type + })); + }); + } + } + return stats; + }).then(onSucc, onErr); + }; +} + +function shimSenderGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) { + return; + } + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map()); + }; +} + +function shimReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) { + return; + } + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this2 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this2; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + return this._pc.getStats(this.track); + }; +} + +function shimRemoveStream(window) { + if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) { + return; + } + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + utils.deprecated('removeStream', 'removeTrack'); + this.getSenders().forEach(function (sender) { + if (sender.track && stream.getTracks().includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; +} + +function shimRTCDataChannel(window) { + // rename DataChannel to RTCDataChannel (native fix in FF60): + // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851 + if (window.DataChannel && !window.RTCDataChannel) { + window.RTCDataChannel = window.DataChannel; + } +} + +function shimAddTransceiver(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; + if (origAddTransceiver) { + window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { + this.setParametersPromises = []; + var initParameters = arguments[1]; + var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters; + if (shouldPerformCheck) { + // If sendEncodings params are provided, validate grammar + initParameters.sendEncodings.forEach(function (encodingParam) { + if ('rid' in encodingParam) { + var ridRegex = /^[a-z0-9]{0,16}$/i; + if (!ridRegex.test(encodingParam.rid)) { + throw new TypeError('Invalid RID value provided.'); + } + } + if ('scaleResolutionDownBy' in encodingParam) { + if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { + throw new RangeError('scale_resolution_down_by must be >= 1.0'); + } + } + if ('maxFramerate' in encodingParam) { + if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { + throw new RangeError('max_framerate must be >= 0.0'); + } + } + }); + } + var transceiver = origAddTransceiver.apply(this, arguments); + if (shouldPerformCheck) { + // Check if the init options were applied. If not we do this in an + // asynchronous way and save the promise reference in a global object. + // This is an ugly hack, but at the same time is way more robust than + // checking the sender parameters before and after the createOffer + // Also note that after the createoffer we are not 100% sure that + // the params were asynchronously applied so we might miss the + // opportunity to recreate offer. + var sender = transceiver.sender; + + var params = sender.getParameters(); + if (!('encodings' in params) || + // Avoid being fooled by patched getParameters() below. + params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) { + params.encodings = initParameters.sendEncodings; + sender.sendEncodings = initParameters.sendEncodings; + this.setParametersPromises.push(sender.setParameters(params).then(function () { + delete sender.sendEncodings; + }).catch(function () { + delete sender.sendEncodings; + })); + } + } + return transceiver; + }; + } +} + +function shimGetParameters(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCRtpSender)) { + return; + } + var origGetParameters = window.RTCRtpSender.prototype.getParameters; + if (origGetParameters) { + window.RTCRtpSender.prototype.getParameters = function getParameters() { + var params = origGetParameters.apply(this, arguments); + if (!('encodings' in params)) { + params.encodings = [].concat(this.sendEncodings || [{}]); + } + return params; + }; + } +} + +function shimCreateOffer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer() { + var _this4 = this, + _arguments2 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateOffer.apply(_this4, _arguments2); + }).finally(function () { + _this4.setParametersPromises = []; + }); + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimCreateAnswer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; + window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { + var _this5 = this, + _arguments3 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateAnswer.apply(_this5, _arguments3); + }).finally(function () { + _this5.setParametersPromises = []; + }); + } + return origCreateAnswer.apply(this, arguments); + }; +} + +},{"../utils":11,"./getdisplaymedia":8,"./getusermedia":9}],8:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, preferredMediaSource) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + if (!(constraints && constraints.video)) { + var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined'); + err.name = 'NotFoundError'; + // from https://heycam.github.io/webidl/#idl-DOMException-error-names + err.code = 8; + return Promise.reject(err); + } + if (constraints.video === true) { + constraints.video = { mediaSource: preferredMediaSource }; + } else { + constraints.video.mediaSource = preferredMediaSource; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }; +} + +},{}],9:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + var MediaStreamTrack = window && window.MediaStreamTrack; + + navigator.getUserMedia = function (constraints, onSuccess, onError) { + // Replace Firefox 44+'s deprecation warning with unprefixed version. + utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia'); + navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); + }; + + if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + + var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object' && _typeof(c.audio) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c.audio, 'autoGainControl', 'mozAutoGainControl'); + remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeGetUserMedia(c); + }; + + if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) { + var nativeGetSettings = MediaStreamTrack.prototype.getSettings; + MediaStreamTrack.prototype.getSettings = function () { + var obj = nativeGetSettings.apply(this, arguments); + remap(obj, 'mozAutoGainControl', 'autoGainControl'); + remap(obj, 'mozNoiseSuppression', 'noiseSuppression'); + return obj; + }; + } + + if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) { + var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints; + MediaStreamTrack.prototype.applyConstraints = function (c) { + if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c, 'autoGainControl', 'mozAutoGainControl'); + remap(c, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeApplyConstraints.apply(this, [c]); + }; + } + } +} + +},{"../utils":11}],10:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimLocalStreamsAPI = shimLocalStreamsAPI; +exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; +exports.shimCallbacksAPI = shimCallbacksAPI; +exports.shimGetUserMedia = shimGetUserMedia; +exports.shimConstraints = shimConstraints; +exports.shimRTCIceServerUrls = shimRTCIceServerUrls; +exports.shimTrackEventTransceiver = shimTrackEventTransceiver; +exports.shimCreateOfferLegacy = shimCreateOfferLegacy; +exports.shimAudioContext = shimAudioContext; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimLocalStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + if (!this._localStreams) { + this._localStreams = []; + } + return this._localStreams; + }; + } + if (!('addStream' in window.RTCPeerConnection.prototype)) { + var _addTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this = this; + + if (!this._localStreams) { + this._localStreams = []; + } + if (!this._localStreams.includes(stream)) { + this._localStreams.push(stream); + } + // Try to emulate Chrome's behaviour of adding in audio-video order. + // Safari orders by track id. + stream.getAudioTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + stream.getVideoTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track) { + var _this2 = this; + + for (var _len = arguments.length, streams = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + streams[_key - 1] = arguments[_key]; + } + + if (streams) { + streams.forEach(function (stream) { + if (!_this2._localStreams) { + _this2._localStreams = [stream]; + } else if (!_this2._localStreams.includes(stream)) { + _this2._localStreams.push(stream); + } + }); + } + return _addTrack.apply(this, arguments); + }; + } + if (!('removeStream' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + if (!this._localStreams) { + this._localStreams = []; + } + var index = this._localStreams.indexOf(stream); + if (index === -1) { + return; + } + this._localStreams.splice(index, 1); + var tracks = stream.getTracks(); + this.getSenders().forEach(function (sender) { + if (tracks.includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; + } +} + +function shimRemoteStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() { + return this._remoteStreams ? this._remoteStreams : []; + }; + } + if (!('onaddstream' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', { + get: function get() { + return this._onaddstream; + }, + set: function set(f) { + var _this4 = this; + + if (this._onaddstream) { + this.removeEventListener('addstream', this._onaddstream); + this.removeEventListener('track', this._onaddstreampoly); + } + this.addEventListener('addstream', this._onaddstream = f); + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!_this4._remoteStreams) { + _this4._remoteStreams = []; + } + if (_this4._remoteStreams.includes(stream)) { + return; + } + _this4._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + _this4.dispatchEvent(event); + }); + }); + } + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var pc = this; + if (!this._onaddstreampoly) { + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!pc._remoteStreams) { + pc._remoteStreams = []; + } + if (pc._remoteStreams.indexOf(stream) >= 0) { + return; + } + pc._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + pc.dispatchEvent(event); + }); + }); + } + return origSetRemoteDescription.apply(pc, arguments); + }; + } +} + +function shimCallbacksAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + var prototype = window.RTCPeerConnection.prototype; + var origCreateOffer = prototype.createOffer; + var origCreateAnswer = prototype.createAnswer; + var setLocalDescription = prototype.setLocalDescription; + var setRemoteDescription = prototype.setRemoteDescription; + var addIceCandidate = prototype.addIceCandidate; + + prototype.createOffer = function createOffer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateOffer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + prototype.createAnswer = function createAnswer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateAnswer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + var withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setLocalDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setLocalDescription = withCallback; + + withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setRemoteDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setRemoteDescription = withCallback; + + withCallback = function withCallback(candidate, successCallback, failureCallback) { + var promise = addIceCandidate.apply(this, [candidate]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.addIceCandidate = withCallback; +} + +function shimGetUserMedia(window) { + var navigator = window && window.navigator; + + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + // shim not needed in Safari 12.1 + var mediaDevices = navigator.mediaDevices; + var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices); + navigator.mediaDevices.getUserMedia = function (constraints) { + return _getUserMedia(shimConstraints(constraints)); + }; + } + + if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) { + navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb); + }.bind(navigator); + } +} + +function shimConstraints(constraints) { + if (constraints && constraints.video !== undefined) { + return Object.assign({}, constraints, { video: utils.compactObject(constraints.video) }); + } + + return constraints; +} + +function shimRTCIceServerUrls(window) { + if (!window.RTCPeerConnection) { + return; + } + // migrate from non-spec RTCIceServer.url to RTCIceServer.urls + var OrigPeerConnection = window.RTCPeerConnection; + window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) { + if (pcConfig && pcConfig.iceServers) { + var newIceServers = []; + for (var i = 0; i < pcConfig.iceServers.length; i++) { + var server = pcConfig.iceServers[i]; + if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) { + utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls'); + server = JSON.parse(JSON.stringify(server)); + server.urls = server.url; + delete server.url; + newIceServers.push(server); + } else { + newIceServers.push(pcConfig.iceServers[i]); + } + } + pcConfig.iceServers = newIceServers; + } + return new OrigPeerConnection(pcConfig, pcConstraints); + }; + window.RTCPeerConnection.prototype = OrigPeerConnection.prototype; + // wrap static methods. Currently just generateCertificate. + if ('generateCertificate' in OrigPeerConnection) { + Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { + get: function get() { + return OrigPeerConnection.generateCertificate; + } + }); + } +} + +function shimTrackEventTransceiver(window) { + // Add event.transceiver member over deprecated event.receiver + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimCreateOfferLegacy(window) { + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) { + if (offerOptions) { + if (typeof offerOptions.offerToReceiveAudio !== 'undefined') { + // support bit values + offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio; + } + var audioTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'audio'; + }); + if (offerOptions.offerToReceiveAudio === false && audioTransceiver) { + if (audioTransceiver.direction === 'sendrecv') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('sendonly'); + } else { + audioTransceiver.direction = 'sendonly'; + } + } else if (audioTransceiver.direction === 'recvonly') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('inactive'); + } else { + audioTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) { + this.addTransceiver('audio'); + } + + if (typeof offerOptions.offerToReceiveVideo !== 'undefined') { + // support bit values + offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo; + } + var videoTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'video'; + }); + if (offerOptions.offerToReceiveVideo === false && videoTransceiver) { + if (videoTransceiver.direction === 'sendrecv') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('sendonly'); + } else { + videoTransceiver.direction = 'sendonly'; + } + } else if (videoTransceiver.direction === 'recvonly') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('inactive'); + } else { + videoTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) { + this.addTransceiver('video'); + } + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimAudioContext(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} + +},{"../utils":11}],11:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.extractVersion = extractVersion; +exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +exports.disableLog = disableLog; +exports.disableWarnings = disableWarnings; +exports.log = log; +exports.deprecated = deprecated; +exports.detectBrowser = detectBrowser; +exports.compactObject = compactObject; +exports.walkStats = walkStats; +exports.filterStats = filterStats; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var logDisabled_ = true; +var deprecationWarnings_ = true; + +/** + * Extract browser version out of the provided user agent string. + * + * @param {!string} uastring userAgent string. + * @param {!string} expr Regular expression used as match criteria. + * @param {!number} pos position in the version string to be returned. + * @return {!number} browser version. + */ +function extractVersion(uastring, expr, pos) { + var match = uastring.match(expr); + return match && match.length >= pos && parseInt(match[pos], 10); +} + +// Wraps the peerconnection event eventNameToWrap in a function +// which returns the modified event object (or false to prevent +// the event). +function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { + if (!window.RTCPeerConnection) { + return; + } + var proto = window.RTCPeerConnection.prototype; + var nativeAddEventListener = proto.addEventListener; + proto.addEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap) { + return nativeAddEventListener.apply(this, arguments); + } + var wrappedCallback = function wrappedCallback(e) { + var modifiedEvent = wrapper(e); + if (modifiedEvent) { + if (cb.handleEvent) { + cb.handleEvent(modifiedEvent); + } else { + cb(modifiedEvent); + } + } + }; + this._eventMap = this._eventMap || {}; + if (!this._eventMap[eventNameToWrap]) { + this._eventMap[eventNameToWrap] = new Map(); + } + this._eventMap[eventNameToWrap].set(cb, wrappedCallback); + return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]); + }; + + var nativeRemoveEventListener = proto.removeEventListener; + proto.removeEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) { + return nativeRemoveEventListener.apply(this, arguments); + } + if (!this._eventMap[eventNameToWrap].has(cb)) { + return nativeRemoveEventListener.apply(this, arguments); + } + var unwrappedCb = this._eventMap[eventNameToWrap].get(cb); + this._eventMap[eventNameToWrap].delete(cb); + if (this._eventMap[eventNameToWrap].size === 0) { + delete this._eventMap[eventNameToWrap]; + } + if (Object.keys(this._eventMap).length === 0) { + delete this._eventMap; + } + return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]); + }; + + Object.defineProperty(proto, 'on' + eventNameToWrap, { + get: function get() { + return this['_on' + eventNameToWrap]; + }, + set: function set(cb) { + if (this['_on' + eventNameToWrap]) { + this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]); + delete this['_on' + eventNameToWrap]; + } + if (cb) { + this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb); + } + }, + + enumerable: true, + configurable: true + }); +} + +function disableLog(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + logDisabled_ = bool; + return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled'; +} + +/** + * Disable or enable deprecation warnings + * @param {!boolean} bool set to true to disable warnings. + */ +function disableWarnings(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + deprecationWarnings_ = !bool; + return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled'); +} + +function log() { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') { + if (logDisabled_) { + return; + } + if (typeof console !== 'undefined' && typeof console.log === 'function') { + console.log.apply(console, arguments); + } + } +} + +/** + * Shows a deprecation warning suggesting the modern and spec-compatible API. + */ +function deprecated(oldMethod, newMethod) { + if (!deprecationWarnings_) { + return; + } + console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.'); +} + +/** + * Browser detector. + * + * @return {object} result containing browser and version + * properties. + */ +function detectBrowser(window) { + // Returned result object. + var result = { browser: null, version: null }; + + // Fail early if it's not a browser + if (typeof window === 'undefined' || !window.navigator) { + result.browser = 'Not a browser.'; + return result; + } + + var navigator = window.navigator; + + + if (navigator.mozGetUserMedia) { + // Firefox. + result.browser = 'firefox'; + result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1); + } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) { + // Chrome, Chromium, Webview, Opera. + // Version matches Chrome/WebRTC version. + // Chrome 74 removed webkitGetUserMedia on http as well so we need the + // more complicated fallback to webkitRTCPeerConnection. + result.browser = 'chrome'; + result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2); + } else if (navigator.mediaDevices && navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)) { + // Edge. + result.browser = 'edge'; + result.version = extractVersion(navigator.userAgent, /Edge\/(\d+).(\d+)$/, 2); + } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { + // Safari. + result.browser = 'safari'; + result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1); + result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype; + } else { + // Default fallthrough: not supported. + result.browser = 'Not a supported browser.'; + return result; + } + + return result; +} + +/** + * Checks if something is an object. + * + * @param {*} val The something you want to check. + * @return true if val is an object, false otherwise. + */ +function isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; +} + +/** + * Remove all empty objects and undefined values + * from a nested object -- an enhanced and vanilla version + * of Lodash's `compact`. + */ +function compactObject(data) { + if (!isObject(data)) { + return data; + } + + return Object.keys(data).reduce(function (accumulator, key) { + var isObj = isObject(data[key]); + var value = isObj ? compactObject(data[key]) : data[key]; + var isEmptyObject = isObj && !Object.keys(value).length; + if (value === undefined || isEmptyObject) { + return accumulator; + } + return Object.assign(accumulator, _defineProperty({}, key, value)); + }, {}); +} + +/* iterates the stats graph recursively. */ +function walkStats(stats, base, resultSet) { + if (!base || resultSet.has(base.id)) { + return; + } + resultSet.set(base.id, base); + Object.keys(base).forEach(function (name) { + if (name.endsWith('Id')) { + walkStats(stats, stats.get(base[name]), resultSet); + } else if (name.endsWith('Ids')) { + base[name].forEach(function (id) { + walkStats(stats, stats.get(id), resultSet); + }); + } + }); +} + +/* filter getStats for a sender/receiver track. */ +function filterStats(result, track, outbound) { + var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; + var filteredResult = new Map(); + if (track === null) { + return filteredResult; + } + var trackStats = []; + result.forEach(function (value) { + if (value.type === 'track' && value.trackIdentifier === track.id) { + trackStats.push(value); + } + }); + trackStats.forEach(function (trackStat) { + result.forEach(function (stats) { + if (stats.type === streamStatsType && stats.trackId === trackStat.id) { + walkStats(result, stats, filteredResult); + } + }); + }); + return filteredResult; +} + +},{}],12:[function(require,module,exports){ + +},{}],13:[function(require,module,exports){ +/* eslint-env node */ +'use strict'; + +// SDP helpers. +var SDPUtils = {}; + +// Generate an alphanumeric identifier for cname or mids. +// TODO: use UUIDs instead? https://gist.github.com/jed/982883 +SDPUtils.generateIdentifier = function() { + return Math.random().toString(36).substr(2, 10); +}; + +// The RTCP CNAME used by all peerconnections from the same JS. +SDPUtils.localCName = SDPUtils.generateIdentifier(); + +// Splits SDP into lines, dealing with both CRLF and LF. +SDPUtils.splitLines = function(blob) { + return blob.trim().split('\n').map(function(line) { + return line.trim(); + }); +}; +// Splits SDP into sessionpart and mediasections. Ensures CRLF. +SDPUtils.splitSections = function(blob) { + var parts = blob.split('\nm='); + return parts.map(function(part, index) { + return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; + }); +}; + +// returns the session description. +SDPUtils.getDescription = function(blob) { + var sections = SDPUtils.splitSections(blob); + return sections && sections[0]; +}; + +// returns the individual media sections. +SDPUtils.getMediaSections = function(blob) { + var sections = SDPUtils.splitSections(blob); + sections.shift(); + return sections; +}; + +// Returns lines that start with a certain prefix. +SDPUtils.matchPrefix = function(blob, prefix) { + return SDPUtils.splitLines(blob).filter(function(line) { + return line.indexOf(prefix) === 0; + }); +}; + +// Parses an ICE candidate line. Sample input: +// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 +// rport 55996" +SDPUtils.parseCandidate = function(line) { + var parts; + // Parse both variants. + if (line.indexOf('a=candidate:') === 0) { + parts = line.substring(12).split(' '); + } else { + parts = line.substring(10).split(' '); + } + + var candidate = { + foundation: parts[0], + component: parseInt(parts[1], 10), + protocol: parts[2].toLowerCase(), + priority: parseInt(parts[3], 10), + ip: parts[4], + address: parts[4], // address is an alias for ip. + port: parseInt(parts[5], 10), + // skip parts[6] == 'typ' + type: parts[7] + }; + + for (var i = 8; i < parts.length; i += 2) { + switch (parts[i]) { + case 'raddr': + candidate.relatedAddress = parts[i + 1]; + break; + case 'rport': + candidate.relatedPort = parseInt(parts[i + 1], 10); + break; + case 'tcptype': + candidate.tcpType = parts[i + 1]; + break; + case 'ufrag': + candidate.ufrag = parts[i + 1]; // for backward compability. + candidate.usernameFragment = parts[i + 1]; + break; + default: // extension handling, in particular ufrag + candidate[parts[i]] = parts[i + 1]; + break; + } + } + return candidate; +}; + +// Translates a candidate object into SDP candidate attribute. +SDPUtils.writeCandidate = function(candidate) { + var sdp = []; + sdp.push(candidate.foundation); + sdp.push(candidate.component); + sdp.push(candidate.protocol.toUpperCase()); + sdp.push(candidate.priority); + sdp.push(candidate.address || candidate.ip); + sdp.push(candidate.port); + + var type = candidate.type; + sdp.push('typ'); + sdp.push(type); + if (type !== 'host' && candidate.relatedAddress && + candidate.relatedPort) { + sdp.push('raddr'); + sdp.push(candidate.relatedAddress); + sdp.push('rport'); + sdp.push(candidate.relatedPort); + } + if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { + sdp.push('tcptype'); + sdp.push(candidate.tcpType); + } + if (candidate.usernameFragment || candidate.ufrag) { + sdp.push('ufrag'); + sdp.push(candidate.usernameFragment || candidate.ufrag); + } + return 'candidate:' + sdp.join(' '); +}; + +// Parses an ice-options line, returns an array of option tags. +// a=ice-options:foo bar +SDPUtils.parseIceOptions = function(line) { + return line.substr(14).split(' '); +}; + +// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: +// a=rtpmap:111 opus/48000/2 +SDPUtils.parseRtpMap = function(line) { + var parts = line.substr(9).split(' '); + var parsed = { + payloadType: parseInt(parts.shift(), 10) // was: id + }; + + parts = parts[0].split('/'); + + parsed.name = parts[0]; + parsed.clockRate = parseInt(parts[1], 10); // was: clockrate + parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1; + // legacy alias, got renamed back to channels in ORTC. + parsed.numChannels = parsed.channels; + return parsed; +}; + +// Generate an a=rtpmap line from RTCRtpCodecCapability or +// RTCRtpCodecParameters. +SDPUtils.writeRtpMap = function(codec) { + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + var channels = codec.channels || codec.numChannels || 1; + return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + + (channels !== 1 ? '/' + channels : '') + '\r\n'; +}; + +// Parses an a=extmap line (headerextension from RFC 5285). Sample input: +// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset +// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset +SDPUtils.parseExtmap = function(line) { + var parts = line.substr(9).split(' '); + return { + id: parseInt(parts[0], 10), + direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', + uri: parts[1] + }; +}; + +// Generates a=extmap line from RTCRtpHeaderExtensionParameters or +// RTCRtpHeaderExtension. +SDPUtils.writeExtmap = function(headerExtension) { + return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + + (headerExtension.direction && headerExtension.direction !== 'sendrecv' + ? '/' + headerExtension.direction + : '') + + ' ' + headerExtension.uri + '\r\n'; +}; + +// Parses an ftmp line, returns dictionary. Sample input: +// a=fmtp:96 vbr=on;cng=on +// Also deals with vbr=on; cng=on +SDPUtils.parseFmtp = function(line) { + var parsed = {}; + var kv; + var parts = line.substr(line.indexOf(' ') + 1).split(';'); + for (var j = 0; j < parts.length; j++) { + kv = parts[j].trim().split('='); + parsed[kv[0].trim()] = kv[1]; + } + return parsed; +}; + +// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeFmtp = function(codec) { + var line = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.parameters && Object.keys(codec.parameters).length) { + var params = []; + Object.keys(codec.parameters).forEach(function(param) { + if (codec.parameters[param]) { + params.push(param + '=' + codec.parameters[param]); + } else { + params.push(param); + } + }); + line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; + } + return line; +}; + +// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: +// a=rtcp-fb:98 nack rpsi +SDPUtils.parseRtcpFb = function(line) { + var parts = line.substr(line.indexOf(' ') + 1).split(' '); + return { + type: parts.shift(), + parameter: parts.join(' ') + }; +}; +// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeRtcpFb = function(codec) { + var lines = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.rtcpFeedback && codec.rtcpFeedback.length) { + // FIXME: special handling for trr-int? + codec.rtcpFeedback.forEach(function(fb) { + lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + + '\r\n'; + }); + } + return lines; +}; + +// Parses an RFC 5576 ssrc media attribute. Sample input: +// a=ssrc:3735928559 cname:something +SDPUtils.parseSsrcMedia = function(line) { + var sp = line.indexOf(' '); + var parts = { + ssrc: parseInt(line.substr(7, sp - 7), 10) + }; + var colon = line.indexOf(':', sp); + if (colon > -1) { + parts.attribute = line.substr(sp + 1, colon - sp - 1); + parts.value = line.substr(colon + 1); + } else { + parts.attribute = line.substr(sp + 1); + } + return parts; +}; + +SDPUtils.parseSsrcGroup = function(line) { + var parts = line.substr(13).split(' '); + return { + semantics: parts.shift(), + ssrcs: parts.map(function(ssrc) { + return parseInt(ssrc, 10); + }) + }; +}; + +// Extracts the MID (RFC 5888) from a media section. +// returns the MID or undefined if no mid line was found. +SDPUtils.getMid = function(mediaSection) { + var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; + if (mid) { + return mid.substr(6); + } +}; + +SDPUtils.parseFingerprint = function(line) { + var parts = line.substr(14).split(' '); + return { + algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. + value: parts[1] + }; +}; + +// Extracts DTLS parameters from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the fingerprint line as input. See also getIceParameters. +SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=fingerprint:'); + // Note: a=setup line is ignored since we use the 'auto' role. + // Note2: 'algorithm' is not case sensitive except in Edge. + return { + role: 'auto', + fingerprints: lines.map(SDPUtils.parseFingerprint) + }; +}; + +// Serializes DTLS parameters to SDP. +SDPUtils.writeDtlsParameters = function(params, setupType) { + var sdp = 'a=setup:' + setupType + '\r\n'; + params.fingerprints.forEach(function(fp) { + sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; + }); + return sdp; +}; + +// Parses a=crypto lines into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members +SDPUtils.parseCryptoLine = function(line) { + var parts = line.substr(9).split(' '); + return { + tag: parseInt(parts[0], 10), + cryptoSuite: parts[1], + keyParams: parts[2], + sessionParams: parts.slice(3), + }; +}; + +SDPUtils.writeCryptoLine = function(parameters) { + return 'a=crypto:' + parameters.tag + ' ' + + parameters.cryptoSuite + ' ' + + (typeof parameters.keyParams === 'object' + ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) + : parameters.keyParams) + + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + + '\r\n'; +}; + +// Parses the crypto key parameters into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* +SDPUtils.parseCryptoKeyParams = function(keyParams) { + if (keyParams.indexOf('inline:') !== 0) { + return null; + } + var parts = keyParams.substr(7).split('|'); + return { + keyMethod: 'inline', + keySalt: parts[0], + lifeTime: parts[1], + mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, + mkiLength: parts[2] ? parts[2].split(':')[1] : undefined, + }; +}; + +SDPUtils.writeCryptoKeyParams = function(keyParams) { + return keyParams.keyMethod + ':' + + keyParams.keySalt + + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + + (keyParams.mkiValue && keyParams.mkiLength + ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength + : ''); +}; + +// Extracts all SDES paramters. +SDPUtils.getCryptoParameters = function(mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=crypto:'); + return lines.map(SDPUtils.parseCryptoLine); +}; + +// Parses ICE information from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the ice-ufrag and ice-pwd lines as input. +SDPUtils.getIceParameters = function(mediaSection, sessionpart) { + var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=ice-ufrag:')[0]; + var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, + 'a=ice-pwd:')[0]; + if (!(ufrag && pwd)) { + return null; + } + return { + usernameFragment: ufrag.substr(12), + password: pwd.substr(10), + }; +}; + +// Serializes ICE parameters to SDP. +SDPUtils.writeIceParameters = function(params) { + return 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + + 'a=ice-pwd:' + params.password + '\r\n'; +}; + +// Parses the SDP media section and returns RTCRtpParameters. +SDPUtils.parseRtpParameters = function(mediaSection) { + var description = { + codecs: [], + headerExtensions: [], + fecMechanisms: [], + rtcp: [] + }; + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..] + var pt = mline[i]; + var rtpmapline = SDPUtils.matchPrefix( + mediaSection, 'a=rtpmap:' + pt + ' ')[0]; + if (rtpmapline) { + var codec = SDPUtils.parseRtpMap(rtpmapline); + var fmtps = SDPUtils.matchPrefix( + mediaSection, 'a=fmtp:' + pt + ' '); + // Only the first a=fmtp: is considered. + codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; + codec.rtcpFeedback = SDPUtils.matchPrefix( + mediaSection, 'a=rtcp-fb:' + pt + ' ') + .map(SDPUtils.parseRtcpFb); + description.codecs.push(codec); + // parse FEC mechanisms from rtpmap lines. + switch (codec.name.toUpperCase()) { + case 'RED': + case 'ULPFEC': + description.fecMechanisms.push(codec.name.toUpperCase()); + break; + default: // only RED and ULPFEC are recognized as FEC mechanisms. + break; + } + } + } + SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) { + description.headerExtensions.push(SDPUtils.parseExtmap(line)); + }); + // FIXME: parse rtcp. + return description; +}; + +// Generates parts of the SDP media section describing the capabilities / +// parameters. +SDPUtils.writeRtpDescription = function(kind, caps) { + var sdp = ''; + + // Build the mline. + sdp += 'm=' + kind + ' '; + sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. + sdp += ' UDP/TLS/RTP/SAVPF '; + sdp += caps.codecs.map(function(codec) { + if (codec.preferredPayloadType !== undefined) { + return codec.preferredPayloadType; + } + return codec.payloadType; + }).join(' ') + '\r\n'; + + sdp += 'c=IN IP4 0.0.0.0\r\n'; + sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; + + // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. + caps.codecs.forEach(function(codec) { + sdp += SDPUtils.writeRtpMap(codec); + sdp += SDPUtils.writeFmtp(codec); + sdp += SDPUtils.writeRtcpFb(codec); + }); + var maxptime = 0; + caps.codecs.forEach(function(codec) { + if (codec.maxptime > maxptime) { + maxptime = codec.maxptime; + } + }); + if (maxptime > 0) { + sdp += 'a=maxptime:' + maxptime + '\r\n'; + } + sdp += 'a=rtcp-mux\r\n'; + + if (caps.headerExtensions) { + caps.headerExtensions.forEach(function(extension) { + sdp += SDPUtils.writeExtmap(extension); + }); + } + // FIXME: write fecMechanisms. + return sdp; +}; + +// Parses the SDP media section and returns an array of +// RTCRtpEncodingParameters. +SDPUtils.parseRtpEncodingParameters = function(mediaSection) { + var encodingParameters = []; + var description = SDPUtils.parseRtpParameters(mediaSection); + var hasRed = description.fecMechanisms.indexOf('RED') !== -1; + var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; + + // filter a=ssrc:... cname:, ignore PlanB-msid + var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(parts) { + return parts.attribute === 'cname'; + }); + var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; + var secondarySsrc; + + var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID') + .map(function(line) { + var parts = line.substr(17).split(' '); + return parts.map(function(part) { + return parseInt(part, 10); + }); + }); + if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { + secondarySsrc = flows[0][1]; + } + + description.codecs.forEach(function(codec) { + if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { + var encParam = { + ssrc: primarySsrc, + codecPayloadType: parseInt(codec.parameters.apt, 10) + }; + if (primarySsrc && secondarySsrc) { + encParam.rtx = {ssrc: secondarySsrc}; + } + encodingParameters.push(encParam); + if (hasRed) { + encParam = JSON.parse(JSON.stringify(encParam)); + encParam.fec = { + ssrc: primarySsrc, + mechanism: hasUlpfec ? 'red+ulpfec' : 'red' + }; + encodingParameters.push(encParam); + } + } + }); + if (encodingParameters.length === 0 && primarySsrc) { + encodingParameters.push({ + ssrc: primarySsrc + }); + } + + // we support both b=AS and b=TIAS but interpret AS as TIAS. + var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); + if (bandwidth.length) { + if (bandwidth[0].indexOf('b=TIAS:') === 0) { + bandwidth = parseInt(bandwidth[0].substr(7), 10); + } else if (bandwidth[0].indexOf('b=AS:') === 0) { + // use formula from JSEP to convert b=AS to TIAS value. + bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 + - (50 * 40 * 8); + } else { + bandwidth = undefined; + } + encodingParameters.forEach(function(params) { + params.maxBitrate = bandwidth; + }); + } + return encodingParameters; +}; + +// parses http://draft.ortc.org/#rtcrtcpparameters* +SDPUtils.parseRtcpParameters = function(mediaSection) { + var rtcpParameters = {}; + + // Gets the first SSRC. Note tha with RTX there might be multiple + // SSRCs. + var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(obj) { + return obj.attribute === 'cname'; + })[0]; + if (remoteSsrc) { + rtcpParameters.cname = remoteSsrc.value; + rtcpParameters.ssrc = remoteSsrc.ssrc; + } + + // Edge uses the compound attribute instead of reducedSize + // compound is !reducedSize + var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); + rtcpParameters.reducedSize = rsize.length > 0; + rtcpParameters.compound = rsize.length === 0; + + // parses the rtcp-mux attrіbute. + // Note that Edge does not support unmuxed RTCP. + var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); + rtcpParameters.mux = mux.length > 0; + + return rtcpParameters; +}; + +// parses either a=msid: or a=ssrc:... msid lines and returns +// the id of the MediaStream and MediaStreamTrack. +SDPUtils.parseMsid = function(mediaSection) { + var parts; + var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); + if (spec.length === 1) { + parts = spec[0].substr(7).split(' '); + return {stream: parts[0], track: parts[1]}; + } + var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') + .map(function(line) { + return SDPUtils.parseSsrcMedia(line); + }) + .filter(function(msidParts) { + return msidParts.attribute === 'msid'; + }); + if (planB.length > 0) { + parts = planB[0].value.split(' '); + return {stream: parts[0], track: parts[1]}; + } +}; + +// SCTP +// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back +// to draft-ietf-mmusic-sctp-sdp-05 +SDPUtils.parseSctpDescription = function(mediaSection) { + var mline = SDPUtils.parseMLine(mediaSection); + var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); + var maxMessageSize; + if (maxSizeLine.length > 0) { + maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10); + } + if (isNaN(maxMessageSize)) { + maxMessageSize = 65536; + } + var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); + if (sctpPort.length > 0) { + return { + port: parseInt(sctpPort[0].substr(12), 10), + protocol: mline.fmt, + maxMessageSize: maxMessageSize + }; + } + var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); + if (sctpMapLines.length > 0) { + var parts = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0] + .substr(10) + .split(' '); + return { + port: parseInt(parts[0], 10), + protocol: parts[1], + maxMessageSize: maxMessageSize + }; + } +}; + +// SCTP +// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers +// support by now receiving in this format, unless we originally parsed +// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line +// protocol of DTLS/SCTP -- without UDP/ or TCP/) +SDPUtils.writeSctpDescription = function(media, sctp) { + var output = []; + if (media.protocol !== 'DTLS/SCTP') { + output = [ + 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', + 'c=IN IP4 0.0.0.0\r\n', + 'a=sctp-port:' + sctp.port + '\r\n' + ]; + } else { + output = [ + 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', + 'c=IN IP4 0.0.0.0\r\n', + 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n' + ]; + } + if (sctp.maxMessageSize !== undefined) { + output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); + } + return output.join(''); +}; + +// Generate a session ID for SDP. +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 +// recommends using a cryptographically random +ve 64-bit value +// but right now this should be acceptable and within the right range +SDPUtils.generateSessionId = function() { + return Math.random().toString().substr(2, 21); +}; + +// Write boilder plate for start of SDP +// sessId argument is optional - if not supplied it will +// be generated randomly +// sessVersion is optional and defaults to 2 +// sessUser is optional and defaults to 'thisisadapterortc' +SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) { + var sessionId; + var version = sessVer !== undefined ? sessVer : 2; + if (sessId) { + sessionId = sessId; + } else { + sessionId = SDPUtils.generateSessionId(); + } + var user = sessUser || 'thisisadapterortc'; + // FIXME: sess-id should be an NTP timestamp. + return 'v=0\r\n' + + 'o=' + user + ' ' + sessionId + ' ' + version + + ' IN IP4 127.0.0.1\r\n' + + 's=-\r\n' + + 't=0 0\r\n'; +}; + +SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) { + var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps); + + // Map ICE parameters (ufrag, pwd) to SDP. + sdp += SDPUtils.writeIceParameters( + transceiver.iceGatherer.getLocalParameters()); + + // Map DTLS parameters to SDP. + sdp += SDPUtils.writeDtlsParameters( + transceiver.dtlsTransport.getLocalParameters(), + type === 'offer' ? 'actpass' : 'active'); + + sdp += 'a=mid:' + transceiver.mid + '\r\n'; + + if (transceiver.direction) { + sdp += 'a=' + transceiver.direction + '\r\n'; + } else if (transceiver.rtpSender && transceiver.rtpReceiver) { + sdp += 'a=sendrecv\r\n'; + } else if (transceiver.rtpSender) { + sdp += 'a=sendonly\r\n'; + } else if (transceiver.rtpReceiver) { + sdp += 'a=recvonly\r\n'; + } else { + sdp += 'a=inactive\r\n'; + } + + if (transceiver.rtpSender) { + // spec. + var msid = 'msid:' + stream.id + ' ' + + transceiver.rtpSender.track.id + '\r\n'; + sdp += 'a=' + msid; + + // for Chrome. + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + + ' ' + msid; + if (transceiver.sendEncodingParameters[0].rtx) { + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + + ' ' + msid; + sdp += 'a=ssrc-group:FID ' + + transceiver.sendEncodingParameters[0].ssrc + ' ' + + transceiver.sendEncodingParameters[0].rtx.ssrc + + '\r\n'; + } + } + // FIXME: this should be written by writeRtpDescription. + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + + ' cname:' + SDPUtils.localCName + '\r\n'; + if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) { + sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc + + ' cname:' + SDPUtils.localCName + '\r\n'; + } + return sdp; +}; + +// Gets the direction from the mediaSection or the sessionpart. +SDPUtils.getDirection = function(mediaSection, sessionpart) { + // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. + var lines = SDPUtils.splitLines(mediaSection); + for (var i = 0; i < lines.length; i++) { + switch (lines[i]) { + case 'a=sendrecv': + case 'a=sendonly': + case 'a=recvonly': + case 'a=inactive': + return lines[i].substr(2); + default: + // FIXME: What should happen here? + } + } + if (sessionpart) { + return SDPUtils.getDirection(sessionpart); + } + return 'sendrecv'; +}; + +SDPUtils.getKind = function(mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + return mline[0].substr(2); +}; + +SDPUtils.isRejected = function(mediaSection) { + return mediaSection.split(' ', 2)[1] === '0'; +}; + +SDPUtils.parseMLine = function(mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var parts = lines[0].substr(2).split(' '); + return { + kind: parts[0], + port: parseInt(parts[1], 10), + protocol: parts[2], + fmt: parts.slice(3).join(' ') + }; +}; + +SDPUtils.parseOLine = function(mediaSection) { + var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; + var parts = line.substr(2).split(' '); + return { + username: parts[0], + sessionId: parts[1], + sessionVersion: parseInt(parts[2], 10), + netType: parts[3], + addressType: parts[4], + address: parts[5] + }; +}; + +// a very naive interpretation of a valid SDP. +SDPUtils.isValidSDP = function(blob) { + if (typeof blob !== 'string' || blob.length === 0) { + return false; + } + var lines = SDPUtils.splitLines(blob); + for (var i = 0; i < lines.length; i++) { + if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { + return false; + } + // TODO: check the modifier a bit more. + } + return true; +}; + +// Expose public methods. +if (typeof module === 'object') { + module.exports = SDPUtils; +} + +},{}]},{},[1]); diff --git a/static/lib/adapter/adapter_no_global.js b/static/lib/adapter/adapter_no_global.js new file mode 100644 index 0000000..2fe54e5 --- /dev/null +++ b/static/lib/adapter/adapter_no_global.js @@ -0,0 +1,3422 @@ +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + window = _ref.window; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + shimChrome: true, + shimFirefox: true, + shimSafari: true + }; + + // Utils. + var logging = utils.log; + var browserDetails = utils.detectBrowser(window); + + var adapter = { + browserDetails: browserDetails, + commonShim: commonShim, + extractVersion: utils.extractVersion, + disableLog: utils.disableLog, + disableWarnings: utils.disableWarnings, + // Expose sdp as a convenience. For production apps include directly. + sdp: sdp + }; + + // Shim browser if found. + switch (browserDetails.browser) { + case 'chrome': + if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) { + logging('Chrome shim is not included in this adapter release.'); + return adapter; + } + if (browserDetails.version === null) { + logging('Chrome shim can not determine version, not shimming.'); + return adapter; + } + logging('adapter.js shimming chrome.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = chromeShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + chromeShim.shimGetUserMedia(window, browserDetails); + chromeShim.shimMediaStream(window, browserDetails); + chromeShim.shimPeerConnection(window, browserDetails); + chromeShim.shimOnTrack(window, browserDetails); + chromeShim.shimAddTrackRemoveTrack(window, browserDetails); + chromeShim.shimGetSendersWithDtmf(window, browserDetails); + chromeShim.shimGetStats(window, browserDetails); + chromeShim.shimSenderReceiverGetStats(window, browserDetails); + chromeShim.fixNegotiationNeeded(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + case 'firefox': + if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) { + logging('Firefox shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming firefox.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = firefoxShim; + + // Must be called before shimPeerConnection. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + firefoxShim.shimGetUserMedia(window, browserDetails); + firefoxShim.shimPeerConnection(window, browserDetails); + firefoxShim.shimOnTrack(window, browserDetails); + firefoxShim.shimRemoveStream(window, browserDetails); + firefoxShim.shimSenderGetStats(window, browserDetails); + firefoxShim.shimReceiverGetStats(window, browserDetails); + firefoxShim.shimRTCDataChannel(window, browserDetails); + firefoxShim.shimAddTransceiver(window, browserDetails); + firefoxShim.shimGetParameters(window, browserDetails); + firefoxShim.shimCreateOffer(window, browserDetails); + firefoxShim.shimCreateAnswer(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + break; + case 'safari': + if (!safariShim || !options.shimSafari) { + logging('Safari shim is not included in this adapter release.'); + return adapter; + } + logging('adapter.js shimming safari.'); + // Export to the adapter global object visible in the browser. + adapter.browserShim = safariShim; + + // Must be called before shimCallbackAPI. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + + safariShim.shimRTCIceServerUrls(window, browserDetails); + safariShim.shimCreateOfferLegacy(window, browserDetails); + safariShim.shimCallbacksAPI(window, browserDetails); + safariShim.shimLocalStreamsAPI(window, browserDetails); + safariShim.shimRemoteStreamsAPI(window, browserDetails); + safariShim.shimTrackEventTransceiver(window, browserDetails); + safariShim.shimGetUserMedia(window, browserDetails); + safariShim.shimAudioContext(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + default: + logging('Unsupported browser!'); + break; + } + + return adapter; +} + +// Browser shims. + +},{"./chrome/chrome_shim":3,"./common_shim":6,"./firefox/firefox_shim":7,"./safari/safari_shim":10,"./utils":11,"sdp":12}],3:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimMediaStream = shimMediaStream; +exports.shimOnTrack = shimOnTrack; +exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; +exports.shimGetStats = shimGetStats; +exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; +exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; +exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.fixNegotiationNeeded = fixNegotiationNeeded; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimMediaStream(window) { + window.MediaStream = window.MediaStream || window.webkitMediaStream; +} + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { + get: function get() { + return this._ontrack; + }, + set: function set(f) { + if (this._ontrack) { + this.removeEventListener('track', this._ontrack); + } + this.addEventListener('track', this._ontrack = f); + }, + + enumerable: true, + configurable: true + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var _this = this; + + if (!this._ontrackpoly) { + this._ontrackpoly = function (e) { + // onaddstream does not fire when a track is added to an existing + // stream. But stream.onaddtrack is implemented so we use that. + e.stream.addEventListener('addtrack', function (te) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === te.track.id; + }); + } else { + receiver = { track: te.track }; + } + + var event = new Event('track'); + event.track = te.track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + e.stream.getTracks().forEach(function (track) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === track.id; + }); + } else { + receiver = { track: track }; + } + var event = new Event('track'); + event.track = track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + }; + this.addEventListener('addstream', this._ontrackpoly); + } + return origSetRemoteDescription.apply(this, arguments); + }; + } else { + // even if RTCRtpTransceiver is in window, it is only used and + // emitted in unified-plan. Unfortunately this means we need + // to unconditionally wrap the event. + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + if (!e.transceiver) { + Object.defineProperty(e, 'transceiver', { value: { receiver: e.receiver } }); + } + return e; + }); + } +} + +function shimGetSendersWithDtmf(window) { + // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack. + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { + var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) { + return { + track: track, + get dtmf() { + if (this._dtmf === undefined) { + if (track.kind === 'audio') { + this._dtmf = pc.createDTMFSender(track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + }, + _pc: pc + }; + }; + + // augment addTrack when getSenders is not available. + if (!window.RTCPeerConnection.prototype.getSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + this._senders = this._senders || []; + return this._senders.slice(); // return a copy of the internal state. + }; + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var sender = origAddTrack.apply(this, arguments); + if (!sender) { + sender = shimSenderWithDtmf(this, track); + this._senders.push(sender); + } + return sender; + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + origRemoveTrack.apply(this, arguments); + var idx = this._senders.indexOf(sender); + if (idx !== -1) { + this._senders.splice(idx, 1); + } + }; + } + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this2 = this; + + this._senders = this._senders || []; + origAddStream.apply(this, [stream]); + stream.getTracks().forEach(function (track) { + _this2._senders.push(shimSenderWithDtmf(_this2, track)); + }); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + this._senders = this._senders || []; + origRemoveStream.apply(this, [stream]); + + stream.getTracks().forEach(function (track) { + var sender = _this3._senders.find(function (s) { + return s.track === track; + }); + if (sender) { + // remove sender + _this3._senders.splice(_this3._senders.indexOf(sender), 1); + } + }); + }; + } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this4 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this4; + }); + return senders; + }; + + Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { + get: function get() { + if (this._dtmf === undefined) { + if (this.track.kind === 'audio') { + this._dtmf = this._pc.createDTMFSender(this.track); + } else { + this._dtmf = null; + } + } + return this._dtmf; + } + }); + } +} + +function shimGetStats(window) { + if (!window.RTCPeerConnection) { + return; + } + + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _this5 = this; + + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + // If selector is a function then we are in the old style stats so just + // pass back the original getStats format to avoid breaking old users. + + + if (arguments.length > 0 && typeof selector === 'function') { + return origGetStats.apply(this, arguments); + } + + // When spec-style getStats is supported, return those when called with + // either no arguments or the selector argument is null. + if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) { + return origGetStats.apply(this, []); + } + + var fixChromeStats_ = function fixChromeStats_(response) { + var standardReport = {}; + var reports = response.result(); + reports.forEach(function (report) { + var standardStats = { + id: report.id, + timestamp: report.timestamp, + type: { + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }[report.type] || report.type + }; + report.names().forEach(function (name) { + standardStats[name] = report.stat(name); + }); + standardReport[standardStats.id] = standardStats; + }); + + return standardReport; + }; + + // shim getStats with maplike support + var makeMapStats = function makeMapStats(stats) { + return new Map(Object.keys(stats).map(function (key) { + return [key, stats[key]]; + })); + }; + + if (arguments.length >= 2) { + var successCallbackWrapper_ = function successCallbackWrapper_(response) { + onSucc(makeMapStats(fixChromeStats_(response))); + }; + + return origGetStats.apply(this, [successCallbackWrapper_, selector]); + } + + // promise-support + return new Promise(function (resolve, reject) { + origGetStats.apply(_this5, [function (response) { + resolve(makeMapStats(fixChromeStats_(response))); + }, reject]); + }).then(onSucc, onErr); + }; +} + +function shimSenderReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { + return; + } + + // shim sender stats. + if (!('getStats' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this6 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this6; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + var sender = this; + return this._pc.getStats().then(function (result) { + return ( + /* Note: this will include stats of all senders that + * send a track with the same id as sender.track as + * it is not possible to identify the RTCRtpSender. + */ + utils.filterStats(result, sender.track, true) + ); + }); + }; + } + + // shim receiver stats. + if (!('getStats' in window.RTCRtpReceiver.prototype)) { + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this7 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this7; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + var receiver = this; + return this._pc.getStats().then(function (result) { + return utils.filterStats(result, receiver.track, false); + }); + }; + } + + if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) { + return; + } + + // shim RTCPeerConnection.getStats(track). + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) { + var track = arguments[0]; + var sender = void 0; + var receiver = void 0; + var err = void 0; + this.getSenders().forEach(function (s) { + if (s.track === track) { + if (sender) { + err = true; + } else { + sender = s; + } + } + }); + this.getReceivers().forEach(function (r) { + if (r.track === track) { + if (receiver) { + err = true; + } else { + receiver = r; + } + } + return r.track === track; + }); + if (err || sender && receiver) { + return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError')); + } else if (sender) { + return sender.getStats(); + } else if (receiver) { + return receiver.getStats(); + } + return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError')); + } + return origGetStats.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrackWithNative(window) { + // shim addTrack/removeTrack with native variants in order to make + // the interactions with legacy getLocalStreams behave as in other browsers. + // Keeps a mapping stream.id => [stream, rtpsenders...] + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this8 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + return Object.keys(this._shimmedLocalStreams).map(function (streamId) { + return _this8._shimmedLocalStreams[streamId][0]; + }); + }; + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + if (!stream) { + return origAddTrack.apply(this, arguments); + } + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + var sender = origAddTrack.apply(this, arguments); + if (!this._shimmedLocalStreams[stream.id]) { + this._shimmedLocalStreams[stream.id] = [stream, sender]; + } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) { + this._shimmedLocalStreams[stream.id].push(sender); + } + return sender; + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this9 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this9.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + var existingSenders = this.getSenders(); + origAddStream.apply(this, arguments); + var newSenders = this.getSenders().filter(function (newSender) { + return existingSenders.indexOf(newSender) === -1; + }); + this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + delete this._shimmedLocalStreams[stream.id]; + return origRemoveStream.apply(this, arguments); + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this10 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + if (sender) { + Object.keys(this._shimmedLocalStreams).forEach(function (streamId) { + var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender); + if (idx !== -1) { + _this10._shimmedLocalStreams[streamId].splice(idx, 1); + } + if (_this10._shimmedLocalStreams[streamId].length === 1) { + delete _this10._shimmedLocalStreams[streamId]; + } + }); + } + return origRemoveTrack.apply(this, arguments); + }; +} + +function shimAddTrackRemoveTrack(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + // shim addTrack and removeTrack. + if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) { + return shimAddTrackRemoveTrackWithNative(window); + } + + // also shim pc.getLocalStreams when addTrack is shimmed + // to return the original streams. + var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams; + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this11 = this; + + var nativeStreams = origGetLocalStreams.apply(this); + this._reverseStreams = this._reverseStreams || {}; + return nativeStreams.map(function (stream) { + return _this11._reverseStreams[stream.id]; + }); + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this12 = this; + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this12.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + // Add identity mapping for consistency with addTrack. + // Unless this is being used with a stream from addTrack. + if (!this._reverseStreams[stream.id]) { + var newStream = new window.MediaStream(stream.getTracks()); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + stream = newStream; + } + origAddStream.apply(this, [stream]); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + origRemoveStream.apply(this, [this._streams[stream.id] || stream]); + delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id]; + delete this._streams[stream.id]; + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var _this13 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + var streams = [].slice.call(arguments, 1); + if (streams.length !== 1 || !streams[0].getTracks().find(function (t) { + return t === track; + })) { + // this is not fully correct but all we can manage without + // [[associated MediaStreams]] internal slot. + throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError'); + } + + var alreadyExists = this.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + var oldStream = this._streams[stream.id]; + if (oldStream) { + // this is using odd Chrome behaviour, use with caution: + // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815 + // Note: we rely on the high-level addTrack/dtmf shim to + // create the sender with a dtmf sender. + oldStream.addTrack(track); + + // Trigger ONN async. + Promise.resolve().then(function () { + _this13.dispatchEvent(new Event('negotiationneeded')); + }); + } else { + var newStream = new window.MediaStream([track]); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + this.addStream(newStream); + } + return this.getSenders().find(function (s) { + return s.track === track; + }); + }; + + // replace the internal stream id with the external one and + // vice versa. + function replaceInternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + function replaceExternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + ['createOffer', 'createAnswer'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + var _this14 = this; + + var args = arguments; + var isLegacyCall = arguments.length && typeof arguments[0] === 'function'; + if (isLegacyCall) { + return nativeMethod.apply(this, [function (description) { + var desc = replaceInternalStreamId(_this14, description); + args[0].apply(null, [desc]); + }, function (err) { + if (args[1]) { + args[1].apply(null, err); + } + }, arguments[2]]); + } + return nativeMethod.apply(this, arguments).then(function (description) { + return replaceInternalStreamId(_this14, description); + }); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + + var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + if (!arguments.length || !arguments[0].type) { + return origSetLocalDescription.apply(this, arguments); + } + arguments[0] = replaceExternalStreamId(this, arguments[0]); + return origSetLocalDescription.apply(this, arguments); + }; + + // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier + + var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription'); + Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', { + get: function get() { + var description = origLocalDescription.get.apply(this); + if (description.type === '') { + return description; + } + return replaceInternalStreamId(this, description); + } + }); + + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this15 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + // We can not yet check for sender instanceof RTCRtpSender + // since we shim RTPSender. So we check if sender._pc is set. + if (!sender._pc) { + throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError'); + } + var isLocal = sender._pc === this; + if (!isLocal) { + throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError'); + } + + // Search for the native stream the senders track belongs to. + this._streams = this._streams || {}; + var stream = void 0; + Object.keys(this._streams).forEach(function (streamid) { + var hasTrack = _this15._streams[streamid].getTracks().find(function (track) { + return sender.track === track; + }); + if (hasTrack) { + stream = _this15._streams[streamid]; + } + }); + + if (stream) { + if (stream.getTracks().length === 1) { + // if this is the last track of the stream, remove the stream. This + // takes care of any shimmed _senders. + this.removeStream(this._reverseStreams[stream.id]); + } else { + // relying on the same odd chrome behaviour as above. + stream.removeTrack(sender.track); + } + this.dispatchEvent(new Event('negotiationneeded')); + } + }; +} + +function shimPeerConnection(window, browserDetails) { + if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.webkitRTCPeerConnection; + } + if (!window.RTCPeerConnection) { + return; + } + + // shim implicit creation of RTCSessionDescription/RTCIceCandidate + if (browserDetails.version < 53) { + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } +} + +// Attempt to fix ONN in plan-b mode. +function fixNegotiationNeeded(window, browserDetails) { + utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) { + var pc = e.target; + if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') { + if (pc.signalingState !== 'stable') { + return; + } + } + return e; + }); +} + +},{"../utils.js":11,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, getSourceId) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + // getSourceId is a function that returns a promise resolving with + // the sourceId of the screen/window/tab to be shared. + if (typeof getSourceId !== 'function') { + console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function'); + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + return getSourceId(constraints).then(function (sourceId) { + var widthSpecified = constraints.video && constraints.video.width; + var heightSpecified = constraints.video && constraints.video.height; + var frameRateSpecified = constraints.video && constraints.video.frameRate; + constraints.video = { + mandatory: { + chromeMediaSource: 'desktop', + chromeMediaSourceId: sourceId, + maxFrameRate: frameRateSpecified || 3 + } + }; + if (widthSpecified) { + constraints.video.mandatory.maxWidth = widthSpecified; + } + if (heightSpecified) { + constraints.video.mandatory.maxHeight = heightSpecified; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }); + }; +} + +},{}],5:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var logging = utils.log; + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + + if (!navigator.mediaDevices) { + return; + } + + var constraintsToChrome_ = function constraintsToChrome_(c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) { + return c; + } + var cc = {}; + Object.keys(c).forEach(function (key) { + if (key === 'require' || key === 'advanced' || key === 'mediaSource') { + return; + } + var r = _typeof(c[key]) === 'object' ? c[key] : { ideal: c[key] }; + if (r.exact !== undefined && typeof r.exact === 'number') { + r.min = r.max = r.exact; + } + var oldname_ = function oldname_(prefix, name) { + if (prefix) { + return prefix + name.charAt(0).toUpperCase() + name.slice(1); + } + return name === 'deviceId' ? 'sourceId' : name; + }; + if (r.ideal !== undefined) { + cc.optional = cc.optional || []; + var oc = {}; + if (typeof r.ideal === 'number') { + oc[oldname_('min', key)] = r.ideal; + cc.optional.push(oc); + oc = {}; + oc[oldname_('max', key)] = r.ideal; + cc.optional.push(oc); + } else { + oc[oldname_('', key)] = r.ideal; + cc.optional.push(oc); + } + } + if (r.exact !== undefined && typeof r.exact !== 'number') { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_('', key)] = r.exact; + } else { + ['min', 'max'].forEach(function (mix) { + if (r[mix] !== undefined) { + cc.mandatory = cc.mandatory || {}; + cc.mandatory[oldname_(mix, key)] = r[mix]; + } + }); + } + }); + if (c.advanced) { + cc.optional = (cc.optional || []).concat(c.advanced); + } + return cc; + }; + + var shimConstraints_ = function shimConstraints_(constraints, func) { + if (browserDetails.version >= 61) { + return func(constraints); + } + constraints = JSON.parse(JSON.stringify(constraints)); + if (constraints && _typeof(constraints.audio) === 'object') { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + constraints = JSON.parse(JSON.stringify(constraints)); + remap(constraints.audio, 'autoGainControl', 'googAutoGainControl'); + remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression'); + constraints.audio = constraintsToChrome_(constraints.audio); + } + if (constraints && _typeof(constraints.video) === 'object') { + // Shim facingMode for mobile & surface pro. + var face = constraints.video.facingMode; + face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face }); + var getSupportedFacingModeLies = browserDetails.version < 66; + + if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) { + delete constraints.video.facingMode; + var matches = void 0; + if (face.exact === 'environment' || face.ideal === 'environment') { + matches = ['back', 'rear']; + } else if (face.exact === 'user' || face.ideal === 'user') { + matches = ['front']; + } + if (matches) { + // Look for matches in label, or use last cam for back (typical). + return navigator.mediaDevices.enumerateDevices().then(function (devices) { + devices = devices.filter(function (d) { + return d.kind === 'videoinput'; + }); + var dev = devices.find(function (d) { + return matches.some(function (match) { + return d.label.toLowerCase().includes(match); + }); + }); + if (!dev && devices.length && matches.includes('back')) { + dev = devices[devices.length - 1]; // more likely the back cam + } + if (dev) { + constraints.video.deviceId = face.exact ? { exact: dev.deviceId } : { ideal: dev.deviceId }; + } + constraints.video = constraintsToChrome_(constraints.video); + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }); + } + } + constraints.video = constraintsToChrome_(constraints.video); + } + logging('chrome: ' + JSON.stringify(constraints)); + return func(constraints); + }; + + var shimError_ = function shimError_(e) { + if (browserDetails.version >= 64) { + return e; + } + return { + name: { + PermissionDeniedError: 'NotAllowedError', + PermissionDismissedError: 'NotAllowedError', + InvalidStateError: 'NotAllowedError', + DevicesNotFoundError: 'NotFoundError', + ConstraintNotSatisfiedError: 'OverconstrainedError', + TrackStartError: 'NotReadableError', + MediaDeviceFailedDueToShutdown: 'NotAllowedError', + MediaDeviceKillSwitchOn: 'NotAllowedError', + TabCaptureError: 'AbortError', + ScreenCaptureError: 'AbortError', + DeviceCaptureError: 'AbortError' + }[e.name] || e.name, + message: e.message, + constraint: e.constraint || e.constraintName, + toString: function toString() { + return this.name + (this.message && ': ') + this.message; + } + }; + }; + + var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) { + shimConstraints_(constraints, function (c) { + navigator.webkitGetUserMedia(c, onSuccess, function (e) { + if (onError) { + onError(shimError_(e)); + } + }); + }); + }; + navigator.getUserMedia = getUserMedia_.bind(navigator); + + // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia + // function which returns a Promise, it does not accept spec-style + // constraints. + if (navigator.mediaDevices.getUserMedia) { + var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (cs) { + return shimConstraints_(cs, function (c) { + return origGetUserMedia(c).then(function (stream) { + if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) { + stream.getTracks().forEach(function (track) { + track.stop(); + }); + throw new DOMException('', 'NotFoundError'); + } + return stream; + }, function (e) { + return Promise.reject(shimError_(e)); + }); + }); + }; + } +} + +},{"../utils.js":11}],6:[function(require,module,exports){ +/* + * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.shimMaxMessageSize = shimMaxMessageSize; +exports.shimSendThrowTypeError = shimSendThrowTypeError; +exports.shimConnectionState = shimConnectionState; +exports.removeExtmapAllowMixed = removeExtmapAllowMixed; +exports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty; + +var _sdp = require('sdp'); + +var _sdp2 = _interopRequireDefault(_sdp); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function shimRTCIceCandidate(window) { + // foundation is arbitrarily chosen as an indicator for full support for + // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface + if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) { + return; + } + + var NativeRTCIceCandidate = window.RTCIceCandidate; + window.RTCIceCandidate = function RTCIceCandidate(args) { + // Remove the a= which shouldn't be part of the candidate string. + if ((typeof args === 'undefined' ? 'undefined' : _typeof(args)) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) { + args = JSON.parse(JSON.stringify(args)); + args.candidate = args.candidate.substr(2); + } + + if (args.candidate && args.candidate.length) { + // Augment the native candidate with the parsed fields. + var nativeCandidate = new NativeRTCIceCandidate(args); + var parsedCandidate = _sdp2.default.parseCandidate(args.candidate); + var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate); + + // Add a serializer that does not serialize the extra attributes. + augmentedCandidate.toJSON = function toJSON() { + return { + candidate: augmentedCandidate.candidate, + sdpMid: augmentedCandidate.sdpMid, + sdpMLineIndex: augmentedCandidate.sdpMLineIndex, + usernameFragment: augmentedCandidate.usernameFragment + }; + }; + return augmentedCandidate; + } + return new NativeRTCIceCandidate(args); + }; + window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype; + + // Hook up the augmented candidate in onicecandidate and + // addEventListener('icecandidate', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) { + if (e.candidate) { + Object.defineProperty(e, 'candidate', { + value: new window.RTCIceCandidate(e.candidate), + writable: 'false' + }); + } + return e; + }); +} + +function shimMaxMessageSize(window, browserDetails) { + if (!window.RTCPeerConnection) { + return; + } + + if (!('sctp' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + } + }); + } + + var sctpInDescription = function sctpInDescription(description) { + if (!description || !description.sdp) { + return false; + } + var sections = _sdp2.default.splitSections(description.sdp); + sections.shift(); + return sections.some(function (mediaSection) { + var mLine = _sdp2.default.parseMLine(mediaSection); + return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1; + }); + }; + + var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) { + // TODO: Is there a better solution for detecting Firefox? + var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/); + if (match === null || match.length < 2) { + return -1; + } + var version = parseInt(match[1], 10); + // Test for NaN (yes, this is ugly) + return version !== version ? -1 : version; + }; + + var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) { + // Every implementation we know can send at least 64 KiB. + // Note: Although Chrome is technically able to send up to 256 KiB, the + // data does not reach the other peer reliably. + // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419 + var canSendMaxMessageSize = 65536; + if (browserDetails.browser === 'firefox') { + if (browserDetails.version < 57) { + if (remoteIsFirefox === -1) { + // FF < 57 will send in 16 KiB chunks using the deprecated PPID + // fragmentation. + canSendMaxMessageSize = 16384; + } else { + // However, other FF (and RAWRTC) can reassemble PPID-fragmented + // messages. Thus, supporting ~2 GiB when sending. + canSendMaxMessageSize = 2147483637; + } + } else if (browserDetails.version < 60) { + // Currently, all FF >= 57 will reset the remote maximum message size + // to the default value when a data channel is created at a later + // stage. :( + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536; + } else { + // FF >= 60 supports sending ~2 GiB + canSendMaxMessageSize = 2147483637; + } + } + return canSendMaxMessageSize; + }; + + var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) { + // Note: 65536 bytes is the default value from the SDP spec. Also, + // every implementation we know supports receiving 65536 bytes. + var maxMessageSize = 65536; + + // FF 57 has a slightly incorrect default remote max message size, so + // we need to adjust it here to avoid a failure when sending. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697 + if (browserDetails.browser === 'firefox' && browserDetails.version === 57) { + maxMessageSize = 65535; + } + + var match = _sdp2.default.matchPrefix(description.sdp, 'a=max-message-size:'); + if (match.length > 0) { + maxMessageSize = parseInt(match[0].substr(19), 10); + } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) { + // If the maximum message size is not present in the remote SDP and + // both local and remote are Firefox, the remote peer can receive + // ~2 GiB. + maxMessageSize = 2147483637; + } + return maxMessageSize; + }; + + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + this._sctp = null; + // Chrome decided to not expose .sctp in plan-b mode. + // As usual, adapter.js has to do an 'ugly worakaround' + // to cover up the mess. + if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) { + var _getConfiguration = this.getConfiguration(), + sdpSemantics = _getConfiguration.sdpSemantics; + + if (sdpSemantics === 'plan-b') { + Object.defineProperty(this, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + }, + + enumerable: true, + configurable: true + }); + } + } + + if (sctpInDescription(arguments[0])) { + // Check if the remote is FF. + var isFirefox = getRemoteFirefoxVersion(arguments[0]); + + // Get the maximum message size the local peer is capable of sending + var canSendMMS = getCanSendMaxMessageSize(isFirefox); + + // Get the maximum message size of the remote peer. + var remoteMMS = getMaxMessageSize(arguments[0], isFirefox); + + // Determine final maximum message size + var maxMessageSize = void 0; + if (canSendMMS === 0 && remoteMMS === 0) { + maxMessageSize = Number.POSITIVE_INFINITY; + } else if (canSendMMS === 0 || remoteMMS === 0) { + maxMessageSize = Math.max(canSendMMS, remoteMMS); + } else { + maxMessageSize = Math.min(canSendMMS, remoteMMS); + } + + // Create a dummy RTCSctpTransport object and the 'maxMessageSize' + // attribute. + var sctp = {}; + Object.defineProperty(sctp, 'maxMessageSize', { + get: function get() { + return maxMessageSize; + } + }); + this._sctp = sctp; + } + + return origSetRemoteDescription.apply(this, arguments); + }; +} + +function shimSendThrowTypeError(window) { + if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) { + return; + } + + // Note: Although Firefox >= 57 has a native implementation, the maximum + // message size can be reset for all data channels at a later stage. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831 + + function wrapDcSend(dc, pc) { + var origDataChannelSend = dc.send; + dc.send = function send() { + var data = arguments[0]; + var length = data.length || data.size || data.byteLength; + if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) { + throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)'); + } + return origDataChannelSend.apply(dc, arguments); + }; + } + var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel; + window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() { + var dataChannel = origCreateDataChannel.apply(this, arguments); + wrapDcSend(dataChannel, this); + return dataChannel; + }; + utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) { + wrapDcSend(e.channel, e.target); + return e; + }); +} + +/* shims RTCConnectionState by pretending it is the same as iceConnectionState. + * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12 + * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect + * since DTLS failures would be hidden. See + * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827 + * for the Firefox tracking bug. + */ +function shimConnectionState(window) { + if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) { + return; + } + var proto = window.RTCPeerConnection.prototype; + Object.defineProperty(proto, 'connectionState', { + get: function get() { + return { + completed: 'connected', + checking: 'connecting' + }[this.iceConnectionState] || this.iceConnectionState; + }, + + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, 'onconnectionstatechange', { + get: function get() { + return this._onconnectionstatechange || null; + }, + set: function set(cb) { + if (this._onconnectionstatechange) { + this.removeEventListener('connectionstatechange', this._onconnectionstatechange); + delete this._onconnectionstatechange; + } + if (cb) { + this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb); + } + }, + + enumerable: true, + configurable: true + }); + + ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) { + var origMethod = proto[method]; + proto[method] = function () { + if (!this._connectionstatechangepoly) { + this._connectionstatechangepoly = function (e) { + var pc = e.target; + if (pc._lastConnectionState !== pc.connectionState) { + pc._lastConnectionState = pc.connectionState; + var newEvent = new Event('connectionstatechange', e); + pc.dispatchEvent(newEvent); + } + return e; + }; + this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly); + } + return origMethod.apply(this, arguments); + }; + }); +} + +function removeExtmapAllowMixed(window, browserDetails) { + /* remove a=extmap-allow-mixed for webrtc.org < M71 */ + if (!window.RTCPeerConnection) { + return; + } + if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) { + return; + } + if (browserDetails.browser === 'safari' && browserDetails.version >= 605) { + return; + } + var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) { + if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) { + var sdp = desc.sdp.split('\n').filter(function (line) { + return line.trim() !== 'a=extmap-allow-mixed'; + }).join('\n'); + // Safari enforces read-only-ness of RTCSessionDescription fields. + if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) { + arguments[0] = new window.RTCSessionDescription({ + type: desc.type, + sdp: sdp + }); + } else { + desc.sdp = sdp; + } + } + return nativeSRD.apply(this, arguments); + }; +} + +function shimAddIceCandidateNullOrEmpty(window, browserDetails) { + // Support for addIceCandidate(null or undefined) + // as well as addIceCandidate({candidate: "", ...}) + // https://bugs.chromium.org/p/chromium/issues/detail?id=978582 + // Note: must be called before other polyfills which change the signature. + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate; + if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) { + return; + } + window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() { + if (!arguments[0]) { + if (arguments[1]) { + arguments[1].apply(null); + } + return Promise.resolve(); + } + // Firefox 68+ emits and processes {candidate: "", ...}, ignore + // in older versions. + // Native support for ignoring exists for Chrome M77+. + // Safari ignores as well, exact version unknown but works in the same + // version that also ignores addIceCandidate(null). + if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') { + return Promise.resolve(); + } + return nativeAddIceCandidate.apply(this, arguments); + }; +} + +},{"./utils":11,"sdp":12}],7:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimOnTrack = shimOnTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.shimSenderGetStats = shimSenderGetStats; +exports.shimReceiverGetStats = shimReceiverGetStats; +exports.shimRemoveStream = shimRemoveStream; +exports.shimRTCDataChannel = shimRTCDataChannel; +exports.shimAddTransceiver = shimAddTransceiver; +exports.shimGetParameters = shimGetParameters; +exports.shimCreateOffer = shimCreateOffer; +exports.shimCreateAnswer = shimCreateAnswer; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimPeerConnection(window, browserDetails) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) { + return; // probably media.peerconnection.enabled=false in about:config + } + if (!window.RTCPeerConnection && window.mozRTCPeerConnection) { + // very basic support for old versions. + window.RTCPeerConnection = window.mozRTCPeerConnection; + } + + if (browserDetails.version < 53) { + // shim away need for obsolete RTCIceCandidate/RTCSessionDescription. + ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } + + var modernStatsTypes = { + inboundrtp: 'inbound-rtp', + outboundrtp: 'outbound-rtp', + candidatepair: 'candidate-pair', + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }; + + var nativeGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + return nativeGetStats.apply(this, [selector || null]).then(function (stats) { + if (browserDetails.version < 53 && !onSucc) { + // Shim only promise getStats with spec-hyphens in type names + // Leave callback version alone; misc old uses of forEach before Map + try { + stats.forEach(function (stat) { + stat.type = modernStatsTypes[stat.type] || stat.type; + }); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + // Avoid TypeError: "type" is read-only, in old versions. 34-43ish + stats.forEach(function (stat, i) { + stats.set(i, Object.assign({}, stat, { + type: modernStatsTypes[stat.type] || stat.type + })); + }); + } + } + return stats; + }).then(onSucc, onErr); + }; +} + +function shimSenderGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) { + return; + } + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map()); + }; +} + +function shimReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) { + return; + } + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this2 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this2; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + return this._pc.getStats(this.track); + }; +} + +function shimRemoveStream(window) { + if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) { + return; + } + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + utils.deprecated('removeStream', 'removeTrack'); + this.getSenders().forEach(function (sender) { + if (sender.track && stream.getTracks().includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; +} + +function shimRTCDataChannel(window) { + // rename DataChannel to RTCDataChannel (native fix in FF60): + // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851 + if (window.DataChannel && !window.RTCDataChannel) { + window.RTCDataChannel = window.DataChannel; + } +} + +function shimAddTransceiver(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; + if (origAddTransceiver) { + window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { + this.setParametersPromises = []; + var initParameters = arguments[1]; + var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters; + if (shouldPerformCheck) { + // If sendEncodings params are provided, validate grammar + initParameters.sendEncodings.forEach(function (encodingParam) { + if ('rid' in encodingParam) { + var ridRegex = /^[a-z0-9]{0,16}$/i; + if (!ridRegex.test(encodingParam.rid)) { + throw new TypeError('Invalid RID value provided.'); + } + } + if ('scaleResolutionDownBy' in encodingParam) { + if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { + throw new RangeError('scale_resolution_down_by must be >= 1.0'); + } + } + if ('maxFramerate' in encodingParam) { + if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { + throw new RangeError('max_framerate must be >= 0.0'); + } + } + }); + } + var transceiver = origAddTransceiver.apply(this, arguments); + if (shouldPerformCheck) { + // Check if the init options were applied. If not we do this in an + // asynchronous way and save the promise reference in a global object. + // This is an ugly hack, but at the same time is way more robust than + // checking the sender parameters before and after the createOffer + // Also note that after the createoffer we are not 100% sure that + // the params were asynchronously applied so we might miss the + // opportunity to recreate offer. + var sender = transceiver.sender; + + var params = sender.getParameters(); + if (!('encodings' in params) || + // Avoid being fooled by patched getParameters() below. + params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) { + params.encodings = initParameters.sendEncodings; + sender.sendEncodings = initParameters.sendEncodings; + this.setParametersPromises.push(sender.setParameters(params).then(function () { + delete sender.sendEncodings; + }).catch(function () { + delete sender.sendEncodings; + })); + } + } + return transceiver; + }; + } +} + +function shimGetParameters(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCRtpSender)) { + return; + } + var origGetParameters = window.RTCRtpSender.prototype.getParameters; + if (origGetParameters) { + window.RTCRtpSender.prototype.getParameters = function getParameters() { + var params = origGetParameters.apply(this, arguments); + if (!('encodings' in params)) { + params.encodings = [].concat(this.sendEncodings || [{}]); + } + return params; + }; + } +} + +function shimCreateOffer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer() { + var _this4 = this, + _arguments2 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateOffer.apply(_this4, _arguments2); + }).finally(function () { + _this4.setParametersPromises = []; + }); + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimCreateAnswer(window) { + // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 + // Firefox ignores the init sendEncodings options passed to addTransceiver + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; + window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { + var _this5 = this, + _arguments3 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateAnswer.apply(_this5, _arguments3); + }).finally(function () { + _this5.setParametersPromises = []; + }); + } + return origCreateAnswer.apply(this, arguments); + }; +} + +},{"../utils":11,"./getdisplaymedia":8,"./getusermedia":9}],8:[function(require,module,exports){ +/* + * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(window, preferredMediaSource) { + if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) { + return; + } + if (!window.navigator.mediaDevices) { + return; + } + window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) { + if (!(constraints && constraints.video)) { + var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined'); + err.name = 'NotFoundError'; + // from https://heycam.github.io/webidl/#idl-DOMException-error-names + err.code = 8; + return Promise.reject(err); + } + if (constraints.video === true) { + constraints.video = { mediaSource: preferredMediaSource }; + } else { + constraints.video.mediaSource = preferredMediaSource; + } + return window.navigator.mediaDevices.getUserMedia(constraints); + }; +} + +},{}],9:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + var MediaStreamTrack = window && window.MediaStreamTrack; + + navigator.getUserMedia = function (constraints, onSuccess, onError) { + // Replace Firefox 44+'s deprecation warning with unprefixed version. + utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia'); + navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); + }; + + if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + + var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object' && _typeof(c.audio) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c.audio, 'autoGainControl', 'mozAutoGainControl'); + remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeGetUserMedia(c); + }; + + if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) { + var nativeGetSettings = MediaStreamTrack.prototype.getSettings; + MediaStreamTrack.prototype.getSettings = function () { + var obj = nativeGetSettings.apply(this, arguments); + remap(obj, 'mozAutoGainControl', 'autoGainControl'); + remap(obj, 'mozNoiseSuppression', 'noiseSuppression'); + return obj; + }; + } + + if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) { + var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints; + MediaStreamTrack.prototype.applyConstraints = function (c) { + if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c, 'autoGainControl', 'mozAutoGainControl'); + remap(c, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeApplyConstraints.apply(this, [c]); + }; + } + } +} + +},{"../utils":11}],10:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimLocalStreamsAPI = shimLocalStreamsAPI; +exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; +exports.shimCallbacksAPI = shimCallbacksAPI; +exports.shimGetUserMedia = shimGetUserMedia; +exports.shimConstraints = shimConstraints; +exports.shimRTCIceServerUrls = shimRTCIceServerUrls; +exports.shimTrackEventTransceiver = shimTrackEventTransceiver; +exports.shimCreateOfferLegacy = shimCreateOfferLegacy; +exports.shimAudioContext = shimAudioContext; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimLocalStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + if (!this._localStreams) { + this._localStreams = []; + } + return this._localStreams; + }; + } + if (!('addStream' in window.RTCPeerConnection.prototype)) { + var _addTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this = this; + + if (!this._localStreams) { + this._localStreams = []; + } + if (!this._localStreams.includes(stream)) { + this._localStreams.push(stream); + } + // Try to emulate Chrome's behaviour of adding in audio-video order. + // Safari orders by track id. + stream.getAudioTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + stream.getVideoTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track) { + var _this2 = this; + + for (var _len = arguments.length, streams = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + streams[_key - 1] = arguments[_key]; + } + + if (streams) { + streams.forEach(function (stream) { + if (!_this2._localStreams) { + _this2._localStreams = [stream]; + } else if (!_this2._localStreams.includes(stream)) { + _this2._localStreams.push(stream); + } + }); + } + return _addTrack.apply(this, arguments); + }; + } + if (!('removeStream' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + if (!this._localStreams) { + this._localStreams = []; + } + var index = this._localStreams.indexOf(stream); + if (index === -1) { + return; + } + this._localStreams.splice(index, 1); + var tracks = stream.getTracks(); + this.getSenders().forEach(function (sender) { + if (tracks.includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; + } +} + +function shimRemoteStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() { + return this._remoteStreams ? this._remoteStreams : []; + }; + } + if (!('onaddstream' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', { + get: function get() { + return this._onaddstream; + }, + set: function set(f) { + var _this4 = this; + + if (this._onaddstream) { + this.removeEventListener('addstream', this._onaddstream); + this.removeEventListener('track', this._onaddstreampoly); + } + this.addEventListener('addstream', this._onaddstream = f); + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!_this4._remoteStreams) { + _this4._remoteStreams = []; + } + if (_this4._remoteStreams.includes(stream)) { + return; + } + _this4._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + _this4.dispatchEvent(event); + }); + }); + } + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var pc = this; + if (!this._onaddstreampoly) { + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!pc._remoteStreams) { + pc._remoteStreams = []; + } + if (pc._remoteStreams.indexOf(stream) >= 0) { + return; + } + pc._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + pc.dispatchEvent(event); + }); + }); + } + return origSetRemoteDescription.apply(pc, arguments); + }; + } +} + +function shimCallbacksAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + var prototype = window.RTCPeerConnection.prototype; + var origCreateOffer = prototype.createOffer; + var origCreateAnswer = prototype.createAnswer; + var setLocalDescription = prototype.setLocalDescription; + var setRemoteDescription = prototype.setRemoteDescription; + var addIceCandidate = prototype.addIceCandidate; + + prototype.createOffer = function createOffer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateOffer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + prototype.createAnswer = function createAnswer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateAnswer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + var withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setLocalDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setLocalDescription = withCallback; + + withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setRemoteDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setRemoteDescription = withCallback; + + withCallback = function withCallback(candidate, successCallback, failureCallback) { + var promise = addIceCandidate.apply(this, [candidate]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.addIceCandidate = withCallback; +} + +function shimGetUserMedia(window) { + var navigator = window && window.navigator; + + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + // shim not needed in Safari 12.1 + var mediaDevices = navigator.mediaDevices; + var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices); + navigator.mediaDevices.getUserMedia = function (constraints) { + return _getUserMedia(shimConstraints(constraints)); + }; + } + + if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) { + navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb); + }.bind(navigator); + } +} + +function shimConstraints(constraints) { + if (constraints && constraints.video !== undefined) { + return Object.assign({}, constraints, { video: utils.compactObject(constraints.video) }); + } + + return constraints; +} + +function shimRTCIceServerUrls(window) { + if (!window.RTCPeerConnection) { + return; + } + // migrate from non-spec RTCIceServer.url to RTCIceServer.urls + var OrigPeerConnection = window.RTCPeerConnection; + window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) { + if (pcConfig && pcConfig.iceServers) { + var newIceServers = []; + for (var i = 0; i < pcConfig.iceServers.length; i++) { + var server = pcConfig.iceServers[i]; + if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) { + utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls'); + server = JSON.parse(JSON.stringify(server)); + server.urls = server.url; + delete server.url; + newIceServers.push(server); + } else { + newIceServers.push(pcConfig.iceServers[i]); + } + } + pcConfig.iceServers = newIceServers; + } + return new OrigPeerConnection(pcConfig, pcConstraints); + }; + window.RTCPeerConnection.prototype = OrigPeerConnection.prototype; + // wrap static methods. Currently just generateCertificate. + if ('generateCertificate' in OrigPeerConnection) { + Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { + get: function get() { + return OrigPeerConnection.generateCertificate; + } + }); + } +} + +function shimTrackEventTransceiver(window) { + // Add event.transceiver member over deprecated event.receiver + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimCreateOfferLegacy(window) { + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) { + if (offerOptions) { + if (typeof offerOptions.offerToReceiveAudio !== 'undefined') { + // support bit values + offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio; + } + var audioTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'audio'; + }); + if (offerOptions.offerToReceiveAudio === false && audioTransceiver) { + if (audioTransceiver.direction === 'sendrecv') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('sendonly'); + } else { + audioTransceiver.direction = 'sendonly'; + } + } else if (audioTransceiver.direction === 'recvonly') { + if (audioTransceiver.setDirection) { + audioTransceiver.setDirection('inactive'); + } else { + audioTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) { + this.addTransceiver('audio'); + } + + if (typeof offerOptions.offerToReceiveVideo !== 'undefined') { + // support bit values + offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo; + } + var videoTransceiver = this.getTransceivers().find(function (transceiver) { + return transceiver.receiver.track.kind === 'video'; + }); + if (offerOptions.offerToReceiveVideo === false && videoTransceiver) { + if (videoTransceiver.direction === 'sendrecv') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('sendonly'); + } else { + videoTransceiver.direction = 'sendonly'; + } + } else if (videoTransceiver.direction === 'recvonly') { + if (videoTransceiver.setDirection) { + videoTransceiver.setDirection('inactive'); + } else { + videoTransceiver.direction = 'inactive'; + } + } + } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) { + this.addTransceiver('video'); + } + } + return origCreateOffer.apply(this, arguments); + }; +} + +function shimAudioContext(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} + +},{"../utils":11}],11:[function(require,module,exports){ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.extractVersion = extractVersion; +exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +exports.disableLog = disableLog; +exports.disableWarnings = disableWarnings; +exports.log = log; +exports.deprecated = deprecated; +exports.detectBrowser = detectBrowser; +exports.compactObject = compactObject; +exports.walkStats = walkStats; +exports.filterStats = filterStats; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var logDisabled_ = true; +var deprecationWarnings_ = true; + +/** + * Extract browser version out of the provided user agent string. + * + * @param {!string} uastring userAgent string. + * @param {!string} expr Regular expression used as match criteria. + * @param {!number} pos position in the version string to be returned. + * @return {!number} browser version. + */ +function extractVersion(uastring, expr, pos) { + var match = uastring.match(expr); + return match && match.length >= pos && parseInt(match[pos], 10); +} + +// Wraps the peerconnection event eventNameToWrap in a function +// which returns the modified event object (or false to prevent +// the event). +function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) { + if (!window.RTCPeerConnection) { + return; + } + var proto = window.RTCPeerConnection.prototype; + var nativeAddEventListener = proto.addEventListener; + proto.addEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap) { + return nativeAddEventListener.apply(this, arguments); + } + var wrappedCallback = function wrappedCallback(e) { + var modifiedEvent = wrapper(e); + if (modifiedEvent) { + if (cb.handleEvent) { + cb.handleEvent(modifiedEvent); + } else { + cb(modifiedEvent); + } + } + }; + this._eventMap = this._eventMap || {}; + if (!this._eventMap[eventNameToWrap]) { + this._eventMap[eventNameToWrap] = new Map(); + } + this._eventMap[eventNameToWrap].set(cb, wrappedCallback); + return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]); + }; + + var nativeRemoveEventListener = proto.removeEventListener; + proto.removeEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) { + return nativeRemoveEventListener.apply(this, arguments); + } + if (!this._eventMap[eventNameToWrap].has(cb)) { + return nativeRemoveEventListener.apply(this, arguments); + } + var unwrappedCb = this._eventMap[eventNameToWrap].get(cb); + this._eventMap[eventNameToWrap].delete(cb); + if (this._eventMap[eventNameToWrap].size === 0) { + delete this._eventMap[eventNameToWrap]; + } + if (Object.keys(this._eventMap).length === 0) { + delete this._eventMap; + } + return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]); + }; + + Object.defineProperty(proto, 'on' + eventNameToWrap, { + get: function get() { + return this['_on' + eventNameToWrap]; + }, + set: function set(cb) { + if (this['_on' + eventNameToWrap]) { + this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]); + delete this['_on' + eventNameToWrap]; + } + if (cb) { + this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb); + } + }, + + enumerable: true, + configurable: true + }); +} + +function disableLog(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + logDisabled_ = bool; + return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled'; +} + +/** + * Disable or enable deprecation warnings + * @param {!boolean} bool set to true to disable warnings. + */ +function disableWarnings(bool) { + if (typeof bool !== 'boolean') { + return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + deprecationWarnings_ = !bool; + return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled'); +} + +function log() { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') { + if (logDisabled_) { + return; + } + if (typeof console !== 'undefined' && typeof console.log === 'function') { + console.log.apply(console, arguments); + } + } +} + +/** + * Shows a deprecation warning suggesting the modern and spec-compatible API. + */ +function deprecated(oldMethod, newMethod) { + if (!deprecationWarnings_) { + return; + } + console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.'); +} + +/** + * Browser detector. + * + * @return {object} result containing browser and version + * properties. + */ +function detectBrowser(window) { + // Returned result object. + var result = { browser: null, version: null }; + + // Fail early if it's not a browser + if (typeof window === 'undefined' || !window.navigator) { + result.browser = 'Not a browser.'; + return result; + } + + var navigator = window.navigator; + + + if (navigator.mozGetUserMedia) { + // Firefox. + result.browser = 'firefox'; + result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1); + } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) { + // Chrome, Chromium, Webview, Opera. + // Version matches Chrome/WebRTC version. + // Chrome 74 removed webkitGetUserMedia on http as well so we need the + // more complicated fallback to webkitRTCPeerConnection. + result.browser = 'chrome'; + result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2); + } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { + // Safari. + result.browser = 'safari'; + result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1); + result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype; + } else { + // Default fallthrough: not supported. + result.browser = 'Not a supported browser.'; + return result; + } + + return result; +} + +/** + * Checks if something is an object. + * + * @param {*} val The something you want to check. + * @return true if val is an object, false otherwise. + */ +function isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; +} + +/** + * Remove all empty objects and undefined values + * from a nested object -- an enhanced and vanilla version + * of Lodash's `compact`. + */ +function compactObject(data) { + if (!isObject(data)) { + return data; + } + + return Object.keys(data).reduce(function (accumulator, key) { + var isObj = isObject(data[key]); + var value = isObj ? compactObject(data[key]) : data[key]; + var isEmptyObject = isObj && !Object.keys(value).length; + if (value === undefined || isEmptyObject) { + return accumulator; + } + return Object.assign(accumulator, _defineProperty({}, key, value)); + }, {}); +} + +/* iterates the stats graph recursively. */ +function walkStats(stats, base, resultSet) { + if (!base || resultSet.has(base.id)) { + return; + } + resultSet.set(base.id, base); + Object.keys(base).forEach(function (name) { + if (name.endsWith('Id')) { + walkStats(stats, stats.get(base[name]), resultSet); + } else if (name.endsWith('Ids')) { + base[name].forEach(function (id) { + walkStats(stats, stats.get(id), resultSet); + }); + } + }); +} + +/* filter getStats for a sender/receiver track. */ +function filterStats(result, track, outbound) { + var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; + var filteredResult = new Map(); + if (track === null) { + return filteredResult; + } + var trackStats = []; + result.forEach(function (value) { + if (value.type === 'track' && value.trackIdentifier === track.id) { + trackStats.push(value); + } + }); + trackStats.forEach(function (trackStat) { + result.forEach(function (stats) { + if (stats.type === streamStatsType && stats.trackId === trackStat.id) { + walkStats(result, stats, filteredResult); + } + }); + }); + return filteredResult; +} + +},{}],12:[function(require,module,exports){ +/* eslint-env node */ +'use strict'; + +// SDP helpers. + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var SDPUtils = {}; + +// Generate an alphanumeric identifier for cname or mids. +// TODO: use UUIDs instead? https://gist.github.com/jed/982883 +SDPUtils.generateIdentifier = function () { + return Math.random().toString(36).substr(2, 10); +}; + +// The RTCP CNAME used by all peerconnections from the same JS. +SDPUtils.localCName = SDPUtils.generateIdentifier(); + +// Splits SDP into lines, dealing with both CRLF and LF. +SDPUtils.splitLines = function (blob) { + return blob.trim().split('\n').map(function (line) { + return line.trim(); + }); +}; +// Splits SDP into sessionpart and mediasections. Ensures CRLF. +SDPUtils.splitSections = function (blob) { + var parts = blob.split('\nm='); + return parts.map(function (part, index) { + return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; + }); +}; + +// returns the session description. +SDPUtils.getDescription = function (blob) { + var sections = SDPUtils.splitSections(blob); + return sections && sections[0]; +}; + +// returns the individual media sections. +SDPUtils.getMediaSections = function (blob) { + var sections = SDPUtils.splitSections(blob); + sections.shift(); + return sections; +}; + +// Returns lines that start with a certain prefix. +SDPUtils.matchPrefix = function (blob, prefix) { + return SDPUtils.splitLines(blob).filter(function (line) { + return line.indexOf(prefix) === 0; + }); +}; + +// Parses an ICE candidate line. Sample input: +// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 +// rport 55996" +SDPUtils.parseCandidate = function (line) { + var parts = void 0; + // Parse both variants. + if (line.indexOf('a=candidate:') === 0) { + parts = line.substring(12).split(' '); + } else { + parts = line.substring(10).split(' '); + } + + var candidate = { + foundation: parts[0], + component: { 1: 'rtp', 2: 'rtcp' }[parts[1]], + protocol: parts[2].toLowerCase(), + priority: parseInt(parts[3], 10), + ip: parts[4], + address: parts[4], // address is an alias for ip. + port: parseInt(parts[5], 10), + // skip parts[6] == 'typ' + type: parts[7] + }; + + for (var i = 8; i < parts.length; i += 2) { + switch (parts[i]) { + case 'raddr': + candidate.relatedAddress = parts[i + 1]; + break; + case 'rport': + candidate.relatedPort = parseInt(parts[i + 1], 10); + break; + case 'tcptype': + candidate.tcpType = parts[i + 1]; + break; + case 'ufrag': + candidate.ufrag = parts[i + 1]; // for backward compatibility. + candidate.usernameFragment = parts[i + 1]; + break; + default: + // extension handling, in particular ufrag. Don't overwrite. + if (candidate[parts[i]] === undefined) { + candidate[parts[i]] = parts[i + 1]; + } + break; + } + } + return candidate; +}; + +// Translates a candidate object into SDP candidate attribute. +SDPUtils.writeCandidate = function (candidate) { + var sdp = []; + sdp.push(candidate.foundation); + + var component = candidate.component; + if (component === 'rtp') { + sdp.push(1); + } else if (component === 'rtcp') { + sdp.push(2); + } else { + sdp.push(component); + } + sdp.push(candidate.protocol.toUpperCase()); + sdp.push(candidate.priority); + sdp.push(candidate.address || candidate.ip); + sdp.push(candidate.port); + + var type = candidate.type; + sdp.push('typ'); + sdp.push(type); + if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) { + sdp.push('raddr'); + sdp.push(candidate.relatedAddress); + sdp.push('rport'); + sdp.push(candidate.relatedPort); + } + if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { + sdp.push('tcptype'); + sdp.push(candidate.tcpType); + } + if (candidate.usernameFragment || candidate.ufrag) { + sdp.push('ufrag'); + sdp.push(candidate.usernameFragment || candidate.ufrag); + } + return 'candidate:' + sdp.join(' '); +}; + +// Parses an ice-options line, returns an array of option tags. +// a=ice-options:foo bar +SDPUtils.parseIceOptions = function (line) { + return line.substr(14).split(' '); +}; + +// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: +// a=rtpmap:111 opus/48000/2 +SDPUtils.parseRtpMap = function (line) { + var parts = line.substr(9).split(' '); + var parsed = { + payloadType: parseInt(parts.shift(), 10) // was: id + }; + + parts = parts[0].split('/'); + + parsed.name = parts[0]; + parsed.clockRate = parseInt(parts[1], 10); // was: clockrate + parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1; + // legacy alias, got renamed back to channels in ORTC. + parsed.numChannels = parsed.channels; + return parsed; +}; + +// Generate an a=rtpmap line from RTCRtpCodecCapability or +// RTCRtpCodecParameters. +SDPUtils.writeRtpMap = function (codec) { + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + var channels = codec.channels || codec.numChannels || 1; + return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\r\n'; +}; + +// Parses an a=extmap line (headerextension from RFC 5285). Sample input: +// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset +// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset +SDPUtils.parseExtmap = function (line) { + var parts = line.substr(9).split(' '); + return { + id: parseInt(parts[0], 10), + direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv', + uri: parts[1] + }; +}; + +// Generates a=extmap line from RTCRtpHeaderExtensionParameters or +// RTCRtpHeaderExtension. +SDPUtils.writeExtmap = function (headerExtension) { + return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + '\r\n'; +}; + +// Parses an ftmp line, returns dictionary. Sample input: +// a=fmtp:96 vbr=on;cng=on +// Also deals with vbr=on; cng=on +SDPUtils.parseFmtp = function (line) { + var parsed = {}; + var kv = void 0; + var parts = line.substr(line.indexOf(' ') + 1).split(';'); + for (var j = 0; j < parts.length; j++) { + kv = parts[j].trim().split('='); + parsed[kv[0].trim()] = kv[1]; + } + return parsed; +}; + +// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeFmtp = function (codec) { + var line = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.parameters && Object.keys(codec.parameters).length) { + var params = []; + Object.keys(codec.parameters).forEach(function (param) { + if (codec.parameters[param]) { + params.push(param + '=' + codec.parameters[param]); + } else { + params.push(param); + } + }); + line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; + } + return line; +}; + +// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: +// a=rtcp-fb:98 nack rpsi +SDPUtils.parseRtcpFb = function (line) { + var parts = line.substr(line.indexOf(' ') + 1).split(' '); + return { + type: parts.shift(), + parameter: parts.join(' ') + }; +}; +// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. +SDPUtils.writeRtcpFb = function (codec) { + var lines = ''; + var pt = codec.payloadType; + if (codec.preferredPayloadType !== undefined) { + pt = codec.preferredPayloadType; + } + if (codec.rtcpFeedback && codec.rtcpFeedback.length) { + // FIXME: special handling for trr-int? + codec.rtcpFeedback.forEach(function (fb) { + lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\r\n'; + }); + } + return lines; +}; + +// Parses an RFC 5576 ssrc media attribute. Sample input: +// a=ssrc:3735928559 cname:something +SDPUtils.parseSsrcMedia = function (line) { + var sp = line.indexOf(' '); + var parts = { + ssrc: parseInt(line.substr(7, sp - 7), 10) + }; + var colon = line.indexOf(':', sp); + if (colon > -1) { + parts.attribute = line.substr(sp + 1, colon - sp - 1); + parts.value = line.substr(colon + 1); + } else { + parts.attribute = line.substr(sp + 1); + } + return parts; +}; + +SDPUtils.parseSsrcGroup = function (line) { + var parts = line.substr(13).split(' '); + return { + semantics: parts.shift(), + ssrcs: parts.map(function (ssrc) { + return parseInt(ssrc, 10); + }) + }; +}; + +// Extracts the MID (RFC 5888) from a media section. +// returns the MID or undefined if no mid line was found. +SDPUtils.getMid = function (mediaSection) { + var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0]; + if (mid) { + return mid.substr(6); + } +}; + +SDPUtils.parseFingerprint = function (line) { + var parts = line.substr(14).split(' '); + return { + algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. + value: parts[1] + }; +}; + +// Extracts DTLS parameters from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the fingerprint line as input. See also getIceParameters. +SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:'); + // Note: a=setup line is ignored since we use the 'auto' role. + // Note2: 'algorithm' is not case sensitive except in Edge. + return { + role: 'auto', + fingerprints: lines.map(SDPUtils.parseFingerprint) + }; +}; + +// Serializes DTLS parameters to SDP. +SDPUtils.writeDtlsParameters = function (params, setupType) { + var sdp = 'a=setup:' + setupType + '\r\n'; + params.fingerprints.forEach(function (fp) { + sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; + }); + return sdp; +}; + +// Parses a=crypto lines into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members +SDPUtils.parseCryptoLine = function (line) { + var parts = line.substr(9).split(' '); + return { + tag: parseInt(parts[0], 10), + cryptoSuite: parts[1], + keyParams: parts[2], + sessionParams: parts.slice(3) + }; +}; + +SDPUtils.writeCryptoLine = function (parameters) { + return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (_typeof(parameters.keyParams) === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\r\n'; +}; + +// Parses the crypto key parameters into +// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam* +SDPUtils.parseCryptoKeyParams = function (keyParams) { + if (keyParams.indexOf('inline:') !== 0) { + return null; + } + var parts = keyParams.substr(7).split('|'); + return { + keyMethod: 'inline', + keySalt: parts[0], + lifeTime: parts[1], + mkiValue: parts[2] ? parts[2].split(':')[0] : undefined, + mkiLength: parts[2] ? parts[2].split(':')[1] : undefined + }; +}; + +SDPUtils.writeCryptoKeyParams = function (keyParams) { + return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : ''); +}; + +// Extracts all SDES parameters. +SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) { + var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:'); + return lines.map(SDPUtils.parseCryptoLine); +}; + +// Parses ICE information from SDP media section or sessionpart. +// FIXME: for consistency with other functions this should only +// get the ice-ufrag and ice-pwd lines as input. +SDPUtils.getIceParameters = function (mediaSection, sessionpart) { + var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0]; + var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0]; + if (!(ufrag && pwd)) { + return null; + } + return { + usernameFragment: ufrag.substr(12), + password: pwd.substr(10) + }; +}; + +// Serializes ICE parameters to SDP. +SDPUtils.writeIceParameters = function (params) { + var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + 'a=ice-pwd:' + params.password + '\r\n'; + if (params.iceLite) { + sdp += 'a=ice-lite\r\n'; + } + return sdp; +}; + +// Parses the SDP media section and returns RTCRtpParameters. +SDPUtils.parseRtpParameters = function (mediaSection) { + var description = { + codecs: [], + headerExtensions: [], + fecMechanisms: [], + rtcp: [] + }; + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + for (var i = 3; i < mline.length; i++) { + // find all codecs from mline[3..] + var pt = mline[i]; + var rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0]; + if (rtpmapline) { + var codec = SDPUtils.parseRtpMap(rtpmapline); + var fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' '); + // Only the first a=fmtp: is considered. + codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; + codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb); + description.codecs.push(codec); + // parse FEC mechanisms from rtpmap lines. + switch (codec.name.toUpperCase()) { + case 'RED': + case 'ULPFEC': + description.fecMechanisms.push(codec.name.toUpperCase()); + break; + default: + // only RED and ULPFEC are recognized as FEC mechanisms. + break; + } + } + } + SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function (line) { + description.headerExtensions.push(SDPUtils.parseExtmap(line)); + }); + // FIXME: parse rtcp. + return description; +}; + +// Generates parts of the SDP media section describing the capabilities / +// parameters. +SDPUtils.writeRtpDescription = function (kind, caps) { + var sdp = ''; + + // Build the mline. + sdp += 'm=' + kind + ' '; + sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. + sdp += ' UDP/TLS/RTP/SAVPF '; + sdp += caps.codecs.map(function (codec) { + if (codec.preferredPayloadType !== undefined) { + return codec.preferredPayloadType; + } + return codec.payloadType; + }).join(' ') + '\r\n'; + + sdp += 'c=IN IP4 0.0.0.0\r\n'; + sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; + + // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. + caps.codecs.forEach(function (codec) { + sdp += SDPUtils.writeRtpMap(codec); + sdp += SDPUtils.writeFmtp(codec); + sdp += SDPUtils.writeRtcpFb(codec); + }); + var maxptime = 0; + caps.codecs.forEach(function (codec) { + if (codec.maxptime > maxptime) { + maxptime = codec.maxptime; + } + }); + if (maxptime > 0) { + sdp += 'a=maxptime:' + maxptime + '\r\n'; + } + + if (caps.headerExtensions) { + caps.headerExtensions.forEach(function (extension) { + sdp += SDPUtils.writeExtmap(extension); + }); + } + // FIXME: write fecMechanisms. + return sdp; +}; + +// Parses the SDP media section and returns an array of +// RTCRtpEncodingParameters. +SDPUtils.parseRtpEncodingParameters = function (mediaSection) { + var encodingParameters = []; + var description = SDPUtils.parseRtpParameters(mediaSection); + var hasRed = description.fecMechanisms.indexOf('RED') !== -1; + var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; + + // filter a=ssrc:... cname:, ignore PlanB-msid + var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (parts) { + return parts.attribute === 'cname'; + }); + var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; + var secondarySsrc = void 0; + + var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(function (line) { + var parts = line.substr(17).split(' '); + return parts.map(function (part) { + return parseInt(part, 10); + }); + }); + if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { + secondarySsrc = flows[0][1]; + } + + description.codecs.forEach(function (codec) { + if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { + var encParam = { + ssrc: primarySsrc, + codecPayloadType: parseInt(codec.parameters.apt, 10) + }; + if (primarySsrc && secondarySsrc) { + encParam.rtx = { ssrc: secondarySsrc }; + } + encodingParameters.push(encParam); + if (hasRed) { + encParam = JSON.parse(JSON.stringify(encParam)); + encParam.fec = { + ssrc: primarySsrc, + mechanism: hasUlpfec ? 'red+ulpfec' : 'red' + }; + encodingParameters.push(encParam); + } + } + }); + if (encodingParameters.length === 0 && primarySsrc) { + encodingParameters.push({ + ssrc: primarySsrc + }); + } + + // we support both b=AS and b=TIAS but interpret AS as TIAS. + var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); + if (bandwidth.length) { + if (bandwidth[0].indexOf('b=TIAS:') === 0) { + bandwidth = parseInt(bandwidth[0].substr(7), 10); + } else if (bandwidth[0].indexOf('b=AS:') === 0) { + // use formula from JSEP to convert b=AS to TIAS value. + bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - 50 * 40 * 8; + } else { + bandwidth = undefined; + } + encodingParameters.forEach(function (params) { + params.maxBitrate = bandwidth; + }); + } + return encodingParameters; +}; + +// parses http://draft.ortc.org/#rtcrtcpparameters* +SDPUtils.parseRtcpParameters = function (mediaSection) { + var rtcpParameters = {}; + + // Gets the first SSRC. Note that with RTX there might be multiple + // SSRCs. + var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (obj) { + return obj.attribute === 'cname'; + })[0]; + if (remoteSsrc) { + rtcpParameters.cname = remoteSsrc.value; + rtcpParameters.ssrc = remoteSsrc.ssrc; + } + + // Edge uses the compound attribute instead of reducedSize + // compound is !reducedSize + var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize'); + rtcpParameters.reducedSize = rsize.length > 0; + rtcpParameters.compound = rsize.length === 0; + + // parses the rtcp-mux attrіbute. + // Note that Edge does not support unmuxed RTCP. + var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux'); + rtcpParameters.mux = mux.length > 0; + + return rtcpParameters; +}; + +SDPUtils.writeRtcpParameters = function (rtcpParameters) { + var sdp = ''; + if (rtcpParameters.reducedSize) { + sdp += 'a=rtcp-rsize\r\n'; + } + if (rtcpParameters.mux) { + sdp += 'a=rtcp-mux\r\n'; + } + if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) { + sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\r\n'; + } + return sdp; +}; + +// parses either a=msid: or a=ssrc:... msid lines and returns +// the id of the MediaStream and MediaStreamTrack. +SDPUtils.parseMsid = function (mediaSection) { + var parts = void 0; + var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:'); + if (spec.length === 1) { + parts = spec[0].substr(7).split(' '); + return { stream: parts[0], track: parts[1] }; + } + var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) { + return SDPUtils.parseSsrcMedia(line); + }).filter(function (msidParts) { + return msidParts.attribute === 'msid'; + }); + if (planB.length > 0) { + parts = planB[0].value.split(' '); + return { stream: parts[0], track: parts[1] }; + } +}; + +// SCTP +// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back +// to draft-ietf-mmusic-sctp-sdp-05 +SDPUtils.parseSctpDescription = function (mediaSection) { + var mline = SDPUtils.parseMLine(mediaSection); + var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:'); + var maxMessageSize = void 0; + if (maxSizeLine.length > 0) { + maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10); + } + if (isNaN(maxMessageSize)) { + maxMessageSize = 65536; + } + var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:'); + if (sctpPort.length > 0) { + return { + port: parseInt(sctpPort[0].substr(12), 10), + protocol: mline.fmt, + maxMessageSize: maxMessageSize + }; + } + var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:'); + if (sctpMapLines.length > 0) { + var parts = sctpMapLines[0].substr(10).split(' '); + return { + port: parseInt(parts[0], 10), + protocol: parts[1], + maxMessageSize: maxMessageSize + }; + } +}; + +// SCTP +// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers +// support by now receiving in this format, unless we originally parsed +// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line +// protocol of DTLS/SCTP -- without UDP/ or TCP/) +SDPUtils.writeSctpDescription = function (media, sctp) { + var output = []; + if (media.protocol !== 'DTLS/SCTP') { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctp-port:' + sctp.port + '\r\n']; + } else { + output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n']; + } + if (sctp.maxMessageSize !== undefined) { + output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n'); + } + return output.join(''); +}; + +// Generate a session ID for SDP. +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1 +// recommends using a cryptographically random +ve 64-bit value +// but right now this should be acceptable and within the right range +SDPUtils.generateSessionId = function () { + return Math.random().toString().substr(2, 21); +}; + +// Write boiler plate for start of SDP +// sessId argument is optional - if not supplied it will +// be generated randomly +// sessVersion is optional and defaults to 2 +// sessUser is optional and defaults to 'thisisadapterortc' +SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) { + var sessionId = void 0; + var version = sessVer !== undefined ? sessVer : 2; + if (sessId) { + sessionId = sessId; + } else { + sessionId = SDPUtils.generateSessionId(); + } + var user = sessUser || 'thisisadapterortc'; + // FIXME: sess-id should be an NTP timestamp. + return 'v=0\r\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\r\n' + 's=-\r\n' + 't=0 0\r\n'; +}; + +// Gets the direction from the mediaSection or the sessionpart. +SDPUtils.getDirection = function (mediaSection, sessionpart) { + // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. + var lines = SDPUtils.splitLines(mediaSection); + for (var i = 0; i < lines.length; i++) { + switch (lines[i]) { + case 'a=sendrecv': + case 'a=sendonly': + case 'a=recvonly': + case 'a=inactive': + return lines[i].substr(2); + default: + // FIXME: What should happen here? + } + } + if (sessionpart) { + return SDPUtils.getDirection(sessionpart); + } + return 'sendrecv'; +}; + +SDPUtils.getKind = function (mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var mline = lines[0].split(' '); + return mline[0].substr(2); +}; + +SDPUtils.isRejected = function (mediaSection) { + return mediaSection.split(' ', 2)[1] === '0'; +}; + +SDPUtils.parseMLine = function (mediaSection) { + var lines = SDPUtils.splitLines(mediaSection); + var parts = lines[0].substr(2).split(' '); + return { + kind: parts[0], + port: parseInt(parts[1], 10), + protocol: parts[2], + fmt: parts.slice(3).join(' ') + }; +}; + +SDPUtils.parseOLine = function (mediaSection) { + var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0]; + var parts = line.substr(2).split(' '); + return { + username: parts[0], + sessionId: parts[1], + sessionVersion: parseInt(parts[2], 10), + netType: parts[3], + addressType: parts[4], + address: parts[5] + }; +}; + +// a very naive interpretation of a valid SDP. +SDPUtils.isValidSDP = function (blob) { + if (typeof blob !== 'string' || blob.length === 0) { + return false; + } + var lines = SDPUtils.splitLines(blob); + for (var i = 0; i < lines.length; i++) { + if (lines[i].length < 2 || lines[i].charAt(1) !== '=') { + return false; + } + // TODO: check the modifier a bit more. + } + return true; +}; + +// Expose public methods. +if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') { + module.exports = SDPUtils; +} +},{}]},{},[1]); diff --git a/static/lib/bootstrap/css/bootstrap.css b/static/lib/bootstrap/css/bootstrap.css new file mode 100644 index 0000000..892302a --- /dev/null +++ b/static/lib/bootstrap/css/bootstrap.css @@ -0,0 +1,10837 @@ +@charset "UTF-8"; +/*! + * Bootstrap v5.0.2 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} + +body { + margin: 0; + font-family: var(--bs-font-sans-serif); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +hr { + margin: 1rem 0; + color: inherit; + background-color: currentColor; + border: 0; + opacity: 0.25; +} + +hr:not([size]) { + height: 1px; +} + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; + } +} + +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; + } +} + +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; + } +} + +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; + } +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-bs-original-title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul { + padding-left: 2rem; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small, .small { + font-size: 0.875em; +} + +mark, .mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #0d6efd; + text-decoration: underline; +} +a:hover { + color: #0a58ca; +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; + direction: ltr /* rtl:ignore */; + unicode-bidi: bidi-override; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: #d63384; + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 0.875em; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} +kbd kbd { + padding: 0; + font-size: 1em; + font-weight: 700; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role=button] { + cursor: pointer; +} + +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} + +[list]::-webkit-calendar-picker-indicator { + display: none; +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} +button:not(:disabled), +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::file-selector-button { + font: inherit; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} + +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} + +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} + +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} + +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} + +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.blockquote > :last-child { + margin-bottom: 0; +} + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} +.blockquote-footer::before { + content: "— "; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(var(--bs-gutter-y) * -1); + margin-right: calc(var(--bs-gutter-x) * -.5); + margin-left: calc(var(--bs-gutter-x) * -.5); +} +.row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } +} +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-sm-0 { + margin-left: 0; + } + + .offset-sm-1 { + margin-left: 8.33333333%; + } + + .offset-sm-2 { + margin-left: 16.66666667%; + } + + .offset-sm-3 { + margin-left: 25%; + } + + .offset-sm-4 { + margin-left: 33.33333333%; + } + + .offset-sm-5 { + margin-left: 41.66666667%; + } + + .offset-sm-6 { + margin-left: 50%; + } + + .offset-sm-7 { + margin-left: 58.33333333%; + } + + .offset-sm-8 { + margin-left: 66.66666667%; + } + + .offset-sm-9 { + margin-left: 75%; + } + + .offset-sm-10 { + margin-left: 83.33333333%; + } + + .offset-sm-11 { + margin-left: 91.66666667%; + } + + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-md-0 { + margin-left: 0; + } + + .offset-md-1 { + margin-left: 8.33333333%; + } + + .offset-md-2 { + margin-left: 16.66666667%; + } + + .offset-md-3 { + margin-left: 25%; + } + + .offset-md-4 { + margin-left: 33.33333333%; + } + + .offset-md-5 { + margin-left: 41.66666667%; + } + + .offset-md-6 { + margin-left: 50%; + } + + .offset-md-7 { + margin-left: 58.33333333%; + } + + .offset-md-8 { + margin-left: 66.66666667%; + } + + .offset-md-9 { + margin-left: 75%; + } + + .offset-md-10 { + margin-left: 83.33333333%; + } + + .offset-md-11 { + margin-left: 91.66666667%; + } + + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-lg-0 { + margin-left: 0; + } + + .offset-lg-1 { + margin-left: 8.33333333%; + } + + .offset-lg-2 { + margin-left: 16.66666667%; + } + + .offset-lg-3 { + margin-left: 25%; + } + + .offset-lg-4 { + margin-left: 33.33333333%; + } + + .offset-lg-5 { + margin-left: 41.66666667%; + } + + .offset-lg-6 { + margin-left: 50%; + } + + .offset-lg-7 { + margin-left: 58.33333333%; + } + + .offset-lg-8 { + margin-left: 66.66666667%; + } + + .offset-lg-9 { + margin-left: 75%; + } + + .offset-lg-10 { + margin-left: 83.33333333%; + } + + .offset-lg-11 { + margin-left: 91.66666667%; + } + + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xl-0 { + margin-left: 0; + } + + .offset-xl-1 { + margin-left: 8.33333333%; + } + + .offset-xl-2 { + margin-left: 16.66666667%; + } + + .offset-xl-3 { + margin-left: 25%; + } + + .offset-xl-4 { + margin-left: 33.33333333%; + } + + .offset-xl-5 { + margin-left: 41.66666667%; + } + + .offset-xl-6 { + margin-left: 50%; + } + + .offset-xl-7 { + margin-left: 58.33333333%; + } + + .offset-xl-8 { + margin-left: 66.66666667%; + } + + .offset-xl-9 { + margin-left: 75%; + } + + .offset-xl-10 { + margin-left: 83.33333333%; + } + + .offset-xl-11 { + margin-left: 91.66666667%; + } + + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xxl-0 { + margin-left: 0; + } + + .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .offset-xxl-3 { + margin-left: 25%; + } + + .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .offset-xxl-6 { + margin-left: 50%; + } + + .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .offset-xxl-9 { + margin-left: 75%; + } + + .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.table { + --bs-table-bg: transparent; + --bs-table-accent-bg: transparent; + --bs-table-striped-color: #212529; + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: #212529; + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: #212529; + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: #212529; + vertical-align: top; + border-color: #dee2e6; +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} +.table > :not(:last-child) > :last-child > * { + border-bottom-color: currentColor; +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.table-bordered > :not(caption) > * { + border-width: 1px 0; +} +.table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} + +.table-striped > tbody > tr:nth-of-type(odd) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.table-hover > tbody > tr:hover { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.table-primary { + --bs-table-bg: #cfe2ff; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: #000; + border-color: #bacbe6; +} + +.table-secondary { + --bs-table-bg: #e2e3e5; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: #000; + border-color: #cbccce; +} + +.table-success { + --bs-table-bg: #d1e7dd; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: #000; + border-color: #bcd0c7; +} + +.table-info { + --bs-table-bg: #cff4fc; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: #000; + border-color: #badce3; +} + +.table-warning { + --bs-table-bg: #fff3cd; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: #000; + border-color: #e6dbb9; +} + +.table-danger { + --bs-table-bg: #f8d7da; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfc2c4; +} + +.table-light { + --bs-table-bg: #f8f9fa; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfe0e1; +} + +.table-dark { + --bs-table-bg: #212529; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #373b3e; +} + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.form-label { + margin-bottom: 0.5rem; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} +.form-control[type=file] { + overflow: hidden; +} +.form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-control::-webkit-date-and-time-value { + height: 1.5em; +} +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} +.form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} +.form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + min-height: calc(1.5em + (0.5rem + 2px)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} +.form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} +.form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.form-control-lg { + min-height: calc(1.5em + (1rem + 2px)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} +.form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} +.form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +textarea.form-control { + min-height: calc(1.5em + (0.75rem + 2px)); +} +textarea.form-control-sm { + min-height: calc(1.5em + (0.5rem + 2px)); +} +textarea.form-control-lg { + min-height: calc(1.5em + (1rem + 2px)); +} + +.form-control-color { + max-width: 3rem; + height: auto; + padding: 0.375rem; +} +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control-color::-moz-color-swatch { + height: 1.5em; + border-radius: 0.25rem; +} +.form-control-color::-webkit-color-swatch { + height: 1.5em; + border-radius: 0.25rem; +} + +.form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; + } +} +.form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} +.form-select:disabled { + background-color: #e9ecef; +} +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; +} + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; +} + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; +} +.form-check-input[type=checkbox] { + border-radius: 0.25em; +} +.form-check-input[type=radio] { + border-radius: 50%; +} +.form-check-input:active { + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} +.form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + opacity: 0.5; +} + +.form-switch { + padding-left: 2.5em; +} +.form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; + } +} +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-range:focus { + outline: 0; +} +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range::-moz-focus-outer { + border: 0; +} +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} +.form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} +.form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} +.form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.form-floating { + position: relative; +} +.form-floating > .form-control, +.form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} +.form-floating > label { + position: absolute; + top: 0; + left: 0; + height: 100%; + padding: 1rem 0.75rem; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; + } +} +.form-floating > .form-control { + padding: 1rem 0.75rem; +} +.form-floating > .form-control::-moz-placeholder { + color: transparent; +} +.form-floating > .form-control::placeholder { + color: transparent; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .form-select ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.input-group > .form-control, +.input-group > .form-select { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.input-group > .form-control:focus, +.input-group > .form-select:focus { + z-index: 3; +} +.input-group .btn { + position: relative; + z-index: 2; +} +.input-group .btn:focus { + z-index: 3; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; +} + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.25rem; +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: #198754; +} +.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: #198754; +} +.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: #198754; +} +.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, +.was-validated .input-group .form-select:valid, +.input-group .form-select.is-valid { + z-index: 1; +} +.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, +.was-validated .input-group .form-select:valid:focus, +.input-group .form-select.is-valid:focus { + z-index: 3; +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: #dc3545; +} +.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: #dc3545; +} +.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: #dc3545; +} +.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, +.was-validated .input-group .form-select:invalid, +.input-group .form-select.is-invalid { + z-index: 2; +} +.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, +.was-validated .input-group .form-select:invalid:focus, +.input-group .form-select.is-invalid:focus { + z-index: 3; +} + +.btn { + display: inline-block; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: #212529; +} +.btn-check:focus + .btn, .btn:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.btn:disabled, .btn.disabled, fieldset:disabled .btn { + pointer-events: none; + opacity: 0.65; +} + +.btn-primary { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-primary:hover { + color: #fff; + background-color: #0b5ed7; + border-color: #0a58ca; +} +.btn-check:focus + .btn-primary, .btn-primary:focus { + color: #fff; + background-color: #0b5ed7; + border-color: #0a58ca; + box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); +} +.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0a58ca; + border-color: #0a53be; +} +.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); +} +.btn-primary:disabled, .btn-primary.disabled { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-secondary:hover { + color: #fff; + background-color: #5c636a; + border-color: #565e64; +} +.btn-check:focus + .btn-secondary, .btn-secondary:focus { + color: #fff; + background-color: #5c636a; + border-color: #565e64; + box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); +} +.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #565e64; + border-color: #51585e; +} +.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); +} +.btn-secondary:disabled, .btn-secondary.disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-success { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-success:hover { + color: #fff; + background-color: #157347; + border-color: #146c43; +} +.btn-check:focus + .btn-success, .btn-success:focus { + color: #fff; + background-color: #157347; + border-color: #146c43; + box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); +} +.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #146c43; + border-color: #13653f; +} +.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); +} +.btn-success:disabled, .btn-success.disabled { + color: #fff; + background-color: #198754; + border-color: #198754; +} + +.btn-info { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-info:hover { + color: #000; + background-color: #31d2f2; + border-color: #25cff2; +} +.btn-check:focus + .btn-info, .btn-info:focus { + color: #000; + background-color: #31d2f2; + border-color: #25cff2; + box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); +} +.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { + color: #000; + background-color: #3dd5f3; + border-color: #25cff2; +} +.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); +} +.btn-info:disabled, .btn-info.disabled { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} + +.btn-warning { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-warning:hover { + color: #000; + background-color: #ffca2c; + border-color: #ffc720; +} +.btn-check:focus + .btn-warning, .btn-warning:focus { + color: #000; + background-color: #ffca2c; + border-color: #ffc720; + box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); +} +.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { + color: #000; + background-color: #ffcd39; + border-color: #ffc720; +} +.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); +} +.btn-warning:disabled, .btn-warning.disabled { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-danger:hover { + color: #fff; + background-color: #bb2d3b; + border-color: #b02a37; +} +.btn-check:focus + .btn-danger, .btn-danger:focus { + color: #fff; + background-color: #bb2d3b; + border-color: #b02a37; + box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); +} +.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #b02a37; + border-color: #a52834; +} +.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); +} +.btn-danger:disabled, .btn-danger.disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-light { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-light:hover { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; +} +.btn-check:focus + .btn-light, .btn-light:focus { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; + box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); +} +.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; +} +.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); +} +.btn-light:disabled, .btn-light.disabled { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-dark { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-dark:hover { + color: #fff; + background-color: #1c1f23; + border-color: #1a1e21; +} +.btn-check:focus + .btn-dark, .btn-dark:focus { + color: #fff; + background-color: #1c1f23; + border-color: #1a1e21; + box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); +} +.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1a1e21; + border-color: #191c1f; +} +.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); +} +.btn-dark:disabled, .btn-dark.disabled { + color: #fff; + background-color: #212529; + border-color: #212529; +} + +.btn-outline-primary { + color: #0d6efd; + border-color: #0d6efd; +} +.btn-outline-primary:hover { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); +} +.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); +} +.btn-outline-primary:disabled, .btn-outline-primary.disabled { + color: #0d6efd; + background-color: transparent; +} + +.btn-outline-secondary { + color: #6c757d; + border-color: #6c757d; +} +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus { + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); +} +.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); +} +.btn-outline-secondary:disabled, .btn-outline-secondary.disabled { + color: #6c757d; + background-color: transparent; +} + +.btn-outline-success { + color: #198754; + border-color: #198754; +} +.btn-outline-success:hover { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-check:focus + .btn-outline-success, .btn-outline-success:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); +} +.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); +} +.btn-outline-success:disabled, .btn-outline-success.disabled { + color: #198754; + background-color: transparent; +} + +.btn-outline-info { + color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-outline-info:hover { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-check:focus + .btn-outline-info, .btn-outline-info:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); +} +.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); +} +.btn-outline-info:disabled, .btn-outline-info.disabled { + color: #0dcaf0; + background-color: transparent; +} + +.btn-outline-warning { + color: #ffc107; + border-color: #ffc107; +} +.btn-outline-warning:hover { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus { + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); +} +.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); +} +.btn-outline-warning:disabled, .btn-outline-warning.disabled { + color: #ffc107; + background-color: transparent; +} + +.btn-outline-danger { + color: #dc3545; + border-color: #dc3545; +} +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); +} +.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); +} +.btn-outline-danger:disabled, .btn-outline-danger.disabled { + color: #dc3545; + background-color: transparent; +} + +.btn-outline-light { + color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-outline-light:hover { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-check:focus + .btn-outline-light, .btn-outline-light:focus { + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); +} +.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); +} +.btn-outline-light:disabled, .btn-outline-light.disabled { + color: #f8f9fa; + background-color: transparent; +} + +.btn-outline-dark { + color: #212529; + border-color: #212529; +} +.btn-outline-dark:hover { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus { + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); +} +.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); +} +.btn-outline-dark:disabled, .btn-outline-dark.disabled { + color: #212529; + background-color: transparent; +} + +.btn-link { + font-weight: 400; + color: #0d6efd; + text-decoration: underline; +} +.btn-link:hover { + color: #0a58ca; +} +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropend, +.dropdown, +.dropstart { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + z-index: 1000; + display: none; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: 0.125rem; +} + +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid rgba(0, 0, 0, 0.15); +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.dropdown-item:hover, .dropdown-item:focus { + color: #1e2125; + background-color: #e9ecef; +} +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #0d6efd; +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: #adb5bd; + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1rem; + color: #212529; +} + +.dropdown-menu-dark { + color: #dee2e6; + background-color: #343a40; + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { + color: #fff; + background-color: rgba(255, 255, 255, 0.15); +} +.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { + color: #fff; + background-color: #0d6efd; +} +.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { + color: #adb5bd; +} +.dropdown-menu-dark .dropdown-divider { + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item-text { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-header { + color: #adb5bd; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; + color: #0d6efd; + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; + } +} +.nav-link:hover, .nav-link:focus { + color: #0a58ca; +} +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} +.nav-tabs .nav-link { + margin-bottom: -1px; + background: none; + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; + isolation: isolate; +} +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + background: none; + border: 0; + border-radius: 0.25rem; +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #0d6efd; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.navbar > .container, +.navbar > .container-fluid, +.navbar > .container-sm, +.navbar > .container-md, +.navbar > .container-lg, +.navbar > .container-xl, +.navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} +.navbar-brand { + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + text-decoration: none; + white-space: nowrap; +} +.navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} +.navbar-nav .dropdown-menu { + position: static; +} + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; + transition: box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; + } +} +.navbar-toggler:hover { + text-decoration: none; +} +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 0.25rem; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } +} +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} +.navbar-expand .navbar-nav { + flex-direction: row; +} +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.55); +} +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.55); + border-color: rgba(0, 0, 0, 0.1); +} +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.55); +} +.navbar-light .navbar-text a, +.navbar-light .navbar-text a:hover, +.navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.55); +} +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.55); + border-color: rgba(255, 255, 255, 0.1); +} +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.55); +} +.navbar-dark .navbar-text a, +.navbar-dark .navbar-text a:hover, +.navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + padding: 1rem 1rem; +} + +.card-title { + margin-bottom: 0.5rem; +} + +.card-subtitle { + margin-top: -0.25rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} +.card-link + .card-link { + margin-left: 1rem; +} + +.card-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-footer { + padding: 0.5rem 1rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.5rem; + margin-bottom: -0.5rem; + margin-left: -0.5rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.5rem; + margin-left: -0.5rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1rem; + border-radius: calc(0.25rem - 1px); +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-group > .card { + margin-bottom: 0.75rem; +} +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, +.card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, +.card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, +.card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, +.card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: 1rem 1.25rem; + font-size: 1rem; + color: #212529; + text-align: left; + background-color: #fff; + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: #0c63e4; + background-color: #e7f1ff; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125); +} +.accordion-button:not(.collapsed)::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + transform: rotate(-180deg); +} +.accordion-button::after { + flex-shrink: 0; + width: 1.25rem; + height: 1.25rem; + margin-left: auto; + content: ""; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-size: 1.25rem; + transition: transform 0.2s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.accordion-item:first-of-type { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.accordion-item:first-of-type .accordion-button { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.accordion-item:not(:first-of-type) { + border-top: 0; +} +.accordion-item:last-of-type { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.accordion-body { + padding: 1rem 1.25rem; +} + +.accordion-flush .accordion-collapse { + border-width: 0; +} +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.accordion-flush .accordion-item:first-child { + border-top: 0; +} +.accordion-flush .accordion-item:last-child { + border-bottom: 0; +} +.accordion-flush .accordion-item .accordion-button { + border-radius: 0; +} + +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: 0 0; + margin-bottom: 1rem; + list-style: none; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: 0.5rem; + color: #6c757d; + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; +} +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + color: #0d6efd; + text-decoration: none; + background-color: #fff; + border: 1px solid #dee2e6; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; + } +} +.page-link:hover { + z-index: 2; + color: #0a58ca; + background-color: #e9ecef; + border-color: #dee2e6; +} +.page-link:focus { + z-index: 3; + color: #0a58ca; + background-color: #e9ecef; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.page-item:not(:first-child) .page-link { + margin-left: -1px; +} +.page-item.active .page-link { + z-index: 3; + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + background-color: #fff; + border-color: #dee2e6; +} + +.page-link { + padding: 0.375rem 0.75rem; +} + +.page-item:first-child .page-link { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; +} +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; +} +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.35em 0.65em; + font-size: 0.75em; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.alert { + position: relative; + padding: 1rem 1rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 3rem; +} +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.alert-primary { + color: #084298; + background-color: #cfe2ff; + border-color: #b6d4fe; +} +.alert-primary .alert-link { + color: #06357a; +} + +.alert-secondary { + color: #41464b; + background-color: #e2e3e5; + border-color: #d3d6d8; +} +.alert-secondary .alert-link { + color: #34383c; +} + +.alert-success { + color: #0f5132; + background-color: #d1e7dd; + border-color: #badbcc; +} +.alert-success .alert-link { + color: #0c4128; +} + +.alert-info { + color: #055160; + background-color: #cff4fc; + border-color: #b6effb; +} +.alert-info .alert-link { + color: #04414d; +} + +.alert-warning { + color: #664d03; + background-color: #fff3cd; + border-color: #ffecb5; +} +.alert-warning .alert-link { + color: #523e02; +} + +.alert-danger { + color: #842029; + background-color: #f8d7da; + border-color: #f5c2c7; +} +.alert-danger .alert-link { + color: #6a1a21; +} + +.alert-light { + color: #636464; + background-color: #fefefe; + border-color: #fdfdfe; +} +.alert-light .alert-link { + color: #4f5050; +} + +.alert-dark { + color: #141619; + background-color: #d3d3d4; + border-color: #bcbebf; +} +.alert-dark .alert-link { + color: #101214; +} + +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.progress { + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #0d6efd; + transition: width 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: 0.25rem; +} + +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > li::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.5rem 1rem; + color: #212529; + text-decoration: none; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} + +.list-group-horizontal { + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.list-group-item-info { + color: #055160; + background-color: #cff4fc; +} +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.list-group-item-light { + color: #636464; + background-color: #fefefe; +} +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + border: 0; + border-radius: 0.25rem; + opacity: 0.5; +} +.btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} +.btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} +.btn-close:disabled, .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.toast { + width: 350px; + max-width: 100%; + font-size: 0.875rem; + pointer-events: auto; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.toast:not(.showing):not(.show) { + opacity: 0; +} +.toast.hide { + display: none; +} + +.toast-container { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast-header { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.toast-header .btn-close { + margin-right: -0.375rem; + margin-left: 0.75rem; +} + +.toast-body { + padding: 0.75rem; + word-wrap: break-word; +} + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1060; + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} +.modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + transform: none; +} +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + height: calc(100% - 1rem); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.modal-header .btn-close { + padding: 0.5rem 0.5rem; + margin: -0.5rem -0.5rem -0.5rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: flex; + flex-wrap: wrap; + flex-shrink: 0; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid #dee2e6; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius: calc(0.3rem - 1px); +} +.modal-footer > * { + margin: 0.25rem; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + + .modal-dialog-scrollable { + height: calc(100% - 3.5rem); + } + + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + + .modal-sm { + max-width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg, +.modal-xl { + max-width: 800px; + } +} +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.modal-fullscreen .modal-header { + border-radius: 0; +} +.modal-fullscreen .modal-body { + overflow-y: auto; +} +.modal-fullscreen .modal-footer { + border-radius: 0; +} + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } +} +.tooltip { + position: absolute; + z-index: 1080; + display: block; + margin: 0; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: 0.9; +} +.tooltip .tooltip-arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] { + padding: 0.4rem 0; +} +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} +.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] { + padding: 0 0.4rem; +} +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] { + padding: 0.4rem 0; +} +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} +.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] { + padding: 0 0.4rem; +} +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + z-index: 1070; + display: block; + max-width: 276px; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} +.popover .popover-arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; +} +.popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-0.5rem - 1px); +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-0.5rem - 1px); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f0f0f0; +} + +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f0f0f0; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 1rem 1rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +/* rtl:begin:ignore */ +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + +/* rtl:end:ignore */ +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, +.carousel-control-next { + transition: none; + } +} +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +/* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; + } +} +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} +.carousel-dark .carousel-caption { + color: #000; +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: 0.75s linear infinite spinner-border; + animation: 0.75s linear infinite spinner-border; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: 0.75s linear infinite spinner-grow; + animation: 0.75s linear infinite spinner-grow; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .spinner-border, +.spinner-grow { + -webkit-animation-duration: 1.5s; + animation-duration: 1.5s; + } +} +.offcanvas { + position: fixed; + bottom: 0; + z-index: 1050; + display: flex; + flex-direction: column; + max-width: 100%; + visibility: hidden; + background-color: #fff; + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; + } +} + +.offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem; +} +.offcanvas-header .btn-close { + padding: 0.5rem 0.5rem; + margin-top: -0.5rem; + margin-right: -0.5rem; + margin-bottom: -0.5rem; +} + +.offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} + +.offcanvas-body { + flex-grow: 1; + padding: 1rem 1rem; + overflow-y: auto; +} + +.offcanvas-start { + top: 0; + left: 0; + width: 400px; + border-right: 1px solid rgba(0, 0, 0, 0.2); + transform: translateX(-100%); +} + +.offcanvas-end { + top: 0; + right: 0; + width: 400px; + border-left: 1px solid rgba(0, 0, 0, 0.2); + transform: translateX(100%); +} + +.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: 30vh; + max-height: 100%; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + transform: translateY(-100%); +} + +.offcanvas-bottom { + right: 0; + left: 0; + height: 30vh; + max-height: 100%; + border-top: 1px solid rgba(0, 0, 0, 0.2); + transform: translateY(100%); +} + +.offcanvas.show { + transform: none; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.link-primary { + color: #0d6efd; +} +.link-primary:hover, .link-primary:focus { + color: #0a58ca; +} + +.link-secondary { + color: #6c757d; +} +.link-secondary:hover, .link-secondary:focus { + color: #565e64; +} + +.link-success { + color: #198754; +} +.link-success:hover, .link-success:focus { + color: #146c43; +} + +.link-info { + color: #0dcaf0; +} +.link-info:hover, .link-info:focus { + color: #3dd5f3; +} + +.link-warning { + color: #ffc107; +} +.link-warning:hover, .link-warning:focus { + color: #ffcd39; +} + +.link-danger { + color: #dc3545; +} +.link-danger:hover, .link-danger:focus { + color: #b02a37; +} + +.link-light { + color: #f8f9fa; +} +.link-light:hover, .link-light:focus { + color: #f9fafb; +} + +.link-dark { + color: #212529; +} +.link-dark:hover, .link-dark:focus { + color: #1a1e21; +} + +.ratio { + position: relative; + width: 100%; +} +.ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} +.ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.ratio-4x3 { + --bs-aspect-ratio: calc(3 / 4 * 100%); +} + +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); +} + +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.float-start { + float: left !important; +} + +.float-end { + float: right !important; +} + +.float-none { + float: none !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.overflow-visible { + overflow: visible !important; +} + +.overflow-scroll { + overflow: scroll !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.top-0 { + top: 0 !important; +} + +.top-50 { + top: 50% !important; +} + +.top-100 { + top: 100% !important; +} + +.bottom-0 { + bottom: 0 !important; +} + +.bottom-50 { + bottom: 50% !important; +} + +.bottom-100 { + bottom: 100% !important; +} + +.start-0 { + left: 0 !important; +} + +.start-50 { + left: 50% !important; +} + +.start-100 { + left: 100% !important; +} + +.end-0 { + right: 0 !important; +} + +.end-50 { + right: 50% !important; +} + +.end-100 { + right: 100% !important; +} + +.translate-middle { + transform: translate(-50%, -50%) !important; +} + +.translate-middle-x { + transform: translateX(-50%) !important; +} + +.translate-middle-y { + transform: translateY(-50%) !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-end { + border-right: 1px solid #dee2e6 !important; +} + +.border-end-0 { + border-right: 0 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-start { + border-left: 1px solid #dee2e6 !important; +} + +.border-start-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #0d6efd !important; +} + +.border-secondary { + border-color: #6c757d !important; +} + +.border-success { + border-color: #198754 !important; +} + +.border-info { + border-color: #0dcaf0 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #212529 !important; +} + +.border-white { + border-color: #fff !important; +} + +.border-1 { + border-width: 1px !important; +} + +.border-2 { + border-width: 2px !important; +} + +.border-3 { + border-width: 3px !important; +} + +.border-4 { + border-width: 4px !important; +} + +.border-5 { + border-width: 5px !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.vw-100 { + width: 100vw !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.vh-100 { + height: 100vh !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.gap-0 { + gap: 0 !important; +} + +.gap-1 { + gap: 0.25rem !important; +} + +.gap-2 { + gap: 0.5rem !important; +} + +.gap-3 { + gap: 1rem !important; +} + +.gap-4 { + gap: 1.5rem !important; +} + +.gap-5 { + gap: 3rem !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +.font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.fs-5 { + font-size: 1.25rem !important; +} + +.fs-6 { + font-size: 1rem !important; +} + +.fst-italic { + font-style: italic !important; +} + +.fst-normal { + font-style: normal !important; +} + +.fw-light { + font-weight: 300 !important; +} + +.fw-lighter { + font-weight: lighter !important; +} + +.fw-normal { + font-weight: 400 !important; +} + +.fw-bold { + font-weight: 700 !important; +} + +.fw-bolder { + font-weight: bolder !important; +} + +.lh-1 { + line-height: 1 !important; +} + +.lh-sm { + line-height: 1.25 !important; +} + +.lh-base { + line-height: 1.5 !important; +} + +.lh-lg { + line-height: 2 !important; +} + +.text-start { + text-align: left !important; +} + +.text-end { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-decoration-underline { + text-decoration: underline !important; +} + +.text-decoration-line-through { + text-decoration: line-through !important; +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +/* rtl:end:remove */ +.text-primary { + color: #0d6efd !important; +} + +.text-secondary { + color: #6c757d !important; +} + +.text-success { + color: #198754 !important; +} + +.text-info { + color: #0dcaf0 !important; +} + +.text-warning { + color: #ffc107 !important; +} + +.text-danger { + color: #dc3545 !important; +} + +.text-light { + color: #f8f9fa !important; +} + +.text-dark { + color: #212529 !important; +} + +.text-white { + color: #fff !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-reset { + color: inherit !important; +} + +.bg-primary { + background-color: #0d6efd !important; +} + +.bg-secondary { + background-color: #6c757d !important; +} + +.bg-success { + background-color: #198754 !important; +} + +.bg-info { + background-color: #0dcaf0 !important; +} + +.bg-warning { + background-color: #ffc107 !important; +} + +.bg-danger { + background-color: #dc3545 !important; +} + +.bg-light { + background-color: #f8f9fa !important; +} + +.bg-dark { + background-color: #212529 !important; +} + +.bg-body { + background-color: #fff !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.pe-none { + pointer-events: none !important; +} + +.pe-auto { + pointer-events: auto !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.rounded-1 { + border-radius: 0.2rem !important; +} + +.rounded-2 { + border-radius: 0.25rem !important; +} + +.rounded-3 { + border-radius: 0.3rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: 50rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-end { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-start { + border-bottom-left-radius: 0.25rem !important; + border-top-left-radius: 0.25rem !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + + .float-sm-end { + float: right !important; + } + + .float-sm-none { + float: none !important; + } + + .d-sm-inline { + display: inline !important; + } + + .d-sm-inline-block { + display: inline-block !important; + } + + .d-sm-block { + display: block !important; + } + + .d-sm-grid { + display: grid !important; + } + + .d-sm-table { + display: table !important; + } + + .d-sm-table-row { + display: table-row !important; + } + + .d-sm-table-cell { + display: table-cell !important; + } + + .d-sm-flex { + display: flex !important; + } + + .d-sm-inline-flex { + display: inline-flex !important; + } + + .d-sm-none { + display: none !important; + } + + .flex-sm-fill { + flex: 1 1 auto !important; + } + + .flex-sm-row { + flex-direction: row !important; + } + + .flex-sm-column { + flex-direction: column !important; + } + + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-sm-0 { + gap: 0 !important; + } + + .gap-sm-1 { + gap: 0.25rem !important; + } + + .gap-sm-2 { + gap: 0.5rem !important; + } + + .gap-sm-3 { + gap: 1rem !important; + } + + .gap-sm-4 { + gap: 1.5rem !important; + } + + .gap-sm-5 { + gap: 3rem !important; + } + + .justify-content-sm-start { + justify-content: flex-start !important; + } + + .justify-content-sm-end { + justify-content: flex-end !important; + } + + .justify-content-sm-center { + justify-content: center !important; + } + + .justify-content-sm-between { + justify-content: space-between !important; + } + + .justify-content-sm-around { + justify-content: space-around !important; + } + + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .align-items-sm-start { + align-items: flex-start !important; + } + + .align-items-sm-end { + align-items: flex-end !important; + } + + .align-items-sm-center { + align-items: center !important; + } + + .align-items-sm-baseline { + align-items: baseline !important; + } + + .align-items-sm-stretch { + align-items: stretch !important; + } + + .align-content-sm-start { + align-content: flex-start !important; + } + + .align-content-sm-end { + align-content: flex-end !important; + } + + .align-content-sm-center { + align-content: center !important; + } + + .align-content-sm-between { + align-content: space-between !important; + } + + .align-content-sm-around { + align-content: space-around !important; + } + + .align-content-sm-stretch { + align-content: stretch !important; + } + + .align-self-sm-auto { + align-self: auto !important; + } + + .align-self-sm-start { + align-self: flex-start !important; + } + + .align-self-sm-end { + align-self: flex-end !important; + } + + .align-self-sm-center { + align-self: center !important; + } + + .align-self-sm-baseline { + align-self: baseline !important; + } + + .align-self-sm-stretch { + align-self: stretch !important; + } + + .order-sm-first { + order: -1 !important; + } + + .order-sm-0 { + order: 0 !important; + } + + .order-sm-1 { + order: 1 !important; + } + + .order-sm-2 { + order: 2 !important; + } + + .order-sm-3 { + order: 3 !important; + } + + .order-sm-4 { + order: 4 !important; + } + + .order-sm-5 { + order: 5 !important; + } + + .order-sm-last { + order: 6 !important; + } + + .m-sm-0 { + margin: 0 !important; + } + + .m-sm-1 { + margin: 0.25rem !important; + } + + .m-sm-2 { + margin: 0.5rem !important; + } + + .m-sm-3 { + margin: 1rem !important; + } + + .m-sm-4 { + margin: 1.5rem !important; + } + + .m-sm-5 { + margin: 3rem !important; + } + + .m-sm-auto { + margin: auto !important; + } + + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-sm-0 { + margin-top: 0 !important; + } + + .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .mt-sm-3 { + margin-top: 1rem !important; + } + + .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .mt-sm-5 { + margin-top: 3rem !important; + } + + .mt-sm-auto { + margin-top: auto !important; + } + + .me-sm-0 { + margin-right: 0 !important; + } + + .me-sm-1 { + margin-right: 0.25rem !important; + } + + .me-sm-2 { + margin-right: 0.5rem !important; + } + + .me-sm-3 { + margin-right: 1rem !important; + } + + .me-sm-4 { + margin-right: 1.5rem !important; + } + + .me-sm-5 { + margin-right: 3rem !important; + } + + .me-sm-auto { + margin-right: auto !important; + } + + .mb-sm-0 { + margin-bottom: 0 !important; + } + + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .mb-sm-auto { + margin-bottom: auto !important; + } + + .ms-sm-0 { + margin-left: 0 !important; + } + + .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .ms-sm-3 { + margin-left: 1rem !important; + } + + .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .ms-sm-5 { + margin-left: 3rem !important; + } + + .ms-sm-auto { + margin-left: auto !important; + } + + .p-sm-0 { + padding: 0 !important; + } + + .p-sm-1 { + padding: 0.25rem !important; + } + + .p-sm-2 { + padding: 0.5rem !important; + } + + .p-sm-3 { + padding: 1rem !important; + } + + .p-sm-4 { + padding: 1.5rem !important; + } + + .p-sm-5 { + padding: 3rem !important; + } + + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-sm-0 { + padding-top: 0 !important; + } + + .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .pt-sm-3 { + padding-top: 1rem !important; + } + + .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .pt-sm-5 { + padding-top: 3rem !important; + } + + .pe-sm-0 { + padding-right: 0 !important; + } + + .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .pe-sm-3 { + padding-right: 1rem !important; + } + + .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .pe-sm-5 { + padding-right: 3rem !important; + } + + .pb-sm-0 { + padding-bottom: 0 !important; + } + + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .ps-sm-0 { + padding-left: 0 !important; + } + + .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .ps-sm-3 { + padding-left: 1rem !important; + } + + .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .ps-sm-5 { + padding-left: 3rem !important; + } + + .text-sm-start { + text-align: left !important; + } + + .text-sm-end { + text-align: right !important; + } + + .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .float-md-start { + float: left !important; + } + + .float-md-end { + float: right !important; + } + + .float-md-none { + float: none !important; + } + + .d-md-inline { + display: inline !important; + } + + .d-md-inline-block { + display: inline-block !important; + } + + .d-md-block { + display: block !important; + } + + .d-md-grid { + display: grid !important; + } + + .d-md-table { + display: table !important; + } + + .d-md-table-row { + display: table-row !important; + } + + .d-md-table-cell { + display: table-cell !important; + } + + .d-md-flex { + display: flex !important; + } + + .d-md-inline-flex { + display: inline-flex !important; + } + + .d-md-none { + display: none !important; + } + + .flex-md-fill { + flex: 1 1 auto !important; + } + + .flex-md-row { + flex-direction: row !important; + } + + .flex-md-column { + flex-direction: column !important; + } + + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-md-wrap { + flex-wrap: wrap !important; + } + + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-md-0 { + gap: 0 !important; + } + + .gap-md-1 { + gap: 0.25rem !important; + } + + .gap-md-2 { + gap: 0.5rem !important; + } + + .gap-md-3 { + gap: 1rem !important; + } + + .gap-md-4 { + gap: 1.5rem !important; + } + + .gap-md-5 { + gap: 3rem !important; + } + + .justify-content-md-start { + justify-content: flex-start !important; + } + + .justify-content-md-end { + justify-content: flex-end !important; + } + + .justify-content-md-center { + justify-content: center !important; + } + + .justify-content-md-between { + justify-content: space-between !important; + } + + .justify-content-md-around { + justify-content: space-around !important; + } + + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .align-items-md-start { + align-items: flex-start !important; + } + + .align-items-md-end { + align-items: flex-end !important; + } + + .align-items-md-center { + align-items: center !important; + } + + .align-items-md-baseline { + align-items: baseline !important; + } + + .align-items-md-stretch { + align-items: stretch !important; + } + + .align-content-md-start { + align-content: flex-start !important; + } + + .align-content-md-end { + align-content: flex-end !important; + } + + .align-content-md-center { + align-content: center !important; + } + + .align-content-md-between { + align-content: space-between !important; + } + + .align-content-md-around { + align-content: space-around !important; + } + + .align-content-md-stretch { + align-content: stretch !important; + } + + .align-self-md-auto { + align-self: auto !important; + } + + .align-self-md-start { + align-self: flex-start !important; + } + + .align-self-md-end { + align-self: flex-end !important; + } + + .align-self-md-center { + align-self: center !important; + } + + .align-self-md-baseline { + align-self: baseline !important; + } + + .align-self-md-stretch { + align-self: stretch !important; + } + + .order-md-first { + order: -1 !important; + } + + .order-md-0 { + order: 0 !important; + } + + .order-md-1 { + order: 1 !important; + } + + .order-md-2 { + order: 2 !important; + } + + .order-md-3 { + order: 3 !important; + } + + .order-md-4 { + order: 4 !important; + } + + .order-md-5 { + order: 5 !important; + } + + .order-md-last { + order: 6 !important; + } + + .m-md-0 { + margin: 0 !important; + } + + .m-md-1 { + margin: 0.25rem !important; + } + + .m-md-2 { + margin: 0.5rem !important; + } + + .m-md-3 { + margin: 1rem !important; + } + + .m-md-4 { + margin: 1.5rem !important; + } + + .m-md-5 { + margin: 3rem !important; + } + + .m-md-auto { + margin: auto !important; + } + + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-md-0 { + margin-top: 0 !important; + } + + .mt-md-1 { + margin-top: 0.25rem !important; + } + + .mt-md-2 { + margin-top: 0.5rem !important; + } + + .mt-md-3 { + margin-top: 1rem !important; + } + + .mt-md-4 { + margin-top: 1.5rem !important; + } + + .mt-md-5 { + margin-top: 3rem !important; + } + + .mt-md-auto { + margin-top: auto !important; + } + + .me-md-0 { + margin-right: 0 !important; + } + + .me-md-1 { + margin-right: 0.25rem !important; + } + + .me-md-2 { + margin-right: 0.5rem !important; + } + + .me-md-3 { + margin-right: 1rem !important; + } + + .me-md-4 { + margin-right: 1.5rem !important; + } + + .me-md-5 { + margin-right: 3rem !important; + } + + .me-md-auto { + margin-right: auto !important; + } + + .mb-md-0 { + margin-bottom: 0 !important; + } + + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .mb-md-3 { + margin-bottom: 1rem !important; + } + + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .mb-md-5 { + margin-bottom: 3rem !important; + } + + .mb-md-auto { + margin-bottom: auto !important; + } + + .ms-md-0 { + margin-left: 0 !important; + } + + .ms-md-1 { + margin-left: 0.25rem !important; + } + + .ms-md-2 { + margin-left: 0.5rem !important; + } + + .ms-md-3 { + margin-left: 1rem !important; + } + + .ms-md-4 { + margin-left: 1.5rem !important; + } + + .ms-md-5 { + margin-left: 3rem !important; + } + + .ms-md-auto { + margin-left: auto !important; + } + + .p-md-0 { + padding: 0 !important; + } + + .p-md-1 { + padding: 0.25rem !important; + } + + .p-md-2 { + padding: 0.5rem !important; + } + + .p-md-3 { + padding: 1rem !important; + } + + .p-md-4 { + padding: 1.5rem !important; + } + + .p-md-5 { + padding: 3rem !important; + } + + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0 { + padding-top: 0 !important; + } + + .pt-md-1 { + padding-top: 0.25rem !important; + } + + .pt-md-2 { + padding-top: 0.5rem !important; + } + + .pt-md-3 { + padding-top: 1rem !important; + } + + .pt-md-4 { + padding-top: 1.5rem !important; + } + + .pt-md-5 { + padding-top: 3rem !important; + } + + .pe-md-0 { + padding-right: 0 !important; + } + + .pe-md-1 { + padding-right: 0.25rem !important; + } + + .pe-md-2 { + padding-right: 0.5rem !important; + } + + .pe-md-3 { + padding-right: 1rem !important; + } + + .pe-md-4 { + padding-right: 1.5rem !important; + } + + .pe-md-5 { + padding-right: 3rem !important; + } + + .pb-md-0 { + padding-bottom: 0 !important; + } + + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .pb-md-3 { + padding-bottom: 1rem !important; + } + + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .pb-md-5 { + padding-bottom: 3rem !important; + } + + .ps-md-0 { + padding-left: 0 !important; + } + + .ps-md-1 { + padding-left: 0.25rem !important; + } + + .ps-md-2 { + padding-left: 0.5rem !important; + } + + .ps-md-3 { + padding-left: 1rem !important; + } + + .ps-md-4 { + padding-left: 1.5rem !important; + } + + .ps-md-5 { + padding-left: 3rem !important; + } + + .text-md-start { + text-align: left !important; + } + + .text-md-end { + text-align: right !important; + } + + .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .float-lg-start { + float: left !important; + } + + .float-lg-end { + float: right !important; + } + + .float-lg-none { + float: none !important; + } + + .d-lg-inline { + display: inline !important; + } + + .d-lg-inline-block { + display: inline-block !important; + } + + .d-lg-block { + display: block !important; + } + + .d-lg-grid { + display: grid !important; + } + + .d-lg-table { + display: table !important; + } + + .d-lg-table-row { + display: table-row !important; + } + + .d-lg-table-cell { + display: table-cell !important; + } + + .d-lg-flex { + display: flex !important; + } + + .d-lg-inline-flex { + display: inline-flex !important; + } + + .d-lg-none { + display: none !important; + } + + .flex-lg-fill { + flex: 1 1 auto !important; + } + + .flex-lg-row { + flex-direction: row !important; + } + + .flex-lg-column { + flex-direction: column !important; + } + + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-lg-0 { + gap: 0 !important; + } + + .gap-lg-1 { + gap: 0.25rem !important; + } + + .gap-lg-2 { + gap: 0.5rem !important; + } + + .gap-lg-3 { + gap: 1rem !important; + } + + .gap-lg-4 { + gap: 1.5rem !important; + } + + .gap-lg-5 { + gap: 3rem !important; + } + + .justify-content-lg-start { + justify-content: flex-start !important; + } + + .justify-content-lg-end { + justify-content: flex-end !important; + } + + .justify-content-lg-center { + justify-content: center !important; + } + + .justify-content-lg-between { + justify-content: space-between !important; + } + + .justify-content-lg-around { + justify-content: space-around !important; + } + + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .align-items-lg-start { + align-items: flex-start !important; + } + + .align-items-lg-end { + align-items: flex-end !important; + } + + .align-items-lg-center { + align-items: center !important; + } + + .align-items-lg-baseline { + align-items: baseline !important; + } + + .align-items-lg-stretch { + align-items: stretch !important; + } + + .align-content-lg-start { + align-content: flex-start !important; + } + + .align-content-lg-end { + align-content: flex-end !important; + } + + .align-content-lg-center { + align-content: center !important; + } + + .align-content-lg-between { + align-content: space-between !important; + } + + .align-content-lg-around { + align-content: space-around !important; + } + + .align-content-lg-stretch { + align-content: stretch !important; + } + + .align-self-lg-auto { + align-self: auto !important; + } + + .align-self-lg-start { + align-self: flex-start !important; + } + + .align-self-lg-end { + align-self: flex-end !important; + } + + .align-self-lg-center { + align-self: center !important; + } + + .align-self-lg-baseline { + align-self: baseline !important; + } + + .align-self-lg-stretch { + align-self: stretch !important; + } + + .order-lg-first { + order: -1 !important; + } + + .order-lg-0 { + order: 0 !important; + } + + .order-lg-1 { + order: 1 !important; + } + + .order-lg-2 { + order: 2 !important; + } + + .order-lg-3 { + order: 3 !important; + } + + .order-lg-4 { + order: 4 !important; + } + + .order-lg-5 { + order: 5 !important; + } + + .order-lg-last { + order: 6 !important; + } + + .m-lg-0 { + margin: 0 !important; + } + + .m-lg-1 { + margin: 0.25rem !important; + } + + .m-lg-2 { + margin: 0.5rem !important; + } + + .m-lg-3 { + margin: 1rem !important; + } + + .m-lg-4 { + margin: 1.5rem !important; + } + + .m-lg-5 { + margin: 3rem !important; + } + + .m-lg-auto { + margin: auto !important; + } + + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0 { + margin-top: 0 !important; + } + + .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .mt-lg-3 { + margin-top: 1rem !important; + } + + .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .mt-lg-5 { + margin-top: 3rem !important; + } + + .mt-lg-auto { + margin-top: auto !important; + } + + .me-lg-0 { + margin-right: 0 !important; + } + + .me-lg-1 { + margin-right: 0.25rem !important; + } + + .me-lg-2 { + margin-right: 0.5rem !important; + } + + .me-lg-3 { + margin-right: 1rem !important; + } + + .me-lg-4 { + margin-right: 1.5rem !important; + } + + .me-lg-5 { + margin-right: 3rem !important; + } + + .me-lg-auto { + margin-right: auto !important; + } + + .mb-lg-0 { + margin-bottom: 0 !important; + } + + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .mb-lg-auto { + margin-bottom: auto !important; + } + + .ms-lg-0 { + margin-left: 0 !important; + } + + .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .ms-lg-3 { + margin-left: 1rem !important; + } + + .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .ms-lg-5 { + margin-left: 3rem !important; + } + + .ms-lg-auto { + margin-left: auto !important; + } + + .p-lg-0 { + padding: 0 !important; + } + + .p-lg-1 { + padding: 0.25rem !important; + } + + .p-lg-2 { + padding: 0.5rem !important; + } + + .p-lg-3 { + padding: 1rem !important; + } + + .p-lg-4 { + padding: 1.5rem !important; + } + + .p-lg-5 { + padding: 3rem !important; + } + + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0 { + padding-top: 0 !important; + } + + .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .pt-lg-3 { + padding-top: 1rem !important; + } + + .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .pt-lg-5 { + padding-top: 3rem !important; + } + + .pe-lg-0 { + padding-right: 0 !important; + } + + .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .pe-lg-3 { + padding-right: 1rem !important; + } + + .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .pe-lg-5 { + padding-right: 3rem !important; + } + + .pb-lg-0 { + padding-bottom: 0 !important; + } + + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .ps-lg-0 { + padding-left: 0 !important; + } + + .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .ps-lg-3 { + padding-left: 1rem !important; + } + + .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .ps-lg-5 { + padding-left: 3rem !important; + } + + .text-lg-start { + text-align: left !important; + } + + .text-lg-end { + text-align: right !important; + } + + .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; + } + + .float-xl-end { + float: right !important; + } + + .float-xl-none { + float: none !important; + } + + .d-xl-inline { + display: inline !important; + } + + .d-xl-inline-block { + display: inline-block !important; + } + + .d-xl-block { + display: block !important; + } + + .d-xl-grid { + display: grid !important; + } + + .d-xl-table { + display: table !important; + } + + .d-xl-table-row { + display: table-row !important; + } + + .d-xl-table-cell { + display: table-cell !important; + } + + .d-xl-flex { + display: flex !important; + } + + .d-xl-inline-flex { + display: inline-flex !important; + } + + .d-xl-none { + display: none !important; + } + + .flex-xl-fill { + flex: 1 1 auto !important; + } + + .flex-xl-row { + flex-direction: row !important; + } + + .flex-xl-column { + flex-direction: column !important; + } + + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-xl-0 { + gap: 0 !important; + } + + .gap-xl-1 { + gap: 0.25rem !important; + } + + .gap-xl-2 { + gap: 0.5rem !important; + } + + .gap-xl-3 { + gap: 1rem !important; + } + + .gap-xl-4 { + gap: 1.5rem !important; + } + + .gap-xl-5 { + gap: 3rem !important; + } + + .justify-content-xl-start { + justify-content: flex-start !important; + } + + .justify-content-xl-end { + justify-content: flex-end !important; + } + + .justify-content-xl-center { + justify-content: center !important; + } + + .justify-content-xl-between { + justify-content: space-between !important; + } + + .justify-content-xl-around { + justify-content: space-around !important; + } + + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xl-start { + align-items: flex-start !important; + } + + .align-items-xl-end { + align-items: flex-end !important; + } + + .align-items-xl-center { + align-items: center !important; + } + + .align-items-xl-baseline { + align-items: baseline !important; + } + + .align-items-xl-stretch { + align-items: stretch !important; + } + + .align-content-xl-start { + align-content: flex-start !important; + } + + .align-content-xl-end { + align-content: flex-end !important; + } + + .align-content-xl-center { + align-content: center !important; + } + + .align-content-xl-between { + align-content: space-between !important; + } + + .align-content-xl-around { + align-content: space-around !important; + } + + .align-content-xl-stretch { + align-content: stretch !important; + } + + .align-self-xl-auto { + align-self: auto !important; + } + + .align-self-xl-start { + align-self: flex-start !important; + } + + .align-self-xl-end { + align-self: flex-end !important; + } + + .align-self-xl-center { + align-self: center !important; + } + + .align-self-xl-baseline { + align-self: baseline !important; + } + + .align-self-xl-stretch { + align-self: stretch !important; + } + + .order-xl-first { + order: -1 !important; + } + + .order-xl-0 { + order: 0 !important; + } + + .order-xl-1 { + order: 1 !important; + } + + .order-xl-2 { + order: 2 !important; + } + + .order-xl-3 { + order: 3 !important; + } + + .order-xl-4 { + order: 4 !important; + } + + .order-xl-5 { + order: 5 !important; + } + + .order-xl-last { + order: 6 !important; + } + + .m-xl-0 { + margin: 0 !important; + } + + .m-xl-1 { + margin: 0.25rem !important; + } + + .m-xl-2 { + margin: 0.5rem !important; + } + + .m-xl-3 { + margin: 1rem !important; + } + + .m-xl-4 { + margin: 1.5rem !important; + } + + .m-xl-5 { + margin: 3rem !important; + } + + .m-xl-auto { + margin: auto !important; + } + + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0 { + margin-top: 0 !important; + } + + .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .mt-xl-3 { + margin-top: 1rem !important; + } + + .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .mt-xl-5 { + margin-top: 3rem !important; + } + + .mt-xl-auto { + margin-top: auto !important; + } + + .me-xl-0 { + margin-right: 0 !important; + } + + .me-xl-1 { + margin-right: 0.25rem !important; + } + + .me-xl-2 { + margin-right: 0.5rem !important; + } + + .me-xl-3 { + margin-right: 1rem !important; + } + + .me-xl-4 { + margin-right: 1.5rem !important; + } + + .me-xl-5 { + margin-right: 3rem !important; + } + + .me-xl-auto { + margin-right: auto !important; + } + + .mb-xl-0 { + margin-bottom: 0 !important; + } + + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .mb-xl-auto { + margin-bottom: auto !important; + } + + .ms-xl-0 { + margin-left: 0 !important; + } + + .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .ms-xl-3 { + margin-left: 1rem !important; + } + + .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .ms-xl-5 { + margin-left: 3rem !important; + } + + .ms-xl-auto { + margin-left: auto !important; + } + + .p-xl-0 { + padding: 0 !important; + } + + .p-xl-1 { + padding: 0.25rem !important; + } + + .p-xl-2 { + padding: 0.5rem !important; + } + + .p-xl-3 { + padding: 1rem !important; + } + + .p-xl-4 { + padding: 1.5rem !important; + } + + .p-xl-5 { + padding: 3rem !important; + } + + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0 { + padding-top: 0 !important; + } + + .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .pt-xl-3 { + padding-top: 1rem !important; + } + + .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .pt-xl-5 { + padding-top: 3rem !important; + } + + .pe-xl-0 { + padding-right: 0 !important; + } + + .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .pe-xl-3 { + padding-right: 1rem !important; + } + + .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .pe-xl-5 { + padding-right: 3rem !important; + } + + .pb-xl-0 { + padding-bottom: 0 !important; + } + + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .ps-xl-0 { + padding-left: 0 !important; + } + + .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .ps-xl-3 { + padding-left: 1rem !important; + } + + .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .ps-xl-5 { + padding-left: 3rem !important; + } + + .text-xl-start { + text-align: left !important; + } + + .text-xl-end { + text-align: right !important; + } + + .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; + } + + .float-xxl-end { + float: right !important; + } + + .float-xxl-none { + float: none !important; + } + + .d-xxl-inline { + display: inline !important; + } + + .d-xxl-inline-block { + display: inline-block !important; + } + + .d-xxl-block { + display: block !important; + } + + .d-xxl-grid { + display: grid !important; + } + + .d-xxl-table { + display: table !important; + } + + .d-xxl-table-row { + display: table-row !important; + } + + .d-xxl-table-cell { + display: table-cell !important; + } + + .d-xxl-flex { + display: flex !important; + } + + .d-xxl-inline-flex { + display: inline-flex !important; + } + + .d-xxl-none { + display: none !important; + } + + .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .flex-xxl-row { + flex-direction: row !important; + } + + .flex-xxl-column { + flex-direction: column !important; + } + + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-xxl-0 { + gap: 0 !important; + } + + .gap-xxl-1 { + gap: 0.25rem !important; + } + + .gap-xxl-2 { + gap: 0.5rem !important; + } + + .gap-xxl-3 { + gap: 1rem !important; + } + + .gap-xxl-4 { + gap: 1.5rem !important; + } + + .gap-xxl-5 { + gap: 3rem !important; + } + + .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .justify-content-xxl-center { + justify-content: center !important; + } + + .justify-content-xxl-between { + justify-content: space-between !important; + } + + .justify-content-xxl-around { + justify-content: space-around !important; + } + + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xxl-start { + align-items: flex-start !important; + } + + .align-items-xxl-end { + align-items: flex-end !important; + } + + .align-items-xxl-center { + align-items: center !important; + } + + .align-items-xxl-baseline { + align-items: baseline !important; + } + + .align-items-xxl-stretch { + align-items: stretch !important; + } + + .align-content-xxl-start { + align-content: flex-start !important; + } + + .align-content-xxl-end { + align-content: flex-end !important; + } + + .align-content-xxl-center { + align-content: center !important; + } + + .align-content-xxl-between { + align-content: space-between !important; + } + + .align-content-xxl-around { + align-content: space-around !important; + } + + .align-content-xxl-stretch { + align-content: stretch !important; + } + + .align-self-xxl-auto { + align-self: auto !important; + } + + .align-self-xxl-start { + align-self: flex-start !important; + } + + .align-self-xxl-end { + align-self: flex-end !important; + } + + .align-self-xxl-center { + align-self: center !important; + } + + .align-self-xxl-baseline { + align-self: baseline !important; + } + + .align-self-xxl-stretch { + align-self: stretch !important; + } + + .order-xxl-first { + order: -1 !important; + } + + .order-xxl-0 { + order: 0 !important; + } + + .order-xxl-1 { + order: 1 !important; + } + + .order-xxl-2 { + order: 2 !important; + } + + .order-xxl-3 { + order: 3 !important; + } + + .order-xxl-4 { + order: 4 !important; + } + + .order-xxl-5 { + order: 5 !important; + } + + .order-xxl-last { + order: 6 !important; + } + + .m-xxl-0 { + margin: 0 !important; + } + + .m-xxl-1 { + margin: 0.25rem !important; + } + + .m-xxl-2 { + margin: 0.5rem !important; + } + + .m-xxl-3 { + margin: 1rem !important; + } + + .m-xxl-4 { + margin: 1.5rem !important; + } + + .m-xxl-5 { + margin: 3rem !important; + } + + .m-xxl-auto { + margin: auto !important; + } + + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0 { + margin-top: 0 !important; + } + + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .mt-xxl-3 { + margin-top: 1rem !important; + } + + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .mt-xxl-5 { + margin-top: 3rem !important; + } + + .mt-xxl-auto { + margin-top: auto !important; + } + + .me-xxl-0 { + margin-right: 0 !important; + } + + .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .me-xxl-3 { + margin-right: 1rem !important; + } + + .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .me-xxl-5 { + margin-right: 3rem !important; + } + + .me-xxl-auto { + margin-right: auto !important; + } + + .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .mb-xxl-auto { + margin-bottom: auto !important; + } + + .ms-xxl-0 { + margin-left: 0 !important; + } + + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .ms-xxl-3 { + margin-left: 1rem !important; + } + + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .ms-xxl-5 { + margin-left: 3rem !important; + } + + .ms-xxl-auto { + margin-left: auto !important; + } + + .p-xxl-0 { + padding: 0 !important; + } + + .p-xxl-1 { + padding: 0.25rem !important; + } + + .p-xxl-2 { + padding: 0.5rem !important; + } + + .p-xxl-3 { + padding: 1rem !important; + } + + .p-xxl-4 { + padding: 1.5rem !important; + } + + .p-xxl-5 { + padding: 3rem !important; + } + + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0 { + padding-top: 0 !important; + } + + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .pt-xxl-3 { + padding-top: 1rem !important; + } + + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .pt-xxl-5 { + padding-top: 3rem !important; + } + + .pe-xxl-0 { + padding-right: 0 !important; + } + + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .pe-xxl-3 { + padding-right: 1rem !important; + } + + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .pe-xxl-5 { + padding-right: 3rem !important; + } + + .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .ps-xxl-0 { + padding-left: 0 !important; + } + + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .ps-xxl-3 { + padding-left: 1rem !important; + } + + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .ps-xxl-5 { + padding-left: 3rem !important; + } + + .text-xxl-start { + text-align: left !important; + } + + .text-xxl-end { + text-align: right !important; + } + + .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; + } + + .fs-2 { + font-size: 2rem !important; + } + + .fs-3 { + font-size: 1.75rem !important; + } + + .fs-4 { + font-size: 1.5rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + + .d-print-inline-block { + display: inline-block !important; + } + + .d-print-block { + display: block !important; + } + + .d-print-grid { + display: grid !important; + } + + .d-print-table { + display: table !important; + } + + .d-print-table-row { + display: table-row !important; + } + + .d-print-table-cell { + display: table-cell !important; + } + + .d-print-flex { + display: flex !important; + } + + .d-print-inline-flex { + display: inline-flex !important; + } + + .d-print-none { + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/static/lib/bootstrap/css/bootstrap.css.map b/static/lib/bootstrap/css/bootstrap.css.map new file mode 100644 index 0000000..9a09efe --- /dev/null +++ b/static/lib/bootstrap/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACAhB;;;;;EAAA;ACAA;EAGI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAKF,qNAAA;EACA,yGAAA;EACA,yFAAA;AFkBF;;AGjBA;;;EAGE,sBAAA;AHoBF;;AGPI;EAJJ;IAKM,uBAAA;EHWJ;AACF;;AGCA;EACE,SAAA;EACA,sCCsX4B;EChIxB,eALI;EF/OR,gBCgY4B;ED/X5B,gBCqY4B;EDpY5B,cClCS;EDoCT,sBC7CS;ED8CT,8BAAA;EACA,6CAAA;AHCF;;AGQA;EACE,cAAA;EACA,cCqb4B;EDpb5B,8BAAA;EACA,SAAA;EACA,aCob4B;AJzb9B;;AGQA;EACE,WC+R4B;AJpS9B;;AGeA;EACE,aAAA;EACA,qBC0X4B;EDvX5B,gBC0X4B;EDzX5B,gBC0X4B;AJxY9B;;AGkBA;EE4MQ,iCAAA;AL1NR;AKwDI;EF1CJ;IEmNQ,iBAAA;EL7NN;AACF;;AGcA;EEuMQ,iCAAA;ALjNR;AK+CI;EFrCJ;IE8MQ,eAAA;ELpNN;AACF;;AGUA;EEkMQ,+BAAA;ALxMR;AKsCI;EFhCJ;IEyMQ,kBAAA;EL3MN;AACF;;AGMA;EE6LQ,iCAAA;AL/LR;AK6BI;EF3BJ;IEoMQ,iBAAA;ELlMN;AACF;;AGEA;EEoLM,kBALI;AL7KV;;AGGA;EE+KM,eALI;ALzKV;;AGUA;EACE,aAAA;EACA,mBCyK0B;AJhL5B;;AGkBA;;EAEE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;AHfF;;AGqBA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;AHlBF;;AGwBA;;EAEE,kBAAA;AHrBF;;AGwBA;;;EAGE,aAAA;EACA,mBAAA;AHrBF;;AGwBA;;;;EAIE,gBAAA;AHrBF;;AGwBA;EACE,gBC6P4B;AJlR9B;;AG0BA;EACE,qBAAA;EACA,cAAA;AHvBF;;AG6BA;EACE,gBAAA;AH1BF;;AGkCA;;EAEE,mBCsO4B;AJrQ9B;;AGuCA;EEgFM,kBALI;AL9GV;;AG0CA;EACE,cCkS4B;EDjS5B,yBCyS4B;AJhV9B;;AGgDA;;EAEE,kBAAA;EE4DI,iBALI;EFrDR,cAAA;EACA,wBAAA;AH7CF;;AGgDA;EAAM,eAAA;AH5CN;;AG6CA;EAAM,WAAA;AHzCN;;AG8CA;EACE,cChNQ;EDiNR,0BCyCwC;AJpF1C;AG6CE;EACE,cCwCsC;AJnF1C;;AGsDE;EAEE,cAAA;EACA,qBAAA;AHpDJ;;AG2DA;;;;EAIE,qCCmJ4B;ECjIxB,cALI;EFXR,+BAAA;EACA,2BAAA;AHxDF;;AG+DA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EEII,kBALI;AL1DV;AGgEE;EEDI,kBALI;EFQN,cAAA;EACA,kBAAA;AH9DJ;;AGkEA;EERM,kBALI;EFeR,cCtQQ;EDuQR,qBAAA;AH/DF;AGkEE;EACE,cAAA;AHhEJ;;AGoEA;EACE,sBAAA;EEpBI,kBALI;EF2BR,WCnTS;EDoTT,yBC3SS;EEEP,qBAAA;ANyOJ;AGmEE;EACE,UAAA;EE3BE,cALI;EFkCN,gBCgH0B;AJjL9B;;AG0EA;EACE,gBAAA;AHvEF;;AG6EA;;EAEE,sBAAA;AH1EF;;AGkFA;EACE,oBAAA;EACA,yBAAA;AH/EF;;AGkFA;EACE,mBC8K4B;ED7K5B,sBC6K4B;ED5K5B,cCtVS;EDuVT,gBAAA;AH/EF;;AGsFA;EAEE,mBAAA;EACA,gCAAA;AHpFF;;AGuFA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AHpFF;;AG4FA;EACE,qBAAA;AHzFF;;AG+FA;EAEE,gBAAA;AH7FF;;AGqGA;EACE,UAAA;AHlGF;;AGuGA;;;;;EAKE,SAAA;EACA,oBAAA;EE1HI,kBALI;EFiIR,oBAAA;AHpGF;;AGwGA;;EAEE,oBAAA;AHrGF;;AG0GA;EACE,eAAA;AHvGF;;AG0GA;EAGE,iBAAA;AHzGF;AG4GE;EACE,UAAA;AH1GJ;;AGiHA;EACE,aAAA;AH9GF;;AGsHA;;;;EAIE,0BAAA;AHnHF;AGsHI;;;;EACE,eAAA;AHjHN;;AGwHA;EACE,UAAA;EACA,kBAAA;AHrHF;;AG0HA;EACE,gBAAA;AHvHF;;AGiIA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;AH9HF;;AGsIA;EACE,WAAA;EACA,WAAA;EACA,UAAA;EACA,qBCG4B;EClNtB,iCAAA;EFkNN,oBAAA;AHpIF;AKhPI;EF6WJ;IEpMQ,iBAAA;EL2EN;AACF;AGiIE;EACE,WAAA;AH/HJ;;AGsIA;;;;;;;EAOE,UAAA;AHnIF;;AGsIA;EACE,YAAA;AHnIF;;AG4IA;EACE,oBAAA;EACA,6BAAA;AHzIF;;AGiJA;;;;;;;CAAA;AAWA;EACE,wBAAA;AHjJF;;AGsJA;EACE,UAAA;AHnJF;;AGyJA;EACE,aAAA;AHtJF;;AG4JA;EACE,aAAA;EACA,0BAAA;AHzJF;;AG8JA;EACE,qBAAA;AH3JF;;AGgKA;EACE,SAAA;AH7JF;;AGoKA;EACE,kBAAA;EACA,eAAA;AHjKF;;AGyKA;EACE,wBAAA;AHtKF;;AG8KA;EACE,wBAAA;AH3KF;;AOpaA;EFyQM,kBALI;EElQR,gBHyc4B;AJlC9B;;AOlaE;EFsQM,iCAAA;EEpQJ,gBH4bkB;EG3blB,gBH6a0B;AJR9B;AKpUI;EEpGF;IF6QM,eAAA;EL+JN;AACF;;AO7aE;EFsQM,iCAAA;EEpQJ,gBH4bkB;EG3blB,gBH6a0B;AJG9B;AK/UI;EEpGF;IF6QM,iBAAA;EL0KN;AACF;;AOxbE;EFsQM,iCAAA;EEpQJ,gBH4bkB;EG3blB,gBH6a0B;AJc9B;AK1VI;EEpGF;IF6QM,eAAA;ELqLN;AACF;;AOncE;EFsQM,iCAAA;EEpQJ,gBH4bkB;EG3blB,gBH6a0B;AJyB9B;AKrWI;EEpGF;IF6QM,iBAAA;ELgMN;AACF;;AO9cE;EFsQM,iCAAA;EEpQJ,gBH4bkB;EG3blB,gBH6a0B;AJoC9B;AKhXI;EEpGF;IF6QM,eAAA;EL2MN;AACF;;AOzdE;EFsQM,iCAAA;EEpQJ,gBH4bkB;EG3blB,gBH6a0B;AJ+C9B;AK3XI;EEpGF;IF6QM,iBAAA;ELsNN;AA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1B,0BhB4f0B;EgB3f1B,chB9DO;EkBbT,yBlBMS;EgBuEP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4BhBmR0B;EgBlR1B,gBAAA;ECtEE,qIDuEF;ApBwkEJ;AqB3oEM;EDuDJ;ICtDM,gBAAA;ErB8oEN;AACF;AoB1kEE;EACE,yBhB6vB8B;AJ+0ClC;AoBzkEE;EACE,yBAAA;EACA,0BAAA;EACA,2BhBye0B;EgBze1B,0BhBye0B;EgBxe1B,chBjFO;EkBbT,yBlBMS;EgB0FP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4BhBgQ0B;EgB/P1B,gBAAA;ECzFE,6ID0FF;EC1FE,qID0FF;ApB2kEJ;AqBjqEM;ED0EJ;ICzEM,wBAAA;IAAA,gBAAA;ErBoqEN;AACF;AoB7kEE;EACE,yBhB0uB8B;AJq2ClC;;AoBtkEA;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBhB2T4B;EgB1T5B,chB5GS;EgB6GT,6BAAA;EACA,yBAAA;EACA,mBAAA;ApBykEF;AoBvkEE;EAEE,gBAAA;EACA,eAAA;ApBwkEJ;;AoB7jEA;EACE,wChBkkBsC;EgBjkBtC,uBAAA;EfmJI,mBALI;EC7QN,qBAAA;ANisEJ;AoB9jEE;EACE,uBAAA;EACA,wBAAA;EACA,0BhB6b0B;EgB7b1B,yBhB6b0B;AJmoD9B;AoB7jEE;EACE,uBAAA;EACA,wBAAA;EACA,0BhBub0B;EgBvb1B,yBhBub0B;AJwoD9B;;AoB3jEA;EACE,sChBgjBsC;EgB/iBtC,oBAAA;EfgII,kBALI;EC7QN,qBAAA;ANktEJ;AoB5jEE;EACE,oBAAA;EACA,qBAAA;EACA,wBhB8a0B;EgB9a1B,uBhB8a0B;AJgpD9B;AoB3jEE;EACE,oBAAA;EACA,qBAAA;EACA,wBhBwa0B;EgBxa1B,uBhBwa0B;AJqpD9B;;AoBrjEE;EACE,yChBuhBoC;AJiiDxC;AoBrjEE;EACE,wChBohBoC;AJmiDxC;AoBpjEE;EACE,sChBihBoC;AJqiDxC;;AoBjjEA;EACE,eAAA;EACA,YAAA;EACA,iBhB8X4B;AJsrD9B;AoBljEE;EACE,eAAA;ApBojEJ;AoBjjEE;EACE,aAAA;Ed/LA,sBAAA;ANmvEJ;AoBhjEE;EACE,aAAA;EdpMA,sBAAA;ANuvEJ;;AuBrwEA;EACE,cAAA;EACA,WAAA;EACA,0CAAA;EAEA,uCAAA;ElB2RI,eALI;EkBnRR,gBnBoa4B;EmBna5B,gBnBya4B;EmBxa5B,cnBES;EmBDT,sBnBRS;EmBST,iPAAA;EACA,4BAAA;EACA,yCnBgxBkC;EmB/wBlC,0BnBgxBkC;EmB/wBlC,yBAAA;EjBFE,sBAAA;EeHE,wEEQJ;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AvBqwEF;AqB1wEM;EEfN;IFgBQ,gBAAA;ErB6wEN;AACF;AuBxwEE;EACE,qBnBwqBoC;EmBvqBpC,UAAA;EAKE,kDnBixB4B;AJq/ClC;AuBlwEE;EAEE,sBnBkiB0B;EmBjiB1B,sBAAA;AvBmwEJ;AuBhwEE;EAEE,yBnBpCO;AJqyEX;AuB5vEE;EACE,kBAAA;EACA,0BAAA;AvB8vEJ;;AuB1vEA;EACE,oBnB2hB4B;EmB1hB5B,uBnB0hB4B;EmBzhB5B,oBnB0hB4B;ECjTxB,mBALI;AL0hEV;;AuB1vEA;EACE,mBnBwhB4B;EmBvhB5B,sBnBuhB4B;EmBthB5B,kBnBuhB4B;ECrTxB,kBALI;ALiiEV;;AwB7zEA;EACE,cAAA;EACA,kBpBqtBwC;EoBptBxC,mBpBqtBwC;EoBptBxC,uBpBqtBwC;AJ2mD1C;AwB9zEE;EACE,WAAA;EACA,mBAAA;AxBg0EJ;;AwB5zEA;EACE,UpBysBwC;EoBxsBxC,WpBwsBwC;EoBvsBxC,kBAAA;EACA,mBAAA;EACA,sBpBbS;EoBcT,4BAAA;EACA,2BAAA;EACA,wBAAA;EACA,qCpB4sBwC;EoB3sBxC,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EACA,iCAAA;EAAA,mBAAA;AxB+zEF;AwB5zEE;ElBXE,qBAAA;AN00EJ;AwB3zEE;EAEE,kBpBmsBsC;AJynD1C;AwBzzEE;EACE,uBpB0rBsC;AJioD1C;AwBxzEE;EACE,qBpBwpBoC;EoBvpBpC,UAAA;EACA,kDpBqiB4B;AJqxDhC;AwBvzEE;EACE,yBpBZM;EoBaN,qBpBbM;AJs0EV;AwBvzEI;EAII,+OAAA;AxBszER;AwBlzEI;EAII,uJAAA;AxBizER;AwB5yEE;EACE,yBpBjCM;EoBkCN,qBpBlCM;EoBuCJ,yOAAA;AxB0yEN;AwBtyEE;EACE,oBAAA;EACA,YAAA;EACA,YpBkqBuC;AJsoD3C;AwBjyEI;EACE,YpB0pBqC;AJyoD3C;;AwBrxEA;EACE,mBpBqpBgC;AJmoDlC;AwBtxEE;EACE,UpBipB8B;EoBhpB9B,mBAAA;EACA,wKAAA;EACA,gCAAA;ElB9FA,kBAAA;EeHE,iDGmGF;AxBwxEJ;AqBv3EM;EGyFJ;IHxFM,gBAAA;ErB03EN;AACF;AwB3xEI;EACE,0JAAA;AxB6xEN;AwB1xEI;EACE,iCpBgpB4B;EoB3oB1B,uJAAA;AxBwxER;;AwBlxEA;EACE,qBAAA;EACA,kBpBmnBgC;AJkqDlC;;AwBlxEA;EACE,kBAAA;EACA,sBAAA;EACA,oBAAA;AxBqxEF;AwBjxEI;EACE,oBAAA;EACA,YAAA;EACA,apBuewB;AJ4yD9B;;AyBj6EA;EACE,WAAA;EACA,cAAA;EACA,UAAA;EACA,6BAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AzBo6EF;AyBl6EE;EACE,UAAA;AzBo6EJ;AyBh6EI;EAA0B,kErB4zBa;AJumD3C;AyBl6EI;EAA0B,kErB2zBa;AJ0mD3C;AyBl6EE;EACE,SAAA;AzBo6EJ;AyBj6EE;EACE,WrB6yBuC;EqB5yBvC,YrB4yBuC;EqB3yBvC,oBAAA;EHzBF,yBlBkCQ;EqBPN,SrB4yBuC;EExzBvC,mBAAA;EeHE,oHIkBF;EJlBE,4GIkBF;EACA,wBAAA;EAAA,gBAAA;AzBk6EJ;AqBj7EM;EIMJ;IJLM,wBAAA;IAAA,gBAAA;ErBo7EN;AACF;AyBr6EI;EHjCF,yBlB40ByC;AJ6nD3C;AyBn6EE;EACE,WrBsxB8B;EqBrxB9B,crBsxB8B;EqBrxB9B,kBAAA;EACA,erBqxB8B;EqBpxB9B,yBrBpCO;EqBqCP,yBAAA;EnB7BA,mBAAA;ANm8EJ;AyBj6EE;EACE,WrBkxBuC;EqBjxBvC,YrBixBuC;EkBp0BzC,yBlBkCQ;EqBmBN,SrBkxBuC;EExzBvC,mBAAA;EeHE,iHI4CF;EJ5CE,4GI4CF;EACA,qBAAA;EAAA,gBAAA;AzBk6EJ;AqB38EM;EIiCJ;IJhCM,qBAAA;IAAA,gBAAA;ErB88EN;AACF;AyBr6EI;EH3DF,yBlB40ByC;AJupD3C;AyBn6EE;EACE,WrB4vB8B;EqB3vB9B,crB4vB8B;EqB3vB9B,kBAAA;EACA,erB2vB8B;EqB1vB9B,yBrB9DO;EqB+DP,yBAAA;EnBvDA,mBAAA;AN69EJ;AyBj6EE;EACE,oBAAA;AzBm6EJ;AyBj6EI;EACE,yBrBtEK;AJy+EX;AyBh6EI;EACE,yBrB1EK;AJ4+EX;;A0Bz/EA;EACE,kBAAA;A1B4/EF;A0B1/EE;;EAEE,0BtBu1B8B;EsBt1B9B,iBtBu1B8B;AJqqDlC;A0Bz/EE;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,YAAA;EACA,qBAAA;EACA,oBAAA;EACA,6BAAA;EACA,qBAAA;ELDE,gEKEF;A1B2/EJ;AqBz/EM;EKXJ;ILYM,gBAAA;ErB4/EN;AACF;A0B5/EE;EACE,qBAAA;A1B8/EJ;A0B5/EI;EACE,kBAAA;A1B8/EN;A0B//EI;EACE,kBAAA;A1B8/EN;A0B3/EI;EAEE,qBtBi0B4B;EsBh0B5B,wBtBi0B4B;AJ2rDlC;A0B//EI;EAEE,qBtBi0B4B;EsBh0B5B,wBtBi0B4B;AJ2rDlC;A0Bz/EI;EACE,qBtB4zB4B;EsB3zB5B,wBtB4zB4B;AJ+rDlC;A0Bv/EE;EACE,qBtBszB8B;EsBrzB9B,wBtBszB8B;AJmsDlC;A0Bn/EI;EACE,atBgzB4B;EsB/yB5B,8DtBgzB4B;AJusDlC;A0Bz/EI;;;EACE,atBgzB4B;EsB/yB5B,8DtBgzB4B;AJusDlC;A0Bl/EI;EACE,atByyB4B;EsBxyB5B,8DtByyB4B;AJ2sDlC;;A2B1iFA;EACE,kBAAA;EACA,aAAA;EACA,eAAA;EACA,oBAAA;EACA,WAAA;A3B6iFF;A2B3iFE;;EAEE,kBAAA;EACA,cAAA;EACA,SAAA;EACA,YAAA;A3B6iFJ;A2BziFE;;EAEE,UAAA;A3B2iF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yzFX;A6BhzFE;EAEE,UAAA;EACA,kDzBsjB4B;AJ2vEhC;A6BnyFE;EAGE,oBAAA;EACA,azB4kB0B;AJutE9B;;A6BvxFE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJwwFf;A8B/zFE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9Bk1FjB;A8B9zFE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,iDAAA;A9B2zFN;A8BvzFE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9B01FlB;A8BjzFI;EAKI,iDAAA;A9B+yFR;A8B1yFE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJgyFf;;A6BrzFE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJsyFf;A8B71FE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9Bg3FjB;A8B51FE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,kDAAA;A9By1FN;A8Br1FE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9Bw3FlB;A8B/0FI;EAKI,kDAAA;A9B60FR;A8Bx0FE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJ8zFf;;A6Bn1FE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJo0Ff;A8B33FE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9B84FjB;A8B13FE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,iDAAA;A9Bu3FN;A8Bn3FE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9Bs5FlB;A8B72FI;EAKI,iDAAA;A9B22FR;A8Bt2FE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJ41Ff;;A6Bj3FE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJk2Ff;A8Bz5FE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9B46FjB;A8Bx5FE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,iDAAA;A9Bq5FN;A8Bj5FE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9Bo7FlB;A8B34FI;EAKI,iDAAA;A9By4FR;A8Bp4FE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJ03Ff;;A6B/4FE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJg4Ff;A8Bv7FE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9B08FjB;A8Bt7FE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,gDAAA;A9Bm7FN;A8B/6FE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9Bk9FlB;A8Bz6FI;EAKI,gDAAA;A9Bu6FR;A8Bl6FE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJw5Ff;;A6B76FE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJ85Ff;A8Br9FE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9Bw+FjB;A8Bp9FE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,gDAAA;A9Bi9FN;A8B78FE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9Bg/FlB;A8Bv8FI;EAKI,gDAAA;A9Bq8FR;A8Bh8FE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJs7Ff;;A6B38FE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJ47Ff;A8Bn/FE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9BsgGjB;A8Bl/FE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,kDAAA;A9B++FN;A8B3+FE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9B8gGlB;A8Br+FI;EAKI,kDAAA;A9Bm+FR;A8B99FE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJo9Ff;;A6Bz+FE;ECvCA,WAXQ;ERLR,yBlB4Ea;E0B1Db,qB1B0Da;AJ09Ff;A8BjhGE;EACE,WAdY;ERRd,yBQMmB;EAkBjB,qBAjBa;A9BoiGjB;A8BhhGE;EAEE,WArBY;ERRd,yBQMmB;EAyBjB,qBAxBa;EA6BX,+CAAA;A9B6gGN;A8BzgGE;EAKE,WAlCa;EAmCb,yBArCkB;EAwClB,qBAvCc;A9B4iGlB;A8BngGI;EAKI,+CAAA;A9BigGR;A8B5/FE;EAEE,WAjDe;EAkDf,yB1BYW;E0BTX,qB1BSW;AJk/Ff;;A6BjgGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJu/Ff;A8Bh/FE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJ4/Ff;A8B/+FE;EAEE,iDAAA;A9Bg/FJ;A8B7+FE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJogGf;A8Bz+FI;EAKI,iDAAA;A9Bu+FR;A8Bl+FE;EAEE,c1BvCW;E0BwCX,6BAAA;A9Bm+FJ;;A6B1hGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJghGf;A8BzgGE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJqhGf;A8BxgGE;EAEE,kDAAA;A9BygGJ;A8BtgGE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJ6hGf;A8BlgGI;EAKI,kDAAA;A9BggGR;A8B3/FE;EAEE,c1BvCW;E0BwCX,6BAAA;A9B4/FJ;;A6BnjGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJyiGf;A8BliGE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJ8iGf;A8BjiGE;EAEE,gDAAA;A9BkiGJ;A8B/hGE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJsjGf;A8B3hGI;EAKI,gDAAA;A9ByhGR;A8BphGE;EAEE,c1BvCW;E0BwCX,6BAAA;A9BqhGJ;;A6B5kGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJkkGf;A8B3jGE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJukGf;A8B1jGE;EAEE,iDAAA;A9B2jGJ;A8BxjGE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJ+kGf;A8BpjGI;EAKI,iDAAA;A9BkjGR;A8B7iGE;EAEE,c1BvCW;E0BwCX,6BAAA;A9B8iGJ;;A6BrmGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJ2lGf;A8BplGE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJgmGf;A8BnlGE;EAEE,gDAAA;A9BolGJ;A8BjlGE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJwmGf;A8B7kGI;EAKI,gDAAA;A9B2kGR;A8BtkGE;EAEE,c1BvCW;E0BwCX,6BAAA;A9BukGJ;;A6B9nGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJonGf;A8B7mGE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJynGf;A8B5mGE;EAEE,gDAAA;A9B6mGJ;A8B1mGE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJioGf;A8BtmGI;EAKI,gDAAA;A9BomGR;A8B/lGE;EAEE,c1BvCW;E0BwCX,6BAAA;A9BgmGJ;;A6BvpGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJ6oGf;A8BtoGE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJkpGf;A8BroGE;EAEE,kDAAA;A9BsoGJ;A8BnoGE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJ0pGf;A8B/nGI;EAKI,kDAAA;A9B6nGR;A8BxnGE;EAEE,c1BvCW;E0BwCX,6BAAA;A9BynGJ;;A6BhrGE;ECmBA,c1BJa;E0BKb,qB1BLa;AJsqGf;A8B/pGE;EACE,WATY;EAUZ,yB1BTW;E0BUX,qB1BVW;AJ2qGf;A8B9pGE;EAEE,+CAAA;A9B+pGJ;A8B5pGE;EAKE,WArBa;EAsBb,yB1BxBW;E0ByBX,qB1BzBW;AJmrGf;A8BxpGI;EAKI,+CAAA;A9BspGR;A8BjpGE;EAEE,c1BvCW;E0BwCX,6BAAA;A9BkpGJ;;A6B7rGA;EACE,gBzBmW4B;EyBlW5B,czBzCQ;EyB0CR,0BzBgNwC;AJg/F1C;A6B9rGE;EACE,czB+MsC;AJi/F1C;A6BxrGE;EAEE,czB/EO;AJwwGX;;A6B9qGA;ECuBE,oBAAA;EzBsKI,kBALI;EC7QN,qBAAA;ANywGJ;;A6BhrGA;ECmBE,uBAAA;EzBsKI,mBALI;EC7QN,qBAAA;AN+wGJ;;A+BlyGA;EVgBM,gCUfJ;A/BqyGF;AqBlxGM;EUpBN;IVqBQ,gBAAA;ErBqxGN;AACF;A+BxyGE;EACE,UAAA;A/B0yGJ;;A+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B5JO;E4B6JP,qBAAA;EVjKF,yBlBkCQ;AJohHV;AgCj5GE;EAEE,c5B9JO;E4B+JP,oBAAA;EACA,6BAAA;AhCk5GJ;;AgC54GA;EACE,cAAA;AhC+4GF;;AgC34GA;EACE,cAAA;EACA,oB5Bk0BkC;E4Bj0BlC,gBAAA;E3B0GI,mBALI;E2BnGR,c5B/KS;E4BgLT,mBAAA;AhC84GF;;AgC14GA;EACE,cAAA;EACA,qBAAA;EACA,c5BpLS;AJikHX;;AgCz4GA;EACE,c5B/LS;E4BgMT,yB5B3LS;E4B4LT,iC5B2xBkC;AJinFpC;AgCz4GE;EACE,c5BrMO;AJglHX;AgCz4GI;EAEE,W5B5MK;EkBJT,2ClBmgCkC;AJwlFpC;AgCv4GI;EAEE,W5BlNK;EkBJT,yBlBkCQ;AJ6jHV;AgCr4GI;EAEE,c5BnNK;AJylHX;AgCl4GE;EACE,iC5BkwBgC;AJkoFpC;AgCj4GE;EACE,c5B9NO;AJimHX;AgCh4GE;EACE,c5BhOO;AJkmHX;;AkC9mHA;;EAEE,kBAAA;EACA,oBAAA;EACA,sBAAA;AlCinHF;AkC/mHE;;EACE,kBAAA;EACA,cAAA;AlCknHJ;AkC7mHE;;;;;;;;;;;;EAME,UAAA;AlCqnHJ;;AkChnHA;EACE,aAAA;EACA,eAAA;EACA,2BAAA;AlCmnHF;AkCjnHE;EACE,WAAA;AlCmnHJ;;AkC7mHE;;EAEE,iBAAA;AlCgnHJ;AkC5mHE;;E5BRE,0BAAA;EACA,6BAAA;ANwnHJ;AkCxmHE;;;E5BHE,yBAAA;EACA,4BAAA;ANgnHJ;;AkC3lHA;EACE,wBAAA;EACA,uBAAA;AlC8lHF;AkC5lHE;EAGE,cAAA;AlC4lHJ;AkCzlHE;EACE,eAAA;AlC2lHJ;;AkCvlHA;EACE,uBAAA;EACA,sBAAA;AlC0lHF;;AkCvlHA;EACE,sBAAA;EACA,qBAAA;AlC0lHF;;AkCtkHA;EACE,sBAAA;EACA,uBAAA;EACA,uBAAA;AlCykHF;AkCvkHE;;EAEE,WAAA;AlCykHJ;AkCtkHE;;EAEE,gBAAA;AlCwkHJ;AkCpkHE;;E5BvFE,6BAAA;EACA,4BAAA;AN+pHJ;AkCpkHE;;E5B1GE,yBAAA;EACA,0B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vxHM;IACE,aAAA;EpCyxHR;AACF;Aa55HI;EuBsGA;IAEI,iBAAA;IACA,2BAAA;EpCwzHN;EoCtzHM;IACE,mBAAA;EpCwzHR;EoCtzHQ;IACE,kBAAA;EpCwzHV;EoCrzHQ;IACE,qBhCkwBwB;IgCjwBxB,oBhCiwBwB;EJsjGlC;EoCnzHM;IACE,iBAAA;EpCqzHR;EoClzHM;IACE,wBAAA;IACA,gBAAA;EpCozHR;EoCjzHM;IACE,aAAA;EpCmzHR;AACF;Aat7HI;EuBsGA;IAEI,iBAAA;IACA,2BAAA;EpCk1HN;EoCh1HM;IACE,mBAAA;EpCk1HR;EoCh1HQ;IACE,kBAAA;EpCk1HV;EoC/0HQ;IACE,qBhCkwBwB;IgCjwBxB,oBhCiwBwB;EJglGlC;EoC70HM;IACE,iBAAA;EpC+0HR;EoC50HM;IACE,wBAAA;IACA,gBAAA;EpC80HR;EoC30HM;IACE,aAAA;EpC60HR;AACF;AoC12HI;EAEI,iBAAA;EACA,2BAAA;ApC22HR;AoCz2HQ;EACE,mBAAA;ApC22HV;AoCz2HU;EACE,kBAAA;ApC22HZ;AoCx2HU;EACE,qBhCkwBwB;EgCjwBxB,oBhCiwBwB;AJymGpC;AoCt2HQ;EACE,iBAAA;ApCw2HV;AoCr2HQ;EACE,wBAAA;EACA,gBAAA;ApCu2HV;AoCp2HQ;EACE,aAAA;ApCs2HV;;AoCv1HE;EACE,yBhC8vBgC;AJ4lGpC;AoCx1HI;EAEE,yBhC0vB8B;AJ+lGpC;AoCp1HI;EACE,0BhCkvB8B;AJomGpC;AoCp1HM;EAEE,yBhC+uB4B;AJsmGpC;AoCl1HM;EACE,yBhC6uB4B;AJumGpC;AoCh1HI;;EAEE,yBhCsuB8B;AJ4mGpC;AoC90HE;EACE,0BhC+tBgC;EgC9tBhC,gChCmuBgC;AJ6mGpC;AoC70HE;EACE,6PAAA;ApC+0HJ;AoC50HE;EACE,0BhCstBgC;AJwnGpC;AoC50HI;;;EAGE,yBhCmtB8B;AJ2nGpC;;AoCv0HE;EACE,WhC5PO;AJskIX;AoCx0HI;EAEE,WhChQK;AJykIX;AoCp0HI;EACE,gChCwrB8B;AJ8oGpC;AoCp0HM;EAEE,gChCqrB4B;AJgpGpC;AoCl0HM;EACE,gChCmrB4B;AJipGpC;AoCh0HI;;EAEE,WhCpRK;AJslIX;AoC9zHE;EACE,gChCqqBgC;EgCpqBhC,sChCyqBgC;AJupGpC;AoC7zHE;EACE,mQAAA;ApC+zHJ;AoC5zHE;EACE,gChC4pBgC;AJkqGpC;AoC7zHI;;;EAGE,WhCtSK;AJqmIX;;AqCzmIA;EACE,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,YAAA;EAEA,qBAAA;EACA,sBjCHS;EiCIT,2BAAA;EACA,sCAAA;E/BME,sBAAA;ANsmIJ;AqCzmIE;EACE,eAAA;EACA,cAAA;ArC2mIJ;AqCxmIE;EACE,mBAAA;EACA,sBAAA;ArC0mIJ;AqCxmII;EACE,mBAAA;E/BEF,2CAAA;EACA,4CAAA;ANymIJ;AqCxmII;EACE,sBAAA;E/BWF,+CAAA;EACA,8CAAA;ANgmIJ;AqCrmIE;;EAEE,aAAA;ArCumIJ;;AqCnmIA;EAGE,cAAA;EACA,kBAAA;ArComIF;;AqChmIA;EACE,qBjCwgCkC;AJ2lGpC;;AqChmIA;EACE,oBAAA;EACA,gBAAA;ArCmmIF;;AqChmIA;EACE,gBAAA;ArCmmIF;;AqC/lIE;EACE,qBAAA;ArCkmIJ;AqC/lIE;EACE,iBjCkLK;AJ+6HT;;AqCzlIA;EACE,oBAAA;EACA,gBAAA;EAEA,qCjCi/BkC;EiCh/BlC,6CAAA;ArC2lIF;AqCzlIE;E/BnEE,0DAAA;AN+pIJ;;AqCvlIA;EACE,oBAAA;EAEA,qCjCs+BkC;EiCr+BlC,0CAAA;ArCylIF;AqCvlIE;E/B9EE,0DAAA;ANwqIJ;;AqChlIA;EACE,qBAAA;EACA,sBAAA;EACA,oBAAA;EACA,gBAAA;ArCmlIF;;AqCzkIA;EACE,qBAAA;EACA,oBAAA;ArC4kIF;;AqCxkIA;EACE,kBAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,ajCoHO;EEtOL,kCAAA;AN8rIJ;;AqCxkIA;;;EAGE,WAAA;ArC2kIF;;AqCxkIA;;E/BnHI,2CAAA;EACA,4CAAA;ANgsIJ;;AqCzkIA;;E/B1GI,+CAAA;EACA,8CAAA;ANwrIJ;;AqClkIE;EACE,sBjCw6BgC;AJ6pGpC;AaxqII;EwB+FJ;IAQI,aAAA;IACA,mBAAA;ErCqkIF;EqClkIE;IAEE,YAAA;IACA,gBAAA;ErCmkIJ;EqCjkII;IACE,cAAA;IACA,cAAA;ErCmkIN;EqC9jIM;I/BnJJ,0BAAA;IACA,6BAAA;ENotIF;EqC/jIQ;;IAGE,0BAAA;ErCgkIV;EqC9jIQ;;IAGE,6BAAA;ErC+jIV;EqC3jIM;I/BpJJ,yBAAA;IACA,4BAAA;ENktIF;EqC5jIQ;;IAGE,yBAAA;ErC6jIV;EqC3jIQ;;IAGE,4BAAA;ErC4jIV;AACF;;AsCzwIA;EACE,kBAAA;EACA,aAAA;EACA,mBAAA;EACA,WAAA;EACA,qBAAA;EjC4RI,eALI;EiCrRR,clCMS;EkCLT,gBAAA;EACA,sBlCLS;EkCMT,SAAA;EhCKE,gBAAA;EgCHF,qBAAA;EjBAI,+JiBCJ;AtC4wIF;AqBzwIM;EiBhBN;IjBiBQ,gBAAA;ErB4wIN;AACF;AsC/wIE;EACE,clC8kCsC;EkC7kCtC,yBlC4kCsC;EkC3kCtC,+CAAA;AtCixIJ;AsC/wII;EACE,iSAAA;EACA,0BlCilCoC;AJgsG1C;AsC5wIE;EACE,cAAA;EACA,clCskCsC;EkCrkCtC,elCqkCsC;EkCpkCtC,iBAAA;EACA,WAAA;EACA,iSAAA;EACA,4BAAA;EACA,wBlCgkCsC;EiBvlCpC,sCiBwBF;AtC8wIJ;AqBlyIM;EiBWJ;IjBVM,gBAAA;ErBqyIN;AACF;AsChxIE;EACE,UAAA;AtCkxIJ;AsC/wIE;EACE,UAAA;EACA,qBlCmpBoC;EkClpBpC,UAAA;EACA,kDlCgiB4B;AJivHhC;;AsC7wIA;EACE,gBAAA;AtCgxIF;;AsC7wIA;EACE,sBlCpDS;EkCqDT,sCAAA;AtCgxIF;AsC9wIE;EhCnCE,+BAAA;EACA,gCAAA;ANozIJ;AsC/wII;EhCtCA,2CAAA;EACA,4CAAA;ANwzIJ;AsC9wIE;EACE,aAAA;AtCgxIJ;AsC5wIE;EhClCE,mCAAA;EACA,kCAAA;ANizIJ;AsC5wIM;EhCtCF,+CAAA;EACA,8CAAA;ANqzIJ;AsC3wII;EhC3CA,mCAAA;EACA,kCAAA;ANyzIJ;;AsCzwIA;EACE,qBAAA;AtC4wIF;;AsCnwIE;EACE,eAAA;AtCswIJ;AsCnwIE;EACE,eAAA;EACA,cAAA;EhCxFA,gBAAA;AN81IJ;AsCnwII;EAAgB,aAAA;AtCswIpB;AsCrwII;EAAe,gBAAA;AtCwwInB;AsCtwII;EhC9FA,gBAAA;ANu2IJ;;AuC13IA;EACE,aAAA;EACA,eAAA;EACA,YAAA;EACA,mBnC60CkC;EmC30ClC,gBAAA;AvC43IF;;AuCr3IE;EACE,oBnCk0CgC;AJsjGpC;AuCt3II;EACE,WAAA;EACA,qBnC8zC8B;EmC7zC9B,cnCLK;EmCML,uFAAA;AvCw3IN;AuCp3IE;EACE,cnCXO;AJi4IX;;AwC/4IA;EACE,aAAA;EhCGA,eAAA;EACA,gBAAA;ARg5IF;;AwCh5IA;EACE,kBAAA;EACA,cAAA;EACA,cpC8BQ;EoC7BR,qBAAA;EACA,sBpCFS;EoCGT,yBAAA;EnBKI,qImBJJ;AxCm5IF;AqB34IM;EmBfN;InBgBQ,gBAAA;ErB84IN;AACF;AwCt5IE;EACE,UAAA;EACA,cpCkRsC;EoChRtC,yBpCRO;EoCSP,qBpCRO;AJ+5IX;AwCp5IE;EACE,UAAA;EACA,cpC0QsC;EoCzQtC,yBpCfO;EoCgBP,UpCygCgC;EoCxgChC,kDpCwjB4B;AJ81HhC;;AwCj5IE;EACE,iBpC4/BgC;AJw5GpC;AwCj5IE;EACE,UAAA;EACA,WpC9BO;EkBJT,yBlBkCQ;EoCEN,qBpCFM;AJq5IV;AwCh5IE;EACE,cpC9BO;EoC+BP,oBAAA;EACA,sBpCtCO;EoCuCP,qBpCpCO;AJs7IX;;AyC77IE;EACE,yBAAA;AzCg8IJ;;AyCz7IQ;EnCqCJ,+BAAA;EACA,kCAAA;ANw5IJ;AyCx7IQ;EnCiBJ,gCAAA;EACA,mCAAA;AN06IJ;;AyC18IE;EACE,uBAAA;EpCgSE,kBALI;ALmrIV;AyCv8IQ;EnCqCJ,8BAAA;EACA,iCAAA;ANq6IJ;AyCr8IQ;EnCiBJ,+BAAA;EACA,kCAAA;ANu7IJ;;AyCv9IE;EACE,uBAAA;EpCgSE,mBALI;ALgsIV;AyCp9IQ;EnCqCJ,8BAAA;EACA,iCAAA;ANk7IJ;AyCl9IQ;EnCiBJ,+BAAA;EACA,kCAAA;ANo8IJ;;A0Cn+IA;EACE,qBAAA;EACA,sBAAA;ErC8RI,iBALI;EqCvRR,gBtCya4B;EsCxa5B,cAAA;EACA,WtCHS;EsCIT,kBAAA;EACA,mBAAA;EACA,wBAAA;EpCKE,sBAAA;ANk+IJ;A0Cl+IE;EACE,aAAA;A1Co+IJ;;A0C/9IA;EACE,kBAAA;EACA,SAAA;A1Ck+IF;;A2Cz/IA;EACE,kBAAA;EACA,kBAAA;EACA,mBvCuvC8B;EuCtvC9B,6BAAA;ErCWE,sBAAA;ANk/IJ;;A2Cx/IA;EAEE,cAAA;A3C0/IF;;A2Ct/IA;EACE,gBvC8Z4B;AJ2lI9B;;A2Cj/IA;EACE,mBvCwuC8B;AJ4wGhC;A2Cj/IE;EACE,kBAAA;EACA,MAAA;EACA,QAAA;EACA,UAAA;EACA,qBAAA;A3Cm/IJ;;A2Cp+IE;EClDA,cD8Cc;ErB5Cd,yBqB0CmB;EC1CnB,qBD2Ce;A3C++IjB;A4CxhJE;EACE,cAAA;A5C0hJJ;;A2C7+IE;EClDA,cD8Cc;ErB5Cd,yBqB0CmB;EC1CnB,qBD2Ce;A3Cw/IjB;A4CjiJE;EACE,cAAA;A5CmiJJ;;A2Ct/IE;EClDA,cD8Cc;ErB5Cd,yBqB0CmB;EC1CnB,qBD2Ce;A3CigJjB;A4C1iJE;EACE,cAAA;A5C4iJJ;;A2C//IE;EClDA,cDgDgB;ErB9ChB,yBqB0CmB;EC1CnB,qBD2Ce;A3C0gJjB;A4CnjJE;EACE,cAAA;A5CqjJJ;;A2CxgJE;EClDA,cDgDgB;ErB9ChB,yBqB0CmB;EC1CnB,qBD2Ce;A3CmhJjB;A4C5jJE;EACE,cAAA;A5C8jJJ;;A2CjhJE;EClDA,cD8Cc;ErB5Cd,yBqB0CmB;EC1CnB,qBD2Ce;A3C4hJjB;A4CrkJE;EACE,cAAA;A5CukJJ;;A2C1hJE;EClDA,cDgDgB;ErB9ChB,yBqB0CmB;EC1CnB,qBD2Ce;A3CqiJjB;A4C9kJE;EACE,cAAA;A5CglJJ;;A2CniJE;EClDA,cD8Cc;ErB5Cd,yBqB0CmB;EC1CnB,qBD2Ce;A3C8iJjB;A4CvlJE;EACE,cAAA;A5CylJJ;;A6C5lJE;EACE;IAAK,2BzCuwC2B;EJy1GlC;AACF;;A6ClmJE;EACE;IAAK,2BzCuwC2B;EJy1GlC;AACF;A6C5lJA;EACE,aAAA;EACA,YzCgwCkC;EyC/vClC,gBAAA;ExCwRI,kBALI;EwCjRR,yBzCLS;EESP,sBAAA;AN2lJJ;;A6C1lJA;EACE,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,gBAAA;EACA,WzCjBS;EyCkBT,kBAAA;EACA,mBAAA;EACA,yBzCUQ;EiBtBJ,2BwBaJ;A7C6lJF;AqBtmJM;EwBAN;IxBCQ,gBAAA;ErBymJN;AACF;;A6C/lJA;EvBYE,qMAAA;EuBVA,0BAAA;A7CkmJF;;A6C9lJE;EACE,0DAAA;EAAA,kDAAA;A7CimJJ;A6C9lJM;EAJJ;IAKM,uBAAA;IAAA,eAAA;E7CimJN;AACF;;A8CzoJA;EACE,aAAA;EACA,sBAAA;EAGA,eAAA;EACA,gBAAA;ExCSE,sBAAA;ANkoJJ;;A8CvoJA;EACE,qBAAA;EACA,sBAAA;A9C0oJF;A8CxoJE;EAEE,oCAAA;EACA,0BAAA;A9CyoJJ;;A8C/nJA;EACE,WAAA;EACA,c1ClBS;E0CmBT,mBAAA;A9CkoJF;A8C/nJE;EAEE,UAAA;EACA,c1CzBO;E0C0BP,qBAAA;EACA,yB1CjCO;AJiqJX;A8C7nJE;EACE,c1C7BO;E0C8BP,yB1CrCO;AJoqJX;;A8CtnJA;EACE,kBAAA;EACA,cAAA;EACA,oBAAA;EACA,c1C3CS;E0C4CT,qBAAA;EACA,sB1CtDS;E0CuDT,sCAAA;A9CynJF;A8CvnJE;ExCrCE,+BAAA;EACA,gCAAA;AN+pJJ;A8CvnJE;ExC3BE,mCAAA;EACA,kCAAA;ANqpJJ;A8CvnJE;EAEE,c1C7DO;E0C8DP,oBAAA;EACA,sB1CrEO;AJ6rJX;A8CpnJE;EACE,UAAA;EACA,W1C3EO;E0C4EP,yB1C9CM;E0C+CN,qB1C/CM;AJqqJV;A8CnnJE;EACE,mBAAA;A9CqnJJ;A8CnnJI;EACE,gBAAA;EACA,qB1C2QwB;AJ02I9B;;A8CvmJI;EACE,mBAAA;A9C0mJN;A8CvmJQ;ExCrCJ,kCAAA;EAZA,0BAAA;AN4pJJ;A8CtmJQ;ExCtDJ,gCAAA;EAYA,4BAAA;ANopJJ;A8CrmJQ;EACE,aAAA;A9CumJV;A8CpmJQ;EACE,qB1C0OoB;E0CzOpB,oBAAA;A9CsmJV;A8CpmJU;EACE,iBAAA;EACA,sB1CqOkB;AJi4I9B;;Aa1qJI;EiC4CA;IACE,mBAAA;E9CkoJJ;E8C/nJM;IxCrCJ,kCAAA;IAZA,0BAAA;ENorJF;E8C9nJM;IxCtDJ,gCAAA;IAYA,4BAAA;EN4qJF;E8C7nJM;IACE,aAAA;E9C+nJR;E8C5nJM;IACE,qB1C0OoB;I0CzOpB,oBAAA;E9C8nJR;E8C5nJQ;IACE,iBAAA;IACA,sB1CqOkB;EJy5I5B;AACF;AansJI;EiC4CA;IACE,mBAAA;E9C0pJJ;E8CvpJM;IxCrCJ,kCAAA;IAZA,0BAAA;EN4sJF;E8CtpJM;IxCtDJ,gCAAA;IAYA,4BAAA;ENosJF;E8CrpJM;IACE,aAAA;E9CupJR;E8CppJM;IACE,qB1C0OoB;I0CzOpB,oBAAA;E9CspJR;E8CppJQ;IACE,iBAAA;IACA,sB1CqOkB;EJi7I5B;AACF;Aa3tJI;EiC4CA;IACE,mBAAA;E9CkrJJ;E8C/qJM;IxCrCJ,kCAAA;IAZA,0BAAA;ENouJF;E8C9qJM;IxCtDJ,gCAAA;IAYA,4BAAA;EN4tJF;E8C7qJM;IACE,aAAA;E9C+qJR;E8C5qJM;IACE,qB1C0OoB;I0CzOpB,oBAAA;E9C8qJR;E8C5qJQ;IACE,iBAAA;IACA,sB1CqOkB;EJy8I5B;AACF;AanvJI;EiC4CA;IACE,mBAAA;E9C0sJJ;E8CvsJM;IxCrCJ,kCAAA;IAZA,0BAAA;EN4vJF;E8CtsJM;IxCtDJ,gCAAA;IAYA,4BAAA;ENovJF;E8CrsJM;IACE,aAAA;E9CusJR;E8CpsJM;IACE,qB1C0OoB;I0CzOpB,oBAAA;E9CssJR;E8CpsJQ;IACE,iBAAA;IACA,sB1CqOkB;EJi+I5B;AACF;Aa3wJI;EiC4CA;IACE,mBAAA;E9CkuJJ;E8C/tJM;IxCrCJ,kCAAA;IAZA,0BAAA;ENoxJF;E8C9tJM;IxCtDJ,gCAAA;IAYA,4BAAA;EN4wJF;E8C7tJM;IACE,aAAA;E9C+tJR;E8C5tJM;IACE,qB1C0OoB;I0CzOpB,oBAAA;E9C8tJR;E8C5tJQ;IACE,iBAAA;IACA,sB1CqOkB;EJy/I5B;AACF;A8CjtJA;ExC9HI,gBAAA;ANk1JJ;A8CjtJE;EACE,qBAAA;A9CmtJJ;A8CjtJI;EACE,sBAAA;A9CmtJN;;A+Cv2JE;EACE,cDiKyB;EChKzB,yBD+JsB;A9C2sJ1B;A+Cv2JM;EAEE,cD2JqB;EC1JrB,yBAAA;A/Cw2JR;A+Cr2JM;EACE,W3CRG;E2CSH,yBDqJqB;ECpJrB,qBDoJqB;A9CmtJ7B;;A+Cr3JE;EACE,cDiKyB;EChKzB,yBD+JsB;A9CytJ1B;A+Cr3JM;EAEE,cD2JqB;EC1JrB,yBAAA;A/Cs3JR;A+Cn3JM;EACE,W3CRG;E2CSH,yBDqJqB;ECpJrB,qBDoJqB;A9CiuJ7B;;A+Cn4JE;EACE,cDiKyB;EChKzB,yBD+JsB;A9CuuJ1B;A+Cn4JM;EAEE,cD2JqB;EC1JrB,yBAAA;A/Co4JR;A+Cj4JM;EACE,W3CRG;E2CSH,yBDqJqB;ECpJrB,qBDoJqB;A9C+uJ7B;;A+Cj5JE;EACE,cDmK2B;EClK3B,yBD+JsB;A9CqvJ1B;A+Cj5JM;EAEE,cD6JuB;EC5JvB,yBAAA;A/Ck5JR;A+C/4JM;EACE,W3CRG;E2CSH,yBDuJuB;ECtJvB,qBDsJuB;A9C2vJ/B;;A+C/5JE;EACE,cDmK2B;EClK3B,yBD+JsB;A9CmwJ1B;A+C/5JM;EAEE,cD6JuB;EC5JvB,yBAAA;A/Cg6JR;A+C75JM;EACE,W3CRG;E2CSH,yBDuJuB;ECtJvB,qBDsJuB;A9CywJ/B;;A+C76JE;EACE,cDiKyB;EChKzB,yBD+JsB;A9CixJ1B;A+C76JM;EAEE,cD2JqB;EC1JrB,yBAAA;A/C86JR;A+C36JM;EACE,W3CRG;E2CSH,yBDqJqB;ECpJrB,qBDoJqB;A9CyxJ7B;;A+C37JE;EACE,cDmK2B;EClK3B,yBD+JsB;A9C+xJ1B;A+C37JM;EAEE,cD6JuB;EC5JvB,yBAAA;A/C47JR;A+Cz7JM;EACE,W3CRG;E2CSH,yBDuJuB;ECtJvB,qBDsJuB;A9CqyJ/B;;A+Cz8JE;EACE,cDiKyB;EChKzB,yBD+JsB;A9C6yJ1B;A+Cz8JM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lEqhMV;;AkEvhMM;EAEI,mCAAA;AlEyhMV;;AkE3hMM;EAEI,sBAAA;AlE6hMV;;AkE/hMM;EAEI,uBAAA;AlEiiMV;;AkEniMM;EAEI,sBAAA;AlEqiMV;;AkEviMM;EAEI,yBAAA;AlEyiMV;;AkE3iMM;EAEI,2BAAA;AlE6iMV;;AkE/iMM;EAEI,4BAAA;AlEijMV;;AkEnjMM;EAEI,2BAAA;AlEqjMV;;AkEvjMM;EAEI,0BAAA;AlEyjMV;;AkE3jMM;EAEI,gCAAA;AlE6jMV;;AkE/jMM;EAEI,yBAAA;AlEikMV;;AkEnkMM;EAEI,wBAAA;AlEqkMV;;AkEvkMM;EAEI,yBAAA;AlEykMV;;AkE3kMM;EAEI,6BAAA;AlE6kMV;;AkE/kMM;EAEI,8BAAA;AlEilMV;;AkEnlMM;EAEI,wBAAA;AlEqlMV;;AkEvlMM;EAEI,+BAAA;AlEylMV;;AkE3lMM;EAEI,wBAAA;AlE6lMV;;AkE/lMM;EAEI,wDAAA;AlEimMV;;AkEnmMM;EAEI,8DAAA;AlEqmMV;;AkEvmMM;EAEI,uDAAA;AlEymMV;;AkE3mMM;EAEI,2BAAA;AlE6mMV;;AkE/mMM;EAEI,2BAAA;AlEinMV;;AkEnnMM;EAEI,6BAAA;AlEqnMV;;AkEvnMM;EAEI,6BAAA;AlEynMV;;AkE3nMM;EAEI,0BAAA;AlE6nMV;;AkE/nMM;EAEI,mCAAA;EAAA,2BAAA;AlEioMV;;AkEnoMM;EAEI,iBAAA;AlEqoMV;;AkEvoMM;EAEI,mBAAA;AlEyoMV;;AkE3oMM;EAEI,oBAAA;AlE6oMV;;AkE/oMM;EAEI,oBAAA;AlEipMV;;AkEnpMM;EAEI,sBAAA;AlEqpMV;;AkEvpMM;EAEI,uBAAA;AlEypMV;;AkE3pMM;EAEI,kBAAA;AlE6pMV;;AkE/pMM;EAEI,oBAAA;AlEiqMV;;AkEnqMM;EAEI,qBAAA;AlEqqMV;;AkEvqMM;EAEI,mBAAA;AlEyqMV;;AkE3qMM;EAEI,qBAAA;AlE6qMV;;AkE/qMM;EAEI,sBAAA;AlEirMV;;AkEnrMM;EAEI,2CAAA;AlEqrMV;;AkEvrMM;EAEI,sCAAA;AlEyrMV;;AkE3rMM;EAEI,sCAAA;AlE6rMV;;AkE/rMM;EAEI,oCAAA;AlEisMV;;AkEnsMM;EAEI,oBAAA;AlEqsMV;;AkEvsMM;EAEI,wCAAA;AlEysMV;;AkE3sMM;EAEI,wBAAA;AlE6sMV;;AkE/sMM;EAEI,0CAAA;AlEitMV;;AkEntMM;EAEI,0BAAA;AlEqtMV;;AkEvtMM;EAEI,2CAAA;AlEytMV;;AkE3tMM;EAEI,2BAAA;AlE6tMV;;AkE/tMM;EAEI,yCAAA;AlEiuMV;;AkEnuMM;EAEI,yBAAA;AlEquMV;;AkEvuMM;EAEI,gCAAA;AlEyuMV;;AkE3uMM;EAEI,gCAAA;AlE6uMV;;AkE/uMM;EAEI,gCAAA;AlEivMV;;AkEnvMM;EAEI,gCAAA;AlEqvMV;;AkEvvMM;EAEI,gCAAA;AlEyvMV;;AkE3vMM;EAEI,gCAAA;AlE6vMV;;AkE/vMM;EAEI,gCAAA;AlEiwMV;;AkEnwMM;EAEI,gCAAA;AlEqwMV;;AkEvwMM;EAEI,6BAAA;AlEywMV;;AkE3wMM;EAEI,4BAAA;AlE6wMV;;AkE/wMM;EAEI,4BAAA;AlEixMV;;AkEnxMM;EAEI,4BAAA;AlEqxMV;;AkEvxMM;EAEI,4BAAA;AlEyxMV;;AkE3xMM;EAEI,4BAAA;AlE6xMV;;AkE/xMM;EAEI,qBAAA;AlEiyMV;;AkEnyMM;EAEI,qBAAA;AlEqyMV;;AkEvyMM;EAEI,qBAAA;AlEyyMV;;AkE3yMM;EAEI,sBAAA;AlE6yMV;;AkE/yMM;EAEI,sBAAA;AlEizMV;;AkEnzMM;EAEI,0BAAA;AlEqzMV;;AkEvzMM;EAEI,uBAAA;AlEyzMV;;AkE3zMM;EAEI,2BAAA;AlE6zMV;;AkE/zMM;EAEI,sBAAA;AlEi0MV;;AkEn0MM;EAEI,sBAAA;AlEq0MV;;AkEv0MM;EAEI,sBAAA;AlEy0MV;;AkE30MM;EAEI,uBAAA;AlE60MV;;AkE/0MM;EAEI,uBAAA;AlEi1MV;;AkEn1MM;EAEI,2BAAA;AlEq1MV;;AkEv1MM;EAEI,wBAAA;AlEy1MV;;AkE31MM;EAEI,4BAAA;AlE61MV;;AkE/1MM;EAEI,yBAAA;AlEi2MV;;AkEn2MM;EAEI,8BAAA;AlEq2MV;;AkEv2MM;EAEI,iCAAA;AlEy2MV;;AkE32MM;EAEI,sCAAA;AlE62MV;;AkE/2MM;EAEI,yCAAA;AlEi3MV;;AkEn3MM;EAEI,uBAAA;AlEq3MV;;AkEv3MM;EAEI,uBAAA;AlEy3MV;;AkE33MM;EAEI,yBAAA;AlE63MV;;AkE/3MM;EAEI,yBAAA;AlEi4MV;;AkEn4MM;EAEI,0BAAA;AlEq4MV;;AkEv4MM;EAEI,4BAAA;AlEy4MV;;AkE34MM;EAEI,kCAAA;AlE64MV;;AkE/4MM;EAEI,iBAAA;AlEi5MV;;AkEn5MM;EAEI,uBAAA;AlEq5MV;;AkEv5MM;EAEI,sBAAA;AlEy5MV;;AkE35MM;EAEI,oBAAA;AlE65MV;;AkE/5MM;EAEI,sBAAA;AlEi6MV;;AkEn6MM;EAEI,oBAAA;AlEq6MV;;AkEv6MM;EAEI,sCAAA;AlEy6MV;;AkE36MM;EAEI,oCAAA;AlE66MV;;AkE/6MM;EAEI,kCAAA;AlEi7MV;;AkEn7MM;EAEI,yCAAA;AlEq7MV;;AkEv7MM;EAEI,wCAAA;AlEy7MV;;AkE37MM;EAEI,wCAAA;AlE67MV;;AkE/7MM;EAEI,kCAAA;AlEi8MV;;AkEn8MM;EAEI,gCAAA;AlEq8MV;;AkEv8MM;EAEI,8BAAA;AlEy8MV;;AkE38MM;EAEI,gCAAA;AlE68MV;;AkE/8MM;EAEI,+BAAA;AlEi9MV;;AkEn9MM;EAEI,oCAAA;AlEq9MV;;AkEv9MM;EAEI,kCAAA;AlEy9MV;;AkE39MM;EAEI,gCAAA;AlE69MV;;AkE/9MM;EAEI,uCAAA;AlEi+MV;;AkEn+MM;EAEI,sCAAA;AlEq+MV;;AkEv+MM;EAEI,iCAAA;AlEy+MV;;AkE3+MM;EAEI,2BAAA;AlE6+MV;;AkE/+MM;EAEI,iCAAA;AlEi/MV;;AkEn/MM;EAEI,+BAAA;AlEq/MV;;AkEv/MM;EAEI,6BAAA;AlEy/MV;;AkE3/MM;EAEI,+BAAA;AlE6/MV;;AkE//MM;EAEI,8BAAA;AlEigNV;;AkEngNM;EAEI,oBAAA;AlEqgNV;;AkEvgNM;EAEI,mBAAA;AlEygNV;;AkE3gNM;EAEI,mBAAA;AlE6gNV;;AkE/gNM;EAEI,mBAAA;AlEihNV;;AkEnhNM;EAEI,mBAAA;AlEqhN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I,4BAAA;AlE+1NV;;AkEj2NM;EAEI,2BAAA;AlEm2NV;;AkEr2NM;EAEI,iCAAA;AlEu2NV;;AkEz2NM;EAEI,gCAAA;AlE22NV;;AkE72NM;EAEI,8BAAA;AlE+2NV;;AkEj3NM;EAEI,gCAAA;AlEm3NV;;AkEr3NM;EAEI,8BAAA;AlEu3NV;;AkEz3NM;EAEI,4BAAA;AlE23NV;;AkE73NM;EAEI,kCAAA;AlE+3NV;;AkEj4NM;EAEI,iCAAA;AlEm4NV;;AkEr4NM;EAEI,+BAAA;AlEu4NV;;AkEz4NM;EAEI,iCAAA;AlE24NV;;AkE74NM;EAEI,+BAAA;AlE+4NV;;AkEj5NM;EAEI,0BAAA;AlEm5NV;;AkEr5NM;EAEI,gCAAA;AlEu5NV;;AkEz5NM;EAEI,+BAAA;AlE25NV;;AkE75NM;EAEI,6BAAA;AlE+5NV;;AkEj6NM;EAEI,+BAAA;AlEm6NV;;AkEr6NM;EAEI,6BAAA;AlEu6NV;;AkEz6NM;EAEI,gDAAA;AlE26NV;;AkE76NM;EAEI,4CAAA;AlE+6NV;;AkEj7NM;EAEI,4CAAA;AlEm7NV;;AkEr7NM;EAEI,0CAAA;AlEu7NV;;AkEz7NM;EAEI,4CAAA;AlE27NV;;AkE77NM;EAEI,6BAAA;AlE+7NV;;AkEj8NM;EAEI,0BAAA;AlEm8NV;;AkEr8NM;EAEI,6BAAA;AlEu8NV;;AkEz8NM;EAEI,6BAAA;AlE28NV;;AkE78NM;EAEI,2BAAA;AlE+8NV;;AkEj9NM;EAEI,+BAAA;AlEm9NV;;AkEr9NM;EAEI,2BAAA;AlEu9NV;;AkEz9NM;EAEI,2BAAA;AlE29NV;;AkE79NM;EAEI,8BAAA;AlE+9NV;;AkEj+NM;EAEI,yBAAA;AlEm+NV;;AkEr+NM;EAEI,4BAAA;AlEu+NV;;AkEz+NM;EAEI,2BAAA;AlE2+NV;;AkE7+NM;EAEI,yBAAA;AlE++NV;;AkEj/NM;EAEI,2BAAA;AlEm/NV;;AkEr/NM;EAEI,4BAAA;AlEu/NV;;AkEz/NM;EAEI,6BAAA;AlE2/NV;;AkE7/NM;EAEI,gCAAA;AlE+/NV;;AkEjgOM;EAEI,qCAAA;AlEmgOV;;AkErgOM;EAEI,wCAAA;AlEugOV;;AkEzgOM;EAEI,oCAAA;AlE2gOV;;AkE7gOM;EAEI,oCAAA;AlE+gOV;;AkEjhOM;EAEI,qCAAA;AlEmhOV;;AkErhOM;EAEI,8BAAA;AlEuhOV;;AkEzhOM;EAEI,8BAAA;AlE2hOV;;AkE/hOQ,qBAAA;AAEF;EAEI,gCAAA;EAAA,iCAAA;AlEiiOV;;AkErhOQ,mBAAA;AAdF;EAEI,yBAAA;AlEsiOV;;AkExiOM;EAEI,yBAAA;AlE0iOV;;AkE5iOM;EAEI,yBAAA;AlE8iOV;;AkEhjOM;EAEI,yBAAA;AlEkjOV;;AkEpjOM;EAEI,yBAAA;AlEsjOV;;AkExjOM;EAEI,yBAAA;AlE0jOV;;AkE5jOM;EAEI,yBAAA;AlE8jOV;;AkEhkOM;EAEI,yBAAA;AlEkkOV;;AkEpkOM;EAEI,sBAAA;AlEskOV;;AkExkOM;EAEI,yBAAA;AlE0kOV;;AkE5kOM;EAEI,yBAAA;AlE8kOV;;AkEhlOM;EAEI,oCAAA;AlEklOV;;AkEplOM;EAEI,0CAAA;AlEslOV;;AkExlOM;EAEI,yBAAA;AlE0lOV;;AkE5lOM;EAEI,oCAAA;AlE8lOV;;AkEhmOM;EAEI,oCAAA;AlEkmOV;;AkEpmOM;EAEI,oCAAA;AlEsmOV;;AkExmOM;EAEI,oCAAA;AlE0mOV;;AkE5mOM;EAEI,oCAAA;AlE8mOV;;AkEhnOM;EAEI,oCAAA;AlEknOV;;AkEpnOM;EAEI,oCAAA;AlEsnOV;;AkExnOM;EAEI,oCAAA;AlE0nOV;;AkE5nOM;EAEI,iCAAA;AlE8nOV;;AkEhoOM;EAEI,iCAAA;AlEkoOV;;AkEpoOM;EAEI,wCAAA;AlEsoOV;;AkExoOM;EAEI,+CAAA;AlE0oOV;;AkE5oOM;EAEI,mCAAA;EAAA,gCAAA;EAAA,2BAAA;AlE8oOV;;AkEhpOM;EAEI,oCAAA;EAAA,iCAAA;EAAA,4BAAA;AlEkpOV;;AkEppOM;EAEI,oCAAA;EAAA,iCAAA;EAAA,4BAAA;AlEspOV;;AkExpOM;EAEI,+BAAA;AlE0pOV;;AkE5pOM;EAEI,+BAAA;AlE8pOV;;AkEhqOM;EAEI,iCAAA;AlEkqOV;;AkEpqOM;EAEI,2BAAA;AlEsqOV;;AkExqOM;EAEI,gCAAA;AlE0qOV;;AkE5qOM;EAEI,iCAAA;AlE8qOV;;AkEhrOM;EAEI,gCAAA;AlEkrOV;;AkEprOM;EAEI,6BAAA;AlEsrOV;;AkExrOM;EAEI,+BAAA;AlE0rOV;;AkE5rOM;EAEI,0CAAA;EAAA,2CAAA;AlE+rOV;;AkEjsOM;EAEI,2CAAA;EAAA,8CAAA;AlEosOV;;AkEtsOM;EAEI,8CAAA;EAAA,6CAAA;AlEysOV;;AkE3sOM;EAEI,6CAAA;EAAA,0CAAA;AlE8sOV;;AkEhtOM;EAEI,8BAAA;AlEktOV;;AkEptOM;EAEI,6BAAA;AlEstOV;;Aa1sOI;EqDdE;IAEI,sBAAA;ElE2tOR;;EkE7tOI;IAEI,uBAAA;ElE+tOR;;EkEjuOI;IAEI,sBAAA;ElEmuOR;;EkEruOI;IAEI,0BAAA;ElEuuOR;;EkEzuOI;IAEI,gCAAA;ElE2uOR;;EkE7uOI;IAEI,yBAAA;ElE+uOR;;EkEjvOI;IAEI,wBAAA;ElEmvOR;;EkErvOI;IAEI,yBAAA;ElEuvOR;;EkEzvOI;IAEI,6BAAA;ElE2vOR;;EkE7vOI;IAEI,8BAAA;ElE+vOR;;EkEjwOI;IAEI,wBAAA;ElEmwOR;;EkErwOI;IAEI,+BAAA;ElEuwOR;;EkEzwOI;IAEI,wBAAA;ElE2wOR;;EkE7wOI;IAEI,yBAAA;ElE+wOR;;EkEjxOI;IAEI,8BAAA;ElEmxOR;;EkErxOI;IAEI,iCAAA;ElEuxOR;;EkEzxOI;IAEI,sCAAA;ElE2xOR;;EkE7xOI;IAEI,yCAAA;ElE+xOR;;EkEjyOI;IAEI,uBAAA;ElEmyOR;;EkEryOI;IAEI,uBAAA;ElEuyOR;;EkEzyOI;IAEI,yBAAA;ElE2yOR;;EkE7yOI;IAEI,yBAAA;ElE+yOR;;EkEjzOI;IAEI,0BAAA;ElEmzOR;;EkErzOI;IAEI,4BAAA;ElEuzOR;;EkEzzOI;IAEI,kCAAA;ElE2zOR;;EkE7zOI;IAEI,iBAAA;ElE+zOR;;EkEj0OI;IAEI,uBAAA;ElEm0OR;;EkEr0OI;IAEI,sBAAA;ElEu0OR;;EkEz0OI;IAEI,oBAAA;ElE20OR;;EkE70OI;IAEI,sBAAA;ElE+0OR;;EkEj1OI;IAEI,oBAAA;ElEm1OR;;EkEr1OI;IAEI,sCAAA;ElEu1OR;;EkEz1OI;IAEI,oCAAA;ElE21OR;;EkE71OI;IAEI,kCAAA;ElE+1OR;;EkEj2OI;IAEI,yCAAA;ElEm2OR;;EkEr2OI;IAEI,wCAAA;ElEu2OR;;EkEz2OI;IAEI,wCAAA;ElE22OR;;EkE72OI;IAEI,kCAAA;ElE+2OR;;EkEj3OI;IAEI,gCAAA;ElEm3OR;;EkEr3OI;IAEI,8BAAA;ElEu3OR;;EkEz3OI;IAEI,gCAAA;ElE23OR;;EkE73OI;IAEI,+BAAA;ElE+3OR;;EkEj4OI;IAEI,oCAAA;ElEm4OR;;EkEr4OI;IAEI,kCAAA;ElEu4OR;;EkEz4OI;IAEI,gCAAA;ElE24OR;;EkE74OI;IAEI,uCAAA;ElE+4OR;;EkEj5OI;IAEI,sCAAA;ElEm5OR;;EkEr5OI;IAEI,iCAAA;ElEu5OR;;EkEz5OI;IAEI,2BAAA;ElE25OR;;EkE75OI;IAEI,iCAAA;ElE+5OR;;EkEj6OI;IAEI,+BAAA;ElEm6OR;;EkEr6OI;IAEI,6BAAA;ElEu6OR;;EkEz6OI;IAEI,+BAAA;ElE26OR;;EkE76OI;IAEI,8BAAA;ElE+6OR;;EkEj7OI;IAEI,oBAAA;ElEm7OR;;EkEr7OI;IAEI,mBAAA;ElEu7OR;;EkEz7OI;IAEI,mBAAA;ElE27OR;;EkE77OI;IAEI,mBAAA;ElE+7OR;;EkEj8OI;IAEI,mBAAA;ElEm8OR;;EkEr8OI;IAEI,mBAAA;ElEu8OR;;EkEz8OI;IAEI,mBAAA;ElE28OR;;EkE78OI;IAEI,mBAAA;ElE+8OR;;EkEj9OI;IAEI,oBAAA;ElEm9OR;;EkEr9OI;IAEI,0BAAA;ElEu9OR;;EkEz9OI;IAEI,yBAAA;ElE29OR;;EkE79OI;IAEI,uBAAA;ElE+9OR;;EkEj+OI;IAEI,yBAAA;ElEm+OR;;EkEr+OI;IAEI,uBAAA;ElEu+OR;;EkEz+OI;IAEI,uBAAA;ElE2+OR;;EkE7+OI;IAEI,0BAAA;IAAA,yBAAA;ElEg/OR;;EkEl/OI;IAEI,gCAAA;IAAA,+BAAA;ElEq/OR;;EkEv/OI;IAEI,+BAAA;IAAA,8BAAA;ElE0/OR;;EkE5/OI;IAEI,6BAAA;IAAA,4BAAA;ElE+/OR;;EkEjgPI;IAEI,+BAAA;IAAA,8BAAA;ElEogPR;;EkEtgPI;IAEI,6BAAA;IAAA,4BAAA;ElEygPR;;EkE3gPI;IAEI,6BAAA;IAAA,4BAAA;ElE8gPR;;EkEhhPI;IAEI,wBAAA;IAAA,2BAAA;ElEmhPR;;EkErhPI;IAEI,8BAAA;IAAA,iCAAA;ElEwhPR;;EkE1hPI;IAEI,6BAAA;IAAA,gCAAA;ElE6hPR;;EkE/hPI;IAEI,2BAAA;IAAA,8BAAA;ElEkiPR;;EkEpiPI;IAEI,6BAAA;IAAA,gCAAA;ElEuiPR;;EkEziPI;IAEI,2BAAA;IAAA,8BAAA;ElE4iPR;;EkE9iPI;IAEI,2BAAA;IAAA,8BAAA;ElEijPR;;EkEnjPI;IAEI,wBAAA;ElEqjPR;;EkEvjPI;IAEI,8BAAA;ElEyjPR;;EkE3jPI;IAEI,6BAAA;ElE6jPR;;EkE/jPI;IAEI,2BAAA;ElEikPR;;EkEnkPI;IAEI,6BAAA;ElEqkPR;;EkEvkPI;IAEI,2BAAA;ElEykPR;;EkE3kPI;IAEI,2BAAA;ElE6kPR;;EkE/kPI;IAEI,0BAAA;ElEilPR;;EkEnlPI;IAEI,gCAAA;ElEqlPR;;EkEvlPI;IAEI,+BAAA;ElEylPR;;EkE3lPI;IAEI,6BAAA;ElE6lPR;;EkE/lPI;IAEI,+BAAA;ElEimPR;;EkEnmPI;IAEI,6BAAA;ElEqmPR;;EkEvmPI;IAEI,6BAAA;ElEymPR;;EkE3mPI;IAEI,2BAAA;ElE6mPR;;EkE/mPI;IAEI,iCAAA;ElEinPR;;EkEnnPI;IAEI,gCAAA;ElEqnPR;;EkEvnPI;IAEI,8BAAA;ElEynPR;;EkE3nPI;IAEI,gCAAA;ElE6nPR;;EkE/nPI;IAEI,8BAAA;ElEioPR;;EkEnoPI;IAEI,8BAAA;ElEqoPR;;EkEvoPI;IAEI,yBAAA;ElEyoPR;;EkE3oPI;IAEI,+BAAA;ElE6oPR;;EkE/oPI;IAEI,8BAAA;ElEipPR;;EkEnpPI;IAEI,4BAAA;ElEqpPR;;EkEvpPI;IAEI,8BAAA;ElEypPR;;EkE3pPI;IAEI,4BAAA;ElE6pPR;;EkE/pPI;IAEI,4BAAA;ElEiqPR;;EkEnqPI;IAEI,qBAAA;ElEqqPR;;EkEvqPI;IAEI,2BAAA;ElEyqPR;;EkE3qPI;IAEI,0BAAA;ElE6qPR;;EkE/qPI;IAEI,wBAAA;ElEirPR;;EkEnrPI;IAEI,0BAAA;ElEqrPR;;EkEvrPI;IAEI,wBAAA;ElEyrPR;;EkE3rPI;IAEI,2BAAA;IAAA,0BAAA;ElE8rPR;;EkEhsPI;IAEI,iCAAA;IAAA,gCAAA;ElEmsPR;;EkErsPI;IAEI,gCAAA;IAAA,+BAAA;ElEwsPR;;EkE1sPI;IAEI,8BAAA;IAAA,6BAAA;ElE6sPR;;EkE/sPI;IAEI,gCAAA;IAAA,+BAAA;ElEktPR;;EkEptPI;IAEI,8BAAA;IAAA,6BAAA;ElEutPR;;EkEztPI;IAEI,yBAAA;IAAA,4BAAA;ElE4tPR;;EkE9tPI;IAEI,+BAAA;IAAA,kCAAA;ElEiuPR;;EkEnuPI;IAEI,8BAAA;IAAA,iCAAA;ElEsuPR;;EkExuPI;IAEI,4BAAA;IAAA,+BAAA;ElE2uPR;;EkE7uPI;IAEI,8BAAA;IAAA,iCAAA;ElEgvPR;;EkElvPI;IAEI,4BAAA;IAAA,+BAAA;ElEqvPR;;EkEvvPI;IAEI,yBAAA;ElEyvPR;;EkE3vPI;IAEI,+BAAA;ElE6vPR;;EkE/vPI;IAEI,8BAAA;ElEiwPR;;EkEnwPI;IAEI,4BAAA;ElEqwPR;;EkEvwPI;IAEI,8BAAA;ElEywPR;;EkE3wPI;IAEI,4BAAA;ElE6wPR;;EkE/wPI;IAEI,2BAAA;ElEixPR;;EkEnxPI;IAEI,iCAAA;ElEqxPR;;EkEvxPI;IAEI,gCAAA;ElEyxPR;;EkE3xPI;IAEI,8BAAA;ElE6xPR;;EkE/xPI;IAEI,gCAAA;ElEiyPR;;EkEnyPI;IAEI,8BAAA;ElEqyPR;;EkEvyPI;IAEI,4BAAA;ElEyyPR;;EkE3yPI;IAEI,kCAAA;ElE6yPR;;EkE/yPI;IAEI,iCAAA;ElEizPR;;EkEnzPI;IAEI,+BAAA;ElEqzPR;;EkEvzPI;IAEI,iCAAA;ElEyzPR;;EkE3zPI;IAEI,+BAAA;ElE6zPR;;EkE/zPI;IAEI,0BAAA;ElEi0PR;;EkEn0PI;IAEI,gCAAA;ElEq0PR;;EkEv0PI;IAEI,+BAAA;ElEy0PR;;EkE30PI;IAEI,6BAAA;ElE60PR;;EkE/0PI;IAEI,+BAAA;ElEi1PR;;EkEn1PI;IAEI,6BAAA;ElEq1PR;;EkEv1PI;IAEI,2BAAA;ElEy1PR;;EkE31PI;IAEI,4BAAA;ElE61PR;;EkE/1PI;IAEI,6BAAA;ElEi2PR;AACF;Aat1PI;EqDdE;IAEI,sBAAA;ElEs2PR;;EkEx2PI;IAEI,uBAAA;ElE02PR;;EkE52PI;IAEI,sBAAA;ElE82PR;;EkEh3PI;IAEI,0BAAA;ElEk3PR;;EkEp3PI;IAEI,gCAAA;ElEs3PR;;EkEx3PI;IAEI,yBAAA;ElE03PR;;EkE53PI;IAEI,wBAAA;ElE83PR;;EkEh4PI;IAEI,yBAAA;ElEk4PR;;EkEp4PI;IAEI,6BAAA;ElEs4PR;;EkEx4PI;IAEI,8BAAA;ElE04PR;;EkE54PI;IAEI,wBAAA;ElE84PR;;EkEh5PI;IAEI,+BAAA;ElEk5PR;;EkEp5PI;IAEI,wBAAA;ElEs5PR;;EkEx5PI;IAEI,yBAAA;ElE05PR;;EkE55PI;IAEI,8BAAA;ElE85PR;;EkEh6PI;IAEI,iCAAA;ElEk6PR;;EkEp6PI;IAEI,sCAAA;ElEs6PR;;EkEx6PI;IAEI,yCAAA;ElE06PR;;EkE56PI;IAEI,uBAAA;ElE86PR;;EkEh7PI;IAEI,uBAAA;ElEk7PR;;EkEp7PI;IAEI,yBAAA;ElEs7PR;;EkEx7PI;IAEI,yBAAA;ElE07PR;;EkE57PI;IAEI,0BAAA;ElE87PR;;EkEh8PI;IAEI,4BAAA;ElEk8PR;;EkEp8PI;IAEI,kCAAA;ElEs8PR;;EkEx8PI;IAEI,iBAAA;ElE08PR;;EkE58PI;IAEI,uBAAA;ElE88PR;;EkEh9PI;IAEI,sBAAA;ElEk9PR;;EkEp9PI;IAEI,oBAAA;ElEs9PR;;EkEx9PI;IAEI,sBAAA;ElE09PR;;EkE59PI;IAEI,oBAAA;ElE89PR;;EkEh+PI;IAEI,sCAAA;ElEk+PR;;EkEp+PI;IAEI,oCAAA;ElEs+PR;;EkEx+PI;IAEI,kCAAA;ElE0+PR;;EkE5+PI;IAEI,yCAAA;ElE8+PR;;EkEh/PI;IAEI,wCA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;;EkEt+QI;IAEI,4BAAA;ElEw+QR;;EkE1+QI;IAEI,6BAAA;ElE4+QR;AACF;Aaj+QI;EqDdE;IAEI,sBAAA;ElEi/QR;;EkEn/QI;IAEI,uBAAA;ElEq/QR;;EkEv/QI;IAEI,sBAAA;ElEy/QR;;EkE3/QI;IAEI,0BAAA;ElE6/QR;;EkE//QI;IAEI,gCAAA;ElEigRR;;EkEngRI;IAEI,yBAAA;ElEqgRR;;EkEvgRI;IAEI,wBAAA;ElEygRR;;EkE3gRI;IAEI,yBAAA;ElE6gRR;;EkE/gRI;IAEI,6BAAA;ElEihRR;;EkEnhRI;IAEI,8BAAA;ElEqhRR;;EkEvhRI;IAEI,wBAAA;ElEyhRR;;EkE3hRI;IAEI,+BAAA;ElE6hRR;;EkE/hRI;IAEI,wBAAA;ElEiiRR;;EkEniRI;IAEI,yBAAA;ElEqiRR;;EkEviRI;IAEI,8BAAA;ElEyiRR;;EkE3iRI;IAEI,iCAAA;ElE6iRR;;EkE/iRI;IAEI,sCAAA;ElEijRR;;EkEnjRI;IAEI,yCAAA;ElEqjRR;;EkEvjRI;IAEI,uBAAA;ElEyjRR;;EkE3jRI;IAEI,uBAAA;ElE6jRR;;EkE/jRI;IAEI,yBAAA;ElEikRR;;EkEnkRI;IAEI,yBAAA;ElEqkRR;;EkEvkRI;IAEI,0BAAA;ElEykRR;;EkE3kRI;IAEI,4BAAA;ElE6kRR;;EkE/kRI;IAEI,kCAAA;ElEilRR;;EkEnlRI;IAEI,iBAAA;ElEqlRR;;EkEvlRI;IAEI,uBAAA;ElEylRR;;EkE3lRI;IAEI,sBAAA;ElE6lRR;;EkE/lRI;IAEI,oBAAA;ElEimRR;;EkEnmRI;IAEI,sBAAA;ElEqmRR;;EkEvmRI;IAEI,oBAAA;ElEymRR;;EkE3mRI;IAEI,sCAAA;ElE6mRR;;EkE/mRI;IAEI,oCAAA;ElEinRR;;EkEnnRI;IAEI,kCAAA;ElEqnRR;;EkEvnRI;IAEI,yCAAA;ElEynRR;;EkE3nRI;IAEI,wCAAA;ElE6nRR;;EkE/nRI;IAEI,wCAAA;ElEioRR;;EkEnoRI;IAEI,kCAAA;ElEqoRR;;EkEvoRI;IAEI,gCAAA;ElEyoRR;;EkE3oRI;IAEI,8BAAA;ElE6oRR;;EkE/oRI;IAEI,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BAAA;ElEooSR;;EkEtoSI;IAEI,0BAAA;ElEwoSR;;EkE1oSI;IAEI,gCAAA;ElE4oSR;;EkE9oSI;IAEI,yBAAA;ElEgpSR;;EkElpSI;IAEI,wBAAA;ElEopSR;;EkEtpSI;IAEI,yBAAA;ElEwpSR;;EkE1pSI;IAEI,6BAAA;ElE4pSR;;EkE9pSI;IAEI,8BAAA;ElEgqSR;;EkElqSI;IAEI,wBAAA;ElEoqSR;;EkEtqSI;IAEI,+BAAA;ElEwqSR;;EkE1qSI;IAEI,wBAAA;ElE4qSR;;EkE9qSI;IAEI,yBAAA;ElEgrSR;;EkElrSI;IAEI,8BAAA;ElEorSR;;EkEtrSI;IAEI,iCAAA;ElEwrSR;;EkE1rSI;IAEI,sCAAA;ElE4rSR;;EkE9rSI;IAEI,yCAAA;ElEgsSR;;EkElsSI;IAEI,uBAAA;ElEosSR;;EkEtsSI;IAEI,uBAAA;ElEwsSR;;EkE1sSI;IAEI,yBAAA;ElE4sSR;;EkE9sSI;IAEI,yBAAA;ElEgtSR;;EkEltSI;IAEI,0BAAA;ElEotSR;;EkEttSI;IAEI,4BAAA;ElEwtSR;;EkE1tSI;IAEI,kCAAA;ElE4tSR;;EkE9tSI;IAEI,iBAAA;ElEguSR;;EkEluSI;IAEI,uBAAA;ElEouSR;;EkEtuSI;IAEI,sBAAA;ElEwuSR;;EkE1uSI;IAEI,oBAAA;ElE4uSR;;EkE9uSI;IAEI,sBAAA;ElEgvSR;;EkElvSI;IAEI,oBAAA;ElEovSR;;EkEtvSI;IAEI,sCAAA;ElEwvSR;;EkE1vSI;IAEI,oCAAA;ElE4vSR;;EkE9vSI;IAEI,kCAAA;ElEgwSR;;EkElwSI;IAEI,yCAAA;ElEowSR;;EkEtwSI;IAEI,wCAAA;ElEwwSR;;EkE1wSI;IAEI,wCAAA;ElE4wSR;;EkE9wSI;IAEI,kCAAA;ElEgxSR;;EkElxSI;IAEI,gCAAA;ElEoxSR;;EkEtxSI;IAEI,8BAAA;ElEwxSR;;EkE1xSI;IAEI,gCAAA;ElE4xSR;;EkE9xSI;IAEI,+BAAA;ElEgySR;;EkElySI;IAEI,oCAAA;ElEoySR;;EkEtySI;IAEI,kCAAA;ElEwySR;;EkE1ySI;IAEI,gCAAA;ElE4ySR;;EkE9ySI;IA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I,yBAAA;ElEmyTR;;EkEryTI;IAEI,6BAAA;ElEuyTR;;EkEzyTI;IAEI,8BAAA;ElE2yTR;;EkE7yTI;IAEI,wBAAA;ElE+yTR;;EkEjzTI;IAEI,+BAAA;ElEmzTR;;EkErzTI;IAEI,wBAAA;ElEuzTR;;EkEzzTI;IAEI,yBAAA;ElE2zTR;;EkE7zTI;IAEI,8BAAA;ElE+zTR;;EkEj0TI;IAEI,iCAAA;ElEm0TR;;EkEr0TI;IAEI,sCAAA;ElEu0TR;;EkEz0TI;IAEI,yCAAA;ElE20TR;;EkE70TI;IAEI,uBAAA;ElE+0TR;;EkEj1TI;IAEI,uBAAA;ElEm1TR;;EkEr1TI;IAEI,yBAAA;ElEu1TR;;EkEz1TI;IAEI,yBAAA;ElE21TR;;EkE71TI;IAEI,0BAAA;ElE+1TR;;EkEj2TI;IAEI,4BAAA;ElEm2TR;;EkEr2TI;IAEI,kCAAA;ElEu2TR;;EkEz2TI;IAEI,iBAAA;ElE22TR;;EkE72TI;IAEI,uBAAA;ElE+2TR;;EkEj3TI;IAEI,sBAAA;ElEm3TR;;EkEr3TI;IAEI,oBAAA;ElEu3TR;;EkEz3TI;IAEI,sBAAA;ElE23TR;;EkE73TI;IAEI,oBAAA;ElE+3TR;;EkEj4TI;IAEI,sCAAA;ElEm4TR;;EkEr4TI;IAEI,oCAAA;ElEu4TR;;EkEz4TI;IAEI,kCAAA;ElE24TR;;EkE74TI;IAEI,yCAAA;ElE+4TR;;EkEj5TI;IAEI,wCAAA;ElEm5TR;;EkEr5TI;IAEI,wCAAA;ElEu5TR;;EkEz5TI;IAEI,kCAAA;ElE25TR;;EkE75TI;IAEI,gCAAA;ElE+5TR;;EkEj6TI;IAEI,8BAAA;ElEm6TR;;EkEr6TI;IAEI,gCAAA;ElEu6TR;;EkEz6TI;IAEI,+BAAA;ElE26TR;;EkE76TI;IAEI,oCAAA;ElE+6TR;;EkEj7TI;IAEI,kCAAA;ElEm7TR;;EkEr7TI;IAEI,gCAAA;ElEu7TR;;EkEz7TI;IAEI,uCAAA;ElE27TR;;EkE77TI;IAEI,sCAAA;ElE+7TR;;EkEj8TI;IAEI,iCAAA;ElEm8TR;;EkEr8TI;IAEI,2BAAA;ElEu8TR;;EkEz8TI;IAEI,iCAAA;ElE28TR;;EkE78TI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","file":"bootstrap.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v5.0.2 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-font-sans-serif);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n background-color: currentColor;\n border: 0;\n opacity: 0.25;\n}\n\nhr:not([size]) {\n height: 1px;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: #0d6efd;\n text-decoration: underline;\n}\na:hover {\n color: #0a58ca;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n direction: ltr /* rtl:ignore */;\n unicode-bidi: bidi-override;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: #d63384;\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 0.875em;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n font-weight: 700;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n display: none;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n width: 100%;\n padding-right: var(--bs-gutter-x, 0.75rem);\n padding-left: var(--bs-gutter-x, 0.75rem);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(var(--bs-gutter-y) * -1);\n margin-right: calc(var(--bs-gutter-x) * -.5);\n margin-left: calc(var(--bs-gutter-x) * -.5);\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * .5);\n padding-left: calc(var(--bs-gutter-x) * .5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n}\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-left: 0;\n }\n\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xxl-3 {\n margin-left: 25%;\n }\n\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xxl-6 {\n margin-left: 50%;\n }\n\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xxl-9 {\n margin-left: 75%;\n }\n\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-bg: transparent;\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: #212529;\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: #212529;\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: #212529;\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n vertical-align: top;\n border-color: #dee2e6;\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n.table > :not(:last-child) > :last-child > * {\n border-bottom-color: currentColor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-bg: #cfe2ff;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #bacbe6;\n}\n\n.table-secondary {\n --bs-table-bg: #e2e3e5;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #cbccce;\n}\n\n.table-success {\n --bs-table-bg: #d1e7dd;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #bcd0c7;\n}\n\n.table-info {\n --bs-table-bg: #cff4fc;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #badce3;\n}\n\n.table-warning {\n --bs-table-bg: #fff3cd;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #e6dbb9;\n}\n\n.table-danger {\n --bs-table-bg: #f8d7da;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #dfc2c4;\n}\n\n.table-light {\n --bs-table-bg: #f8f9fa;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #dfe0e1;\n}\n\n.table-dark {\n --bs-table-bg: #212529;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: #fff;\n border-color: #373b3e;\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n appearance: none;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + (0.5rem + 2px));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + (1rem + 2px));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + (0.75rem + 2px));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + (0.5rem + 2px));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + (1rem + 2px));\n}\n\n.form-control-color {\n max-width: 3rem;\n height: auto;\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n height: 1.5em;\n border-radius: 0.25rem;\n}\n.form-control-color::-webkit-color-swatch {\n height: 1.5em;\n border-radius: 0.25rem;\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n appearance: none;\n color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n padding: 1rem 0.75rem;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n z-index: 3;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 3;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid,\n.was-validated .input-group .form-select:valid,\n.input-group .form-select.is-valid {\n z-index: 1;\n}\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus,\n.was-validated .input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid,\n.was-validated .input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n z-index: 2;\n}\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus,\n.was-validated .input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n z-index: 3;\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: #212529;\n}\n.btn-check:focus + .btn, .btn:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n pointer-events: none;\n opacity: 0.65;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #0b5ed7;\n border-color: #0a58ca;\n}\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n color: #fff;\n background-color: #0b5ed7;\n border-color: #0a58ca;\n box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0a58ca;\n border-color: #0a53be;\n}\n.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-primary:disabled, .btn-primary.disabled {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-secondary:hover {\n color: #fff;\n background-color: #5c636a;\n border-color: #565e64;\n}\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n color: #fff;\n background-color: #5c636a;\n border-color: #565e64;\n box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #565e64;\n border-color: #51585e;\n}\n.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-secondary:disabled, .btn-secondary.disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-success {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #157347;\n border-color: #146c43;\n}\n.btn-check:focus + .btn-success, .btn-success:focus {\n color: #fff;\n background-color: #157347;\n border-color: #146c43;\n box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #146c43;\n border-color: #13653f;\n}\n.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-success:disabled, .btn-success.disabled {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n\n.btn-info {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-info:hover {\n color: #000;\n background-color: #31d2f2;\n border-color: #25cff2;\n}\n.btn-check:focus + .btn-info, .btn-info:focus {\n color: #000;\n background-color: #31d2f2;\n border-color: #25cff2;\n box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle {\n color: #000;\n background-color: #3dd5f3;\n border-color: #25cff2;\n}\n.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-info:disabled, .btn-info.disabled {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n\n.btn-warning {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-warning:hover {\n color: #000;\n background-color: #ffca2c;\n border-color: #ffc720;\n}\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n color: #000;\n background-color: #ffca2c;\n border-color: #ffc720;\n box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle {\n color: #000;\n background-color: #ffcd39;\n border-color: #ffc720;\n}\n.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-warning:disabled, .btn-warning.disabled {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #bb2d3b;\n border-color: #b02a37;\n}\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n color: #fff;\n background-color: #bb2d3b;\n border-color: #b02a37;\n box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #b02a37;\n border-color: #a52834;\n}\n.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-danger:disabled, .btn-danger.disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-light {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-light:hover {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n}\n.btn-check:focus + .btn-light, .btn-light:focus {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n}\n.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-light:disabled, .btn-light.disabled {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-dark {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-dark:hover {\n color: #fff;\n background-color: #1c1f23;\n border-color: #1a1e21;\n}\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n color: #fff;\n background-color: #1c1f23;\n border-color: #1a1e21;\n box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1a1e21;\n border-color: #191c1f;\n}\n.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-dark:disabled, .btn-dark.disabled {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n\n.btn-outline-primary {\n color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n color: #0d6efd;\n background-color: transparent;\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-success {\n color: #198754;\n border-color: #198754;\n}\n.btn-outline-success:hover {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n color: #198754;\n background-color: transparent;\n}\n\n.btn-outline-info {\n color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-outline-info:hover {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n color: #0dcaf0;\n background-color: transparent;\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n.btn-outline-warning:hover {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-outline-light:hover {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-dark {\n color: #212529;\n border-color: #212529;\n}\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n color: #212529;\n background-color: transparent;\n}\n\n.btn-link {\n font-weight: 400;\n color: #0d6efd;\n text-decoration: underline;\n}\n.btn-link:hover {\n color: #0a58ca;\n}\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n z-index: 1000;\n display: none;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: #1e2125;\n background-color: #e9ecef;\n}\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #0d6efd;\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #adb5bd;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1rem;\n color: #212529;\n}\n\n.dropdown-menu-dark {\n color: #dee2e6;\n background-color: #343a40;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item {\n color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.15);\n}\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n color: #fff;\n background-color: #0d6efd;\n}\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n color: #adb5bd;\n}\n.dropdown-menu-dark .dropdown-divider {\n border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item-text {\n color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-header {\n color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n color: #0d6efd;\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: #0a58ca;\n}\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n.nav-tabs .nav-link {\n margin-bottom: -1px;\n background: none;\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n isolation: isolate;\n}\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: 0.25rem;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #0d6efd;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n transition: box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.55);\n border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.55);\n border-color: rgba(255, 255, 255, 0.1);\n}\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1rem 1rem;\n}\n\n.card-title {\n margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n margin-top: -0.25rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n.card-link + .card-link {\n margin-left: 1rem;\n}\n\n.card-header {\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.5rem 1rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.5rem;\n margin-bottom: -0.5rem;\n margin-left: -0.5rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.5rem;\n margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n margin-bottom: 0.75rem;\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: 1rem 1.25rem;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n background-color: #fff;\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: #0c63e4;\n background-color: #e7f1ff;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n transform: rotate(-180deg);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n margin-left: auto;\n content: \"\";\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-size: 1.25rem;\n transition: transform 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button {\n border-radius: 0;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0 0;\n margin-bottom: 1rem;\n list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: 0.5rem;\n color: #6c757d;\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n color: #0d6efd;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #dee2e6;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: #0a58ca;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n.page-link:focus {\n z-index: 3;\n color: #0a58ca;\n background-color: #e9ecef;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.page-link {\n padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n}\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n}\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.35em 0.65em;\n font-size: 0.75em;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n position: relative;\n padding: 1rem 1rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n color: #084298;\n background-color: #cfe2ff;\n border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n color: #0f5132;\n background-color: #d1e7dd;\n border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n color: #055160;\n background-color: #cff4fc;\n border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n color: #664d03;\n background-color: #fff3cd;\n border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n color: #842029;\n background-color: #f8d7da;\n border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n color: #636464;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n color: #141619;\n background-color: #d3d3d4;\n border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #0d6efd;\n transition: width 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > li::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.5rem 1rem;\n color: #212529;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.25rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n width: 350px;\n max-width: 100%;\n font-size: 0.875rem;\n pointer-events: auto;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n.toast:not(.showing):not(.show) {\n opacity: 0;\n}\n.toast.hide {\n display: none;\n}\n\n.toast-container {\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.5rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.toast-header .btn-close {\n margin-right: -0.375rem;\n margin-left: 0.75rem;\n}\n\n.toast-body {\n padding: 0.75rem;\n word-wrap: break-word;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - 1rem);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n.modal-header .btn-close {\n padding: 0.5rem 0.5rem;\n margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n flex-shrink: 0;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n\n .modal-dialog-scrollable {\n height: calc(100% - 3.5rem);\n }\n\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n\n .modal-sm {\n max-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n max-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1080;\n display: block;\n margin: 0;\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: 0.9;\n}\n.tooltip .tooltip-arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] {\n padding: 0.4rem 0;\n}\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] {\n padding: 0 0.4rem;\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] {\n padding: 0.4rem 0;\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] {\n padding: 0 0.4rem;\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0 /* rtl:ignore */;\n z-index: 1070;\n display: block;\n max-width: 276px;\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n.popover .popover-arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-0.5rem - 1px);\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-0.5rem - 1px);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f0f0f0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 1rem 1rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: -0.125em;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: -0.125em;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n animation-duration: 1.5s;\n }\n}\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: 1050;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n visibility: hidden;\n background-color: #fff;\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1rem;\n}\n.offcanvas-header .btn-close {\n padding: 0.5rem 0.5rem;\n margin-top: -0.5rem;\n margin-right: -0.5rem;\n margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: 1rem 1rem;\n overflow-y: auto;\n}\n\n.offcanvas-start {\n top: 0;\n left: 0;\n width: 400px;\n border-right: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateX(-100%);\n}\n\n.offcanvas-end {\n top: 0;\n right: 0;\n width: 400px;\n border-left: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateX(100%);\n}\n\n.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: 30vh;\n max-height: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n right: 0;\n left: 0;\n height: 30vh;\n max-height: 100%;\n border-top: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateY(100%);\n}\n\n.offcanvas.show {\n transform: none;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.link-primary {\n color: #0d6efd;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca;\n}\n\n.link-secondary {\n color: #6c757d;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64;\n}\n\n.link-success {\n color: #198754;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43;\n}\n\n.link-info {\n color: #0dcaf0;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3;\n}\n\n.link-warning {\n color: #ffc107;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39;\n}\n\n.link-danger {\n color: #dc3545;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37;\n}\n\n.link-light {\n color: #f8f9fa;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb;\n}\n\n.link-dark {\n color: #212529;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #0d6efd !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #198754 !important;\n}\n\n.border-info {\n border-color: #0dcaf0 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #212529 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n color: #0d6efd !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\n.text-success {\n color: #198754 !important;\n}\n\n.text-info {\n color: #0dcaf0 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\n.text-dark {\n color: #212529 !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.bg-primary {\n background-color: #0d6efd !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\n.bg-success {\n background-color: #198754 !important;\n}\n\n.bg-info {\n background-color: #0dcaf0 !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\n.bg-dark {\n background-color: #212529 !important;\n}\n\n.bg-body {\n background-color: #fff !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: 0.25rem !important;\n border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n\n .float-sm-end {\n float: right !important;\n }\n\n .float-sm-none {\n float: none !important;\n }\n\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-sm-0 {\n gap: 0 !important;\n }\n\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n\n .gap-sm-3 {\n gap: 1rem !important;\n }\n\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n\n .gap-sm-5 {\n gap: 3rem !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-right: 0 !important;\n }\n\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n\n .me-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-left: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n\n .text-sm-start {\n text-align: left !important;\n }\n\n .text-sm-end {\n text-align: right !important;\n }\n\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n\n .float-md-end {\n float: right !important;\n }\n\n .float-md-none {\n float: none !important;\n }\n\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-md-0 {\n gap: 0 !important;\n }\n\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n\n .gap-md-3 {\n gap: 1rem !important;\n }\n\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n\n .gap-md-5 {\n gap: 3rem !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-right: 0 !important;\n }\n\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-md-3 {\n margin-right: 1rem !important;\n }\n\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-right: 3rem !important;\n }\n\n .me-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-left: 0 !important;\n }\n\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n\n .ms-md-auto {\n margin-left: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-right: 0 !important;\n }\n\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-left: 0 !important;\n }\n\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n\n .text-md-start {\n text-align: left !important;\n }\n\n .text-md-end {\n text-align: right !important;\n }\n\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n\n .float-lg-end {\n float: right !important;\n }\n\n .float-lg-none {\n float: none !important;\n }\n\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-lg-0 {\n gap: 0 !important;\n }\n\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n\n .gap-lg-3 {\n gap: 1rem !important;\n }\n\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n\n .gap-lg-5 {\n gap: 3rem !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-right: 0 !important;\n }\n\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n\n .me-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-left: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n\n .text-lg-start {\n text-align: left !important;\n }\n\n .text-lg-end {\n text-align: right !important;\n }\n\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n\n .float-xl-end {\n float: right !important;\n }\n\n .float-xl-none {\n float: none !important;\n }\n\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-xl-0 {\n gap: 0 !important;\n }\n\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n\n .gap-xl-3 {\n gap: 1rem !important;\n }\n\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xl-5 {\n gap: 3rem !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-right: 0 !important;\n }\n\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-left: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n\n .text-xl-start {\n text-align: left !important;\n }\n\n .text-xl-end {\n text-align: right !important;\n }\n\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n\n .float-xxl-end {\n float: right !important;\n }\n\n .float-xxl-none {\n float: none !important;\n }\n\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-xxl-0 {\n gap: 0 !important;\n }\n\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-right: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n\n .text-xxl-start {\n text-align: left !important;\n }\n\n .text-xxl-end {\n text-align: right !important;\n }\n\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n\n .fs-2 {\n font-size: 2rem !important;\n }\n\n .fs-3 {\n font-size: 1.75rem !important;\n }\n\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */\n","/*!\n * Bootstrap v5.0.2 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n font-size: $font-size-root;\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: $body-text-align;\n background-color: $body-bg; // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`
` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`

c#4%pdwapWfXM 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 gPr%lYaKIeSVSp?s6Z`aGp8zL81 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