+
diff --git a/_includes/sidebar.html b/_includes/sidebar.html
index 3a2dc506..b325ba87 100644
--- a/_includes/sidebar.html
+++ b/_includes/sidebar.html
@@ -1,62 +1,92 @@
-
+
-
-
-
-
- {% include trending-tags.html %}
+ {% include_cached trending-tags.html lang=include.lang %}
-
-
-
+
+
+
diff --git a/_includes/toc-status.html b/_includes/toc-status.html
new file mode 100644
index 00000000..4b71caee
--- /dev/null
+++ b/_includes/toc-status.html
@@ -0,0 +1,10 @@
+{% comment %}
+ Determine TOC state and return it through variable "enable_toc"
+{% endcomment %}
+
+{% assign enable_toc = false %}
+{% if site.toc and page.toc %}
+ {% if page.content contains '-
+
- {{ site.data.locales[site.lang].tabs.[tab_name] | default: tab.title | upcase }}
-
-
- {% endfor %}
+
- + + +
- + + +
- + + +
+ {% unless site.theme_mode == 'light' or site.theme_mode == 'dark' %}
+ {%- capture icon_system -%}
+
+ {%- endcapture -%}
-
+ {%- capture icon_light -%}
+
+ {%- endcapture -%}
-
+
+ {%- capture icon_dark -%}
+
+ {%- endcapture -%}
- {% unless site.theme_mode %}
-
+
-
-
+
+
{% if site.data.contact.size > 0 %}
@@ -64,36 +94,54 @@
{% endunless %}
{% for entry in site.data.contact %}
- {% capture url %}
- {%- if entry.type == 'github' -%}
- https://github.com/{{ site.github.username }}
- {%- elsif entry.type == 'twitter' -%}
- https://twitter.com/{{ site.twitter.username }}
- {%- elsif entry.type == 'email' -%}
- {% assign email = site.social.email | split: '@' %}
- javascript:location.href = 'mailto:' + ['{{ email[0] }}','{{ email[1] }}'].join('@')
- {%- elsif entry.type == 'rss' -%}
- {{ "/feed.xml" | relative_url }}
- {%- else -%}
- {{ entry.url }}
- {%- endif -%}
- {% endcapture %}
+ {%- assign url = null -%}
+
+ {% case entry.type %}
+ {% when 'github', 'twitter' %}
+ {%- unless site[entry.type].username -%}
+ {%- continue -%}
+ {%- endunless -%}
+ {%- capture url -%}
+ https://{{ entry.type }}.com/{{ site[entry.type].username }}
+ {%- endcapture -%}
+ {% when 'email' %}
+ {%- unless site.social.email -%}
+ {%- continue -%}
+ {%- endunless -%}
+ {%- assign email = site.social.email | split: '@' -%}
+ {%- capture url -%}
+ javascript:void(location.href = 'mailto:' + ['{{ email[0] }}','{{ email[1] }}'].join('@'))
+ {%- endcapture -%}
+ {% when 'rss' %}
+ {% assign url = '/feed.xml' | relative_url %}
+ {% else %}
+ {% assign url = entry.url %}
+ {% endcase %}
{% if url %}
- {%- if entry.type == 'mastodon' -%}
-
-
-
- {%- else -%}
-
+
- {% endif %}
{% endif %}
-
{% endfor %}
-
- -
+
-
-
-
- {{- site.data.locales[site.lang].panel.toc -}}
-
-
+
+
+ {{- site.data.locales[include.lang].panel.toc -}}
+
+
{% endif %}
diff --git a/_includes/topbar.html b/_includes/topbar.html
index 51fbf1a9..735f1d1c 100644
--- a/_includes/topbar.html
+++ b/_includes/topbar.html
@@ -1,70 +1,77 @@
-
+
-
-
-
+
+
+
+
- {% elsif page.layout == 'category' or page.layout == 'tag' %}
-
-
- {{ site.data.locales[site.lang].tabs[item] | default: page.title }}
-
-
- {% endif %}
-
- {% endfor %}
-
- {% endif %}
-
-
-
-
+
{% if page.layout == 'home' %}
- {{- site.data.locales[site.lang].title | default: site.title -}}
+ {{- site.data.locales[include.lang].title | default: site.title -}}
{% elsif page.collection == 'tabs' or page.layout == 'page' %}
{%- capture tab_key -%}{{ page.url | split: '/' }}{%- endcapture -%}
- {{- site.data.locales[site.lang].tabs[tab_key] | default: page.title -}}
+ {{- site.data.locales[include.lang].tabs[tab_key] | default: page.title -}}
{% else %}
- {{- site.data.locales[site.lang].layout[page.layout] | default: page.layout | capitalize -}}
+ {{- site.data.locales[include.lang].layout[page.layout] | default: page.layout | capitalize -}}
{% endif %}
-
-
+
- {{ site.data.locales[site.lang].search.cancel }}
-
+
-
+
+
+
+
+
+
+
diff --git a/_includes/trending-tags.html b/_includes/trending-tags.html
index d0f58a1c..57369f0d 100644
--- a/_includes/trending-tags.html
+++ b/_includes/trending-tags.html
@@ -1,29 +1,27 @@
-{% comment %}
- The trending tags list
-{% endcomment %}
+
{% assign MAX = 10 %}
-{% assign size_list = "" | split: "" %}
-{% assign tag_list = "" | split: "" %}
+{% assign size_list = '' | split: '' %}
+{% assign tag_list = '' | split: '' %}
{% for tag in site.tags %}
{% assign size = tag | last | size %}
{% assign size_list = size_list | push: size %}
- {% assign tag_str = tag | first | append: "::" | append: size %}
- {% assign tag_list = tag_list | push: tag_str %}
+ {% assign tag_str = tag | first | append: '::' | append: size %}
+ {% assign tag_list = tag_list | push: tag_str %}
{% endfor %}
{% assign size_list = size_list | sort | reverse %}
{% assign tag_list = tag_list | sort_natural %}
-{% assign trending_tags = "" | split: "" %}
+{% assign trending_tags = '' | split: '' %}
{% for size in size_list limit: MAX %}
{% for tag_str in tag_list %}
- {% assign tag = tag_str | split: "::" %}
+ {% assign tag = tag_str | split: '::' %}
{% assign tag_name = tag | first %}
{% assign tag_size = tag | last | plus: 0 %}
{% if tag_size == size %}
@@ -36,15 +34,13 @@
{% endfor %}
{% if trending_tags.size > 0 %}
-
- {{- site.data.locales[site.lang].panel.trending_tags -}}
-
-
- {% for tag_name in trending_tags %}
- {% assign url = tag_name | slugify | url_encode | prepend: "/tags/" | append: "/" %}
- {{ tag_name }}
- {% endfor %}
-
+
+ {{- site.data.locales[include.lang].panel.trending_tags -}}
+
+ {% for tag_name in trending_tags %}
+ {% assign url = tag_name | slugify | url_encode | prepend: '/tags/' | append: '/' %}
+ {{ tag_name }}
+ {% endfor %}
-
+
{% endif %}
diff --git a/_includes/update-list.html b/_includes/update-list.html
index a4edd11e..93684c3e 100644
--- a/_includes/update-list.html
+++ b/_includes/update-list.html
@@ -1,40 +1,40 @@
-{% comment %}
- Get the last 5 posts from lastmod list.
-{% endcomment %}
+
{% assign MAX_SIZE = 5 %}
-{% assign all_list = "" | split: "" %}
+{% assign all_list = '' | split: '' %}
{% for post in site.posts %}
- {% if post.last_modified_at %}
- {% capture elem %}
- {{- post.last_modified_at | date: "%Y%m%d%H%M%S" -}}::{{- forloop.index0 -}}
- {% endcapture %}
- {% assign all_list = all_list | push: elem %}
- {% endif %}
+ {% assign datetime = post.last_modified_at | default: post.date %}
+
+ {% capture elem %}
+ {{- datetime | date: "%Y%m%d%H%M%S" -}}::{{- forloop.index0 -}}
+ {% endcapture %}
+
+ {% assign all_list = all_list | push: elem %}
{% endfor %}
{% assign all_list = all_list | sort | reverse %}
-{% assign update_list = "" | split: "" %}
+{% assign update_list = '' | split: '' %}
-{% for entry in all_list limit:MAX_SIZE %}
+{% for entry in all_list limit: MAX_SIZE %}
{% assign update_list = update_list | push: entry %}
{% endfor %}
{% if update_list.size > 0 %}
-
-
- {{- site.data.locales[site.lang].panel.lastmod -}}
-
+
+ {{- site.data.locales[include.lang].panel.lastmod -}}
+
{% for item in update_list %}
- {% assign index = item | split: "::" | last | plus: 0 %}
+ {% assign index = item | split: '::' | last | plus: 0 %}
{% assign post = site.posts[index] %}
{% assign url = post.url | relative_url %}
- - {{ post.title }}
+ -
+ {{ post.title }}
+
{% endfor %}
-
-
+
+
{% endif %}
diff --git a/_javascript/categories.js b/_javascript/categories.js
new file mode 100644
index 00000000..ce87d671
--- /dev/null
+++ b/_javascript/categories.js
@@ -0,0 +1,7 @@
+import { basic, initSidebar, initTopbar } from './modules/layouts';
+import { categoryCollapse } from './modules/components';
+
+basic();
+initSidebar();
+initTopbar();
+categoryCollapse();
diff --git a/_javascript/commons.js b/_javascript/commons.js
new file mode 100644
index 00000000..6a17fb93
--- /dev/null
+++ b/_javascript/commons.js
@@ -0,0 +1,5 @@
+import { basic, initSidebar, initTopbar } from './modules/layouts';
+
+initSidebar();
+initTopbar();
+basic();
diff --git a/_javascript/commons/back-to-top.js b/_javascript/commons/back-to-top.js
deleted file mode 100644
index e8761475..00000000
--- a/_javascript/commons/back-to-top.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Reference: https://bootsnipp.com/snippets/featured/link-to-top-page
- */
-$(function() {
- $(window).scroll(() => {
- if ($(this).scrollTop() > 50 &&
- $("#sidebar-trigger").css("display") === "none") {
- $("#back-to-top").fadeIn();
- } else {
- $("#back-to-top").fadeOut();
- }
- });
-
- $("#back-to-top").click(() => {
- $("body,html").animate({
- scrollTop: 0
- }, 800);
- return false;
- });
-});
diff --git a/_javascript/commons/mode-toggle.js b/_javascript/commons/mode-toggle.js
deleted file mode 100644
index 6581f083..00000000
--- a/_javascript/commons/mode-toggle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Listener for theme mode toggle
- */
-$(function () {
- $(".mode-toggle").click((e) => {
- const $target = $(e.target);
- let $btn = ($target.prop("tagName") === "button".toUpperCase() ?
- $target : $target.parent());
-
- $btn.blur(); // remove the clicking outline
- flipMode();
- });
-});
diff --git a/_javascript/commons/scroll-helper.js b/_javascript/commons/scroll-helper.js
deleted file mode 100644
index 419418c7..00000000
--- a/_javascript/commons/scroll-helper.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * A tool for smooth scrolling and topbar switcher
- */
-const ScrollHelper = (function () {
- const $body = $("body");
- const ATTR_TOPBAR_VISIBLE = "data-topbar-visible";
- const topbarHeight = $("#topbar-wrapper").outerHeight();
-
- let scrollUpCount = 0; // the number of times the scroll up was triggered by ToC or anchor
- let topbarLocked = false;
- let orientationLocked = false;
-
- return {
- hideTopbar: () => $body.attr(ATTR_TOPBAR_VISIBLE, false),
- showTopbar: () => $body.attr(ATTR_TOPBAR_VISIBLE, true),
-
- // scroll up
-
- addScrollUpTask: () => {
- scrollUpCount += 1;
- if (!topbarLocked) {
- topbarLocked = true;
- }
- },
- popScrollUpTask: () => scrollUpCount -= 1,
- hasScrollUpTask: () => scrollUpCount > 0,
- topbarLocked: () => topbarLocked === true,
- unlockTopbar: () => topbarLocked = false,
- getTopbarHeight: () => topbarHeight,
-
- // orientation change
-
- orientationLocked: () => orientationLocked === true,
- lockOrientation: () => orientationLocked = true,
- unLockOrientation: () => orientationLocked = false
- };
-
-}());
diff --git a/_javascript/commons/search-display.js b/_javascript/commons/search-display.js
deleted file mode 100644
index ddc73c14..00000000
--- a/_javascript/commons/search-display.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * This script make #search-result-wrapper switch to unloaded or shown automatically.
- */
-
-$(function () {
- const btnSbTrigger = $("#sidebar-trigger");
- const btnSearchTrigger = $("#search-trigger");
- const btnCancel = $("#search-cancel");
- const main = $("#main");
- const topbarTitle = $("#topbar-title");
- const searchWrapper = $("#search-wrapper");
- const resultWrapper = $("#search-result-wrapper");
- const results = $("#search-results");
- const input = $("#search-input");
- const hints = $("#search-hints");
-
- const scrollBlocker = (function () {
- let offset = 0;
- return {
- block() {
- offset = window.scrollY;
- $("html,body").scrollTop(0);
- },
- release() {
- $("html,body").scrollTop(offset);
- },
- getOffset() {
- return offset;
- }
- };
- }());
-
- /*--- Actions in mobile screens (Sidebar hidden) ---*/
-
- const mobileSearchBar = (function () {
- return {
- on() {
- btnSbTrigger.addClass("unloaded");
- topbarTitle.addClass("unloaded");
- btnSearchTrigger.addClass("unloaded");
- searchWrapper.addClass("d-flex");
- btnCancel.addClass("loaded");
- },
- off() {
- btnCancel.removeClass("loaded");
- searchWrapper.removeClass("d-flex");
- btnSbTrigger.removeClass("unloaded");
- topbarTitle.removeClass("unloaded");
- btnSearchTrigger.removeClass("unloaded");
- }
- };
- }());
-
- const resultSwitch = (function () {
- let visible = false;
-
- return {
- on() {
- if (!visible) {
- // the block method must be called before $(#main) unloaded.
- scrollBlocker.block();
- resultWrapper.removeClass("unloaded");
- main.addClass("unloaded");
- visible = true;
- }
- },
- off() {
- if (visible) {
- results.empty();
- if (hints.hasClass("unloaded")) {
- hints.removeClass("unloaded");
- }
- resultWrapper.addClass("unloaded");
- main.removeClass("unloaded");
-
- // now the release method must be called after $(#main) display
- scrollBlocker.release();
-
- input.val("");
- visible = false;
- }
- },
- isVisible() {
- return visible;
- }
- };
-
- }());
-
- function isMobileView() {
- return btnCancel.hasClass("loaded");
- }
-
- btnSearchTrigger.click(function () {
- mobileSearchBar.on();
- resultSwitch.on();
- input.focus();
- });
-
- btnCancel.click(function () {
- mobileSearchBar.off();
- resultSwitch.off();
- });
-
- input.focus(function () {
- searchWrapper.addClass("input-focus");
- });
-
- input.focusout(function () {
- searchWrapper.removeClass("input-focus");
- });
-
- input.on("input", () => {
- if (input.val() === "") {
- if (isMobileView()) {
- hints.removeClass("unloaded");
- } else {
- resultSwitch.off();
- }
-
- } else {
- resultSwitch.on();
- if (isMobileView()) {
- hints.addClass("unloaded");
- }
- }
- });
-
-});
diff --git a/_javascript/commons/sidebar.js b/_javascript/commons/sidebar.js
deleted file mode 100644
index 121353f9..00000000
--- a/_javascript/commons/sidebar.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Expand or close the sidebar in mobile screens.
- */
-
-$(function () {
- const sidebarUtil = (function () {
- const ATTR_DISPLAY = "sidebar-display";
- let isExpanded = false;
- const body = $("body");
-
- return {
- toggle() {
- if (isExpanded === false) {
- body.attr(ATTR_DISPLAY, "");
- } else {
- body.removeAttr(ATTR_DISPLAY);
- }
-
- isExpanded = !isExpanded;
- }
- };
-
- }());
-
- $("#sidebar-trigger").click(sidebarUtil.toggle);
-
- $("#mask").click(sidebarUtil.toggle);
-});
diff --git a/_javascript/commons/tooltip-loader.js b/_javascript/commons/tooltip-loader.js
deleted file mode 100644
index 0b2f0b15..00000000
--- a/_javascript/commons/tooltip-loader.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Initial Bootstrap Tooltip.
- */
-$(function () {
- $("[data-toggle=\"tooltip\"]").tooltip();
-});
diff --git a/_javascript/commons/topbar-switcher.js b/_javascript/commons/topbar-switcher.js
deleted file mode 100644
index 91c857ef..00000000
--- a/_javascript/commons/topbar-switcher.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Hide Header on scroll down
- */
-
-$(function () {
- const $searchInput = $("#search-input");
- const delta = ScrollHelper.getTopbarHeight();
-
- let didScroll;
- let lastScrollTop = 0;
-
- function hasScrolled() {
- let st = $(this).scrollTop();
-
- /* Make sure they scroll more than delta */
- if (Math.abs(lastScrollTop - st) <= delta) {
- return;
- }
-
- if (st > lastScrollTop) { // Scroll Down
- ScrollHelper.hideTopbar();
-
- if ($searchInput.is(":focus")) {
- $searchInput.blur(); /* remove focus */
- }
-
- } else { // Scroll up
- // has not yet scrolled to the bottom of the screen, that is, there is still space for scrolling
- if (st + $(window).height() < $(document).height()) {
-
- if (ScrollHelper.hasScrollUpTask()) {
- return;
- }
-
- if (ScrollHelper.topbarLocked()) { // avoid redundant scroll up event from smooth scrolling
- ScrollHelper.unlockTopbar();
- } else {
- if (ScrollHelper.orientationLocked()) { // avoid device auto scroll up on orientation change
- ScrollHelper.unLockOrientation();
- } else {
- ScrollHelper.showTopbar();
- }
- }
- }
- }
-
- lastScrollTop = st;
-
- } // hasScrolled()
-
- function handleLandscape() {
- if ($(window).scrollTop() === 0) {
- return;
- }
- ScrollHelper.lockOrientation();
- ScrollHelper.hideTopbar();
- }
-
- if (screen.orientation) {
- screen.orientation.onchange = () => {
- const type = screen.orientation.type;
- if (type === "landscape-primary" || type === "landscape-secondary") {
- handleLandscape();
- }
- };
-
- } else {
- // for the browsers that not support `window.screen.orientation` API
- $(window).on("orientationchange", () => {
- if ($(window).width() < $(window).height()) { // before rotating, it is still in portrait mode.
- handleLandscape();
- }
- });
- }
-
- $(window).scroll(() => {
- if (didScroll) {
- return;
- }
- didScroll = true;
- });
-
- setInterval(() => {
- if (didScroll) {
- hasScrolled();
- didScroll = false;
- }
- }, 250);
-});
diff --git a/_javascript/commons/topbar-title.js b/_javascript/commons/topbar-title.js
deleted file mode 100644
index fd27a7d0..00000000
--- a/_javascript/commons/topbar-title.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Top bar title auto change while scrolling up/down in mobile screens.
- */
-
-$(function () {
- const titleSelector = "div.post>h1:first-of-type";
- const $pageTitle = $(titleSelector);
- const $topbarTitle = $("#topbar-title");
-
- if ($pageTitle.length === 0 /* on Home page */
- || $pageTitle.hasClass("dynamic-title")
- || $topbarTitle.is(":hidden")) {/* not in mobile views */
- return;
- }
-
- const defaultTitleText = $topbarTitle.text().trim();
- let pageTitleText = $pageTitle.text().trim();
- let hasScrolled = false;
- let lastScrollTop = 0;
-
- if ($("#page-category").length || $("#page-tag").length) {
- /* The title in Category or Tag page will be " " */
- if (/\s/.test(pageTitleText)) {
- pageTitleText = pageTitleText.replace(/[0-9]/g, "").trim();
- }
- }
-
- // When the page is scrolled down and then refreshed, the topbar title needs to be initialized
- if ($pageTitle.offset().top < $(window).scrollTop()) {
- $topbarTitle.text(pageTitleText);
- }
-
- let options = {
- rootMargin: '-48px 0px 0px 0px', // 48px equals to the topbar height (3rem)
- threshold: [0, 1]
- };
-
- let observer = new IntersectionObserver((entries) => {
- if (!hasScrolled) {
- hasScrolled = true;
- return;
- }
-
- let curScrollTop = $(window).scrollTop();
- let isScrollDown = lastScrollTop < curScrollTop;
- lastScrollTop = curScrollTop;
- let heading = entries[0];
-
- if (isScrollDown) {
- if (heading.intersectionRatio === 0) {
- $topbarTitle.text(pageTitleText);
- }
- } else {
- if (heading.intersectionRatio === 1) {
- $topbarTitle.text(defaultTitleText);
- }
- }
- }, options);
-
- observer.observe(document.querySelector(titleSelector));
-
- /* Click title will scroll to top */
- $topbarTitle.click(function () {
- $("body,html").animate({scrollTop: 0}, 800);
- });
-
-});
diff --git a/_javascript/copyright b/_javascript/copyright
deleted file mode 100644
index a45813d0..00000000
--- a/_javascript/copyright
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
- */
diff --git a/_javascript/home.js b/_javascript/home.js
new file mode 100644
index 00000000..7f628a17
--- /dev/null
+++ b/_javascript/home.js
@@ -0,0 +1,8 @@
+import { basic, initSidebar, initTopbar } from './modules/layouts';
+import { initLocaleDatetime, loadImg } from './modules/components';
+
+loadImg();
+initLocaleDatetime();
+initSidebar();
+initTopbar();
+basic();
diff --git a/_javascript/misc.js b/_javascript/misc.js
new file mode 100644
index 00000000..37130da1
--- /dev/null
+++ b/_javascript/misc.js
@@ -0,0 +1,7 @@
+import { basic, initSidebar, initTopbar } from './modules/layouts';
+import { initLocaleDatetime } from './modules/components';
+
+initSidebar();
+initTopbar();
+initLocaleDatetime();
+basic();
diff --git a/_javascript/modules/components.js b/_javascript/modules/components.js
new file mode 100644
index 00000000..f5dd780c
--- /dev/null
+++ b/_javascript/modules/components.js
@@ -0,0 +1,10 @@
+export { categoryCollapse } from './components/category-collapse';
+export { initClipboard } from './components/clipboard';
+export { loadImg } from './components/img-loading';
+export { imgPopup } from './components/img-popup';
+export { initLocaleDatetime } from './components/locale-datetime';
+export { initToc } from './components/toc';
+export { loadMermaid } from './components/mermaid';
+export { modeWatcher } from './components/mode-toggle';
+export { back2top } from './components/back-to-top';
+export { loadTooltip } from './components/tooltip-loader';
diff --git a/_javascript/modules/components/back-to-top.js b/_javascript/modules/components/back-to-top.js
new file mode 100644
index 00000000..40d9cd1a
--- /dev/null
+++ b/_javascript/modules/components/back-to-top.js
@@ -0,0 +1,19 @@
+/**
+ * Reference: https://bootsnipp.com/snippets/featured/link-to-top-page
+ */
+
+export function back2top() {
+ const btn = document.getElementById('back-to-top');
+
+ window.addEventListener('scroll', () => {
+ if (window.scrollY > 50) {
+ btn.classList.add('show');
+ } else {
+ btn.classList.remove('show');
+ }
+ });
+
+ btn.addEventListener('click', () => {
+ window.scrollTo({ top: 0 });
+ });
+}
diff --git a/_javascript/modules/components/category-collapse.js b/_javascript/modules/components/category-collapse.js
new file mode 100644
index 00000000..0c53cb4b
--- /dev/null
+++ b/_javascript/modules/components/category-collapse.js
@@ -0,0 +1,36 @@
+/**
+ * Tab 'Categories' expand/close effect.
+ */
+
+import 'bootstrap/js/src/collapse.js';
+
+const childPrefix = 'l_';
+const parentPrefix = 'h_';
+const children = document.getElementsByClassName('collapse');
+
+export function categoryCollapse() {
+ [...children].forEach((elem) => {
+ const id = parentPrefix + elem.id.substring(childPrefix.length);
+ const parent = document.getElementById(id);
+
+ // collapse sub-categories
+ elem.addEventListener('hide.bs.collapse', () => {
+ if (parent) {
+ parent.querySelector('.far.fa-folder-open').className =
+ 'far fa-folder fa-fw';
+ parent.querySelector('.fas.fa-angle-down').classList.add('rotate');
+ parent.classList.remove('hide-border-bottom');
+ }
+ });
+
+ // expand sub-categories
+ elem.addEventListener('show.bs.collapse', () => {
+ if (parent) {
+ parent.querySelector('.far.fa-folder').className =
+ 'far fa-folder-open fa-fw';
+ parent.querySelector('.fas.fa-angle-down').classList.remove('rotate');
+ parent.classList.add('hide-border-bottom');
+ }
+ });
+ });
+}
diff --git a/_javascript/modules/components/clipboard.js b/_javascript/modules/components/clipboard.js
new file mode 100644
index 00000000..9566e9d3
--- /dev/null
+++ b/_javascript/modules/components/clipboard.js
@@ -0,0 +1,143 @@
+/**
+ * Clipboard functions
+ *
+ * Dependencies:
+ * clipboard.js (https://github.com/zenorocha/clipboard.js)
+ */
+
+import Tooltip from 'bootstrap/js/src/tooltip';
+
+const clipboardSelector = '.code-header>button';
+
+const ICON_DEFAULT = 'far fa-clipboard';
+const ICON_SUCCESS = 'fas fa-check';
+
+const ATTR_TIMEOUT = 'timeout';
+const ATTR_TITLE_SUCCEED = 'data-title-succeed';
+const ATTR_TITLE_ORIGIN = 'data-bs-original-title';
+const TIMEOUT = 2000; // in milliseconds
+
+function isLocked(node) {
+ if (node.hasAttribute(ATTR_TIMEOUT)) {
+ let timeout = node.getAttribute(ATTR_TIMEOUT);
+ if (Number(timeout) > Date.now()) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function lock(node) {
+ node.setAttribute(ATTR_TIMEOUT, Date.now() + TIMEOUT);
+}
+
+function unlock(node) {
+ node.removeAttribute(ATTR_TIMEOUT);
+}
+
+function showTooltip(btn) {
+ const succeedTitle = btn.getAttribute(ATTR_TITLE_SUCCEED);
+ btn.setAttribute(ATTR_TITLE_ORIGIN, succeedTitle);
+ Tooltip.getInstance(btn).show();
+}
+
+function hideTooltip(btn) {
+ Tooltip.getInstance(btn).hide();
+ btn.removeAttribute(ATTR_TITLE_ORIGIN);
+}
+
+function setSuccessIcon(btn) {
+ const icon = btn.children[0];
+ icon.setAttribute('class', ICON_SUCCESS);
+}
+
+function resumeIcon(btn) {
+ const icon = btn.children[0];
+ icon.setAttribute('class', ICON_DEFAULT);
+}
+
+function setCodeClipboard() {
+ const clipboardList = document.querySelectorAll(clipboardSelector);
+
+ if (clipboardList.length === 0) {
+ return;
+ }
+
+ // Initial the clipboard.js object
+ const clipboard = new ClipboardJS(clipboardSelector, {
+ target: (trigger) => {
+ const codeBlock = trigger.parentNode.nextElementSibling;
+ return codeBlock.querySelector('code .rouge-code');
+ }
+ });
+
+ [...clipboardList].map(
+ (elem) =>
+ new Tooltip(elem, {
+ placement: 'left'
+ })
+ );
+
+ clipboard.on('success', (e) => {
+ const trigger = e.trigger;
+
+ e.clearSelection();
+
+ if (isLocked(trigger)) {
+ return;
+ }
+
+ setSuccessIcon(trigger);
+ showTooltip(trigger);
+ lock(trigger);
+
+ setTimeout(() => {
+ hideTooltip(trigger);
+ resumeIcon(trigger);
+ unlock(trigger);
+ }, TIMEOUT);
+ });
+}
+
+function setLinkClipboard() {
+ const btnCopyLink = document.getElementById('copy-link');
+
+ if (btnCopyLink === null) {
+ return;
+ }
+
+ btnCopyLink.addEventListener('click', (e) => {
+ const target = e.target;
+
+ if (isLocked(target)) {
+ return;
+ }
+
+ // Copy URL to clipboard
+ navigator.clipboard.writeText(window.location.href).then(() => {
+ const defaultTitle = target.getAttribute(ATTR_TITLE_ORIGIN);
+ const succeedTitle = target.getAttribute(ATTR_TITLE_SUCCEED);
+
+ // Switch tooltip title
+ target.setAttribute(ATTR_TITLE_ORIGIN, succeedTitle);
+ Tooltip.getInstance(target).show();
+
+ lock(target);
+
+ setTimeout(() => {
+ target.setAttribute(ATTR_TITLE_ORIGIN, defaultTitle);
+ unlock(target);
+ }, TIMEOUT);
+ });
+ });
+
+ btnCopyLink.addEventListener('mouseleave', (e) => {
+ Tooltip.getInstance(e.target).hide();
+ });
+}
+
+export function initClipboard() {
+ setCodeClipboard();
+ setLinkClipboard();
+}
diff --git a/_javascript/modules/components/img-loading.js b/_javascript/modules/components/img-loading.js
new file mode 100644
index 00000000..989d9e68
--- /dev/null
+++ b/_javascript/modules/components/img-loading.js
@@ -0,0 +1,67 @@
+/**
+ * Setting up image lazy loading and LQIP switching
+ */
+
+const ATTR_DATA_SRC = 'data-src';
+const ATTR_DATA_LQIP = 'data-lqip';
+
+const cover = {
+ SHIMMER: 'shimmer',
+ BLUR: 'blur'
+};
+
+function removeCover(clzss) {
+ this.parentElement.classList.remove(clzss);
+}
+
+function handleImage() {
+ if (!this.complete) {
+ return;
+ }
+
+ if (this.hasAttribute(ATTR_DATA_LQIP)) {
+ removeCover.call(this, cover.BLUR);
+ } else {
+ removeCover.call(this, cover.SHIMMER);
+ }
+}
+
+/**
+ * Switches the LQIP with the real image URL.
+ */
+function switchLQIP() {
+ const src = this.getAttribute(ATTR_DATA_SRC);
+ this.setAttribute('src', encodeURI(src));
+ this.removeAttribute(ATTR_DATA_SRC);
+}
+
+export function loadImg() {
+ const images = document.querySelectorAll('article img');
+
+ if (images.length === 0) {
+ return;
+ }
+
+ images.forEach((img) => {
+ img.addEventListener('load', handleImage);
+ });
+
+ // Images loaded from the browser cache do not trigger the 'load' event
+ document.querySelectorAll('article img[loading="lazy"]').forEach((img) => {
+ if (img.complete) {
+ removeCover.call(img, cover.SHIMMER);
+ }
+ });
+
+ // LQIPs set by the data URI or WebP will not trigger the 'load' event,
+ // so manually convert the URI to the URL of a high-resolution image.
+ const lqips = document.querySelectorAll(
+ `article img[${ATTR_DATA_LQIP}="true"]`
+ );
+
+ if (lqips.length) {
+ lqips.forEach((lqip) => {
+ switchLQIP.call(lqip);
+ });
+ }
+}
diff --git a/_javascript/modules/components/img-popup.js b/_javascript/modules/components/img-popup.js
new file mode 100644
index 00000000..34db948f
--- /dev/null
+++ b/_javascript/modules/components/img-popup.js
@@ -0,0 +1,54 @@
+/**
+ * Set up image popup
+ *
+ * Dependencies: https://github.com/biati-digital/glightbox
+ */
+
+const lightImages = '.popup:not(.dark)';
+const darkImages = '.popup:not(.light)';
+let selector = lightImages;
+
+function swapImages(current, reverse) {
+ if (selector === lightImages) {
+ selector = darkImages;
+ } else {
+ selector = lightImages;
+ }
+
+ if (reverse === null) {
+ reverse = GLightbox({ selector: `${selector}` });
+ }
+
+ return [reverse, current];
+}
+
+export function imgPopup() {
+ if (document.querySelector('.popup') === null) {
+ return;
+ }
+
+ const hasDualImages = !(
+ document.querySelector('.popup.light') === null &&
+ document.querySelector('.popup.dark') === null
+ );
+
+ if (Theme.isDark) {
+ selector = darkImages;
+ }
+
+ let current = GLightbox({ selector: `${selector}` });
+
+ if (hasDualImages && Theme.isToggleable) {
+ let reverse = null;
+
+ window.addEventListener('message', (event) => {
+ if (
+ event.source === window &&
+ event.data &&
+ event.data.id === Theme.eventId
+ ) {
+ [current, reverse] = swapImages(current, reverse);
+ }
+ });
+ }
+}
diff --git a/_javascript/modules/components/locale-datetime.js b/_javascript/modules/components/locale-datetime.js
new file mode 100644
index 00000000..eb75626d
--- /dev/null
+++ b/_javascript/modules/components/locale-datetime.js
@@ -0,0 +1,53 @@
+/**
+ * Update month/day to locale datetime
+ *
+ * Requirement:
+ */
+
+/* A tool for locale datetime */
+class LocaleHelper {
+ static get attrTimestamp() {
+ return 'data-ts';
+ }
+
+ static get attrDateFormat() {
+ return 'data-df';
+ }
+
+ static get locale() {
+ return document.documentElement.getAttribute('lang').substring(0, 2);
+ }
+
+ static getTimestamp(elem) {
+ return Number(elem.getAttribute(this.attrTimestamp)); // unix timestamp
+ }
+
+ static getDateFormat(elem) {
+ return elem.getAttribute(this.attrDateFormat);
+ }
+}
+
+export function initLocaleDatetime() {
+ dayjs.locale(LocaleHelper.locale);
+ dayjs.extend(window.dayjs_plugin_localizedFormat);
+
+ document
+ .querySelectorAll(`[${LocaleHelper.attrTimestamp}]`)
+ .forEach((elem) => {
+ const date = dayjs.unix(LocaleHelper.getTimestamp(elem));
+ const text = date.format(LocaleHelper.getDateFormat(elem));
+ elem.textContent = text;
+ elem.removeAttribute(LocaleHelper.attrTimestamp);
+ elem.removeAttribute(LocaleHelper.attrDateFormat);
+
+ // setup tooltips
+ if (
+ elem.hasAttribute('data-bs-toggle') &&
+ elem.getAttribute('data-bs-toggle') === 'tooltip'
+ ) {
+ // see: https://day.js.org/docs/en/display/format#list-of-localized-formats
+ const tooltipText = date.format('llll');
+ elem.setAttribute('data-bs-title', tooltipText);
+ }
+ });
+}
diff --git a/_javascript/modules/components/mermaid.js b/_javascript/modules/components/mermaid.js
new file mode 100644
index 00000000..17e3a8ae
--- /dev/null
+++ b/_javascript/modules/components/mermaid.js
@@ -0,0 +1,64 @@
+/**
+ * Mermaid-js loader
+ */
+
+const MERMAID = 'mermaid';
+const themeMap = Theme.newThemeMap('default', 'dark');
+
+function refreshTheme(event) {
+ if (
+ event.source === window &&
+ event.data &&
+ event.data.id === Theme.eventId
+ ) {
+ // Re-render the SVG ›
+ const mermaidList = document.getElementsByClassName(MERMAID);
+
+ [...mermaidList].forEach((elem) => {
+ const svgCode = elem.previousSibling.children.item(0).textContent;
+ elem.textContent = svgCode;
+ elem.removeAttribute('data-processed');
+ });
+
+ const newTheme = themeMap[Theme.resolvedTheme];
+
+ mermaid.initialize({ theme: newTheme });
+ mermaid.init(null, `.${MERMAID}`);
+ }
+}
+
+function setNode(elem) {
+ const svgCode = elem.textContent;
+ const backup = elem.parentElement;
+ backup.classList.add('d-none');
+ // Create mermaid node
+ const mermaid = document.createElement('pre');
+ mermaid.classList.add(MERMAID);
+ const text = document.createTextNode(svgCode);
+ mermaid.appendChild(text);
+ backup.after(mermaid);
+}
+
+export function loadMermaid() {
+ if (
+ typeof mermaid === 'undefined' ||
+ typeof mermaid.initialize !== 'function'
+ ) {
+ return;
+ }
+
+ const initTheme = themeMap[Theme.resolvedTheme];
+
+ let mermaidConf = {
+ theme: initTheme
+ };
+
+ const basicList = document.getElementsByClassName('language-mermaid');
+ [...basicList].forEach(setNode);
+
+ mermaid.initialize(mermaidConf);
+
+ if (Theme.isToggleable) {
+ window.addEventListener('message', refreshTheme);
+ }
+}
diff --git a/_javascript/modules/components/mode-toggle.js b/_javascript/modules/components/mode-toggle.js
new file mode 100644
index 00000000..4f69d0b7
--- /dev/null
+++ b/_javascript/modules/components/mode-toggle.js
@@ -0,0 +1,46 @@
+/**
+ * Sets up the mode toggle dropdown, allowing users to switch between light, dark, and system themes.
+ *
+ * Dependencies:
+ * - Theme (${JS_ROOT}/theme.js)
+ */
+
+import 'bootstrap/js/src/dropdown.js';
+
+const ACTIVE_CLASS = 'active';
+const dropdown = document.querySelector('#mode-toggle + .dropdown-menu');
+const activeMode = Theme.isSystemTheme
+ ? Theme.Mode.SYSTEM
+ : Theme.resolvedTheme;
+
+export function modeWatcher() {
+ if (!Theme.isToggleable) {
+ return;
+ }
+
+ dropdown.querySelectorAll('.dropdown-item').forEach((option) => {
+ const mode = option.dataset.themeMode;
+ if (mode === activeMode) {
+ option.classList.add(ACTIVE_CLASS);
+ return;
+ }
+ });
+
+ dropdown.addEventListener('click', (event) => {
+ const current = event.target.closest('.dropdown-item');
+
+ if (!current) {
+ return;
+ }
+
+ const lastActive = dropdown.querySelector(`.${ACTIVE_CLASS}`);
+
+ if (lastActive === current) {
+ return;
+ }
+
+ lastActive.classList.remove(ACTIVE_CLASS);
+ current.classList.add(ACTIVE_CLASS);
+ Theme.update(current.dataset.themeMode);
+ });
+}
diff --git a/_javascript/modules/components/search-display.js b/_javascript/modules/components/search-display.js
new file mode 100644
index 00000000..64305168
--- /dev/null
+++ b/_javascript/modules/components/search-display.js
@@ -0,0 +1,110 @@
+/**
+ * This script makes #search-result-wrapper switch to unload or shown automatically.
+ */
+
+const btnSbTrigger = document.getElementById('sidebar-trigger');
+const btnSearchTrigger = document.getElementById('search-trigger');
+const btnCancel = document.getElementById('search-cancel');
+const content = document.querySelectorAll('#main-wrapper>.container>.row');
+const topbarTitle = document.getElementById('topbar-title');
+const search = document.getElementById('search');
+const resultWrapper = document.getElementById('search-result-wrapper');
+const results = document.getElementById('search-results');
+const input = document.getElementById('search-input');
+const hints = document.getElementById('search-hints');
+
+// CSS class names
+const LOADED = 'd-block';
+const UNLOADED = 'd-none';
+const FOCUS = 'input-focus';
+const FLEX = 'd-flex';
+
+/* Actions in mobile screens (Sidebar hidden) */
+class MobileSearchBar {
+ static on() {
+ btnSbTrigger.classList.add(UNLOADED);
+ topbarTitle.classList.add(UNLOADED);
+ btnSearchTrigger.classList.add(UNLOADED);
+ search.classList.add(FLEX);
+ btnCancel.classList.add(LOADED);
+ }
+
+ static off() {
+ btnCancel.classList.remove(LOADED);
+ search.classList.remove(FLEX);
+ btnSbTrigger.classList.remove(UNLOADED);
+ topbarTitle.classList.remove(UNLOADED);
+ btnSearchTrigger.classList.remove(UNLOADED);
+ }
+}
+
+class ResultSwitch {
+ static resultVisible = false;
+
+ static on() {
+ if (!this.resultVisible) {
+ resultWrapper.classList.remove(UNLOADED);
+ content.forEach((el) => {
+ el.classList.add(UNLOADED);
+ });
+ this.resultVisible = true;
+ }
+ }
+
+ static off() {
+ if (this.resultVisible) {
+ results.innerHTML = '';
+
+ if (hints.classList.contains(UNLOADED)) {
+ hints.classList.remove(UNLOADED);
+ }
+
+ resultWrapper.classList.add(UNLOADED);
+ content.forEach((el) => {
+ el.classList.remove(UNLOADED);
+ });
+ input.textContent = '';
+ this.resultVisible = false;
+ }
+ }
+}
+
+function isMobileView() {
+ return btnCancel.classList.contains(LOADED);
+}
+
+export function displaySearch() {
+ btnSearchTrigger.addEventListener('click', () => {
+ MobileSearchBar.on();
+ ResultSwitch.on();
+ input.focus();
+ });
+
+ btnCancel.addEventListener('click', () => {
+ MobileSearchBar.off();
+ ResultSwitch.off();
+ });
+
+ input.addEventListener('focus', () => {
+ search.classList.add(FOCUS);
+ });
+
+ input.addEventListener('focusout', () => {
+ search.classList.remove(FOCUS);
+ });
+
+ input.addEventListener('input', () => {
+ if (input.value === '') {
+ if (isMobileView()) {
+ hints.classList.remove(UNLOADED);
+ } else {
+ ResultSwitch.off();
+ }
+ } else {
+ ResultSwitch.on();
+ if (isMobileView()) {
+ hints.classList.add(UNLOADED);
+ }
+ }
+ });
+}
diff --git a/_javascript/modules/components/toc.js b/_javascript/modules/components/toc.js
new file mode 100644
index 00000000..dec814f5
--- /dev/null
+++ b/_javascript/modules/components/toc.js
@@ -0,0 +1,36 @@
+import { TocMobile as mobile } from './toc/toc-mobile';
+import { TocDesktop as desktop } from './toc/toc-desktop';
+
+const desktopMode = matchMedia('(min-width: 1200px)');
+
+function refresh(e) {
+ if (e.matches) {
+ if (mobile.popupOpened) {
+ mobile.hidePopup();
+ }
+
+ desktop.refresh();
+ } else {
+ mobile.refresh();
+ }
+}
+
+function init() {
+ if (document.querySelector('main>article[data-toc="true"]') === null) {
+ return;
+ }
+
+ // Avoid create multiple instances of Tocbot. Ref:
+ if (desktopMode.matches) {
+ desktop.init();
+ } else {
+ mobile.init();
+ }
+
+ const $tocWrapper = document.getElementById('toc-wrapper');
+ $tocWrapper.classList.remove('invisible');
+
+ desktopMode.onchange = refresh;
+}
+
+export { init as initToc };
diff --git a/_javascript/modules/components/toc/toc-desktop.js b/_javascript/modules/components/toc/toc-desktop.js
new file mode 100644
index 00000000..ea4986ba
--- /dev/null
+++ b/_javascript/modules/components/toc/toc-desktop.js
@@ -0,0 +1,20 @@
+export class TocDesktop {
+ /* Tocbot options Ref: https://github.com/tscanlin/tocbot#usage */
+ static options = {
+ tocSelector: '#toc',
+ contentSelector: '.content',
+ ignoreSelector: '[data-toc-skip]',
+ headingSelector: 'h2, h3, h4',
+ orderedList: false,
+ scrollSmooth: false,
+ headingsOffset: 16 * 2 // 2rem
+ };
+
+ static refresh() {
+ tocbot.refresh(this.options);
+ }
+
+ static init() {
+ tocbot.init(this.options);
+ }
+}
diff --git a/_javascript/modules/components/toc/toc-mobile.js b/_javascript/modules/components/toc/toc-mobile.js
new file mode 100644
index 00000000..0df7c80d
--- /dev/null
+++ b/_javascript/modules/components/toc/toc-mobile.js
@@ -0,0 +1,126 @@
+/**
+ * TOC button, topbar and popup for mobile devices
+ */
+
+const $tocBar = document.getElementById('toc-bar');
+const $soloTrigger = document.getElementById('toc-solo-trigger');
+const $triggers = document.getElementsByClassName('toc-trigger');
+const $popup = document.getElementById('toc-popup');
+const $btnClose = document.getElementById('toc-popup-close');
+
+const SCROLL_LOCK = 'overflow-hidden';
+const CLOSING = 'closing';
+
+export class TocMobile {
+ static #invisible = true;
+ static #barHeight = 16 * 3; // 3rem
+
+ static options = {
+ tocSelector: '#toc-popup-content',
+ contentSelector: '.content',
+ ignoreSelector: '[data-toc-skip]',
+ headingSelector: 'h2, h3, h4',
+ orderedList: false,
+ scrollSmooth: false,
+ collapseDepth: 4,
+ headingsOffset: this.#barHeight
+ };
+
+ static initBar() {
+ const observer = new IntersectionObserver(
+ (entries) => {
+ entries.forEach((entry) => {
+ $tocBar.classList.toggle('invisible', entry.isIntersecting);
+ });
+ },
+ { rootMargin: `-${this.#barHeight}px 0px 0px 0px` }
+ );
+
+ observer.observe($soloTrigger);
+ this.#invisible = false;
+ }
+
+ static listenAnchors() {
+ const $anchors = document.getElementsByClassName('toc-link');
+ [...$anchors].forEach((anchor) => {
+ anchor.onclick = () => this.hidePopup();
+ });
+ }
+
+ static refresh() {
+ if (this.#invisible) {
+ this.initComponents();
+ }
+ tocbot.refresh(this.options);
+ this.listenAnchors();
+ }
+
+ static get popupOpened() {
+ return $popup.open;
+ }
+
+ static showPopup() {
+ this.lockScroll(true);
+ $popup.showModal();
+ $btnClose.blur();
+ const activeItem = $popup.querySelector('li.is-active-li');
+ activeItem.scrollIntoView({ block: 'center' });
+ }
+
+ static hidePopup() {
+ $popup.toggleAttribute(CLOSING);
+
+ $popup.addEventListener(
+ 'animationend',
+ () => {
+ $popup.toggleAttribute(CLOSING);
+ $popup.close();
+ },
+ { once: true }
+ );
+
+ this.lockScroll(false);
+ }
+
+ static lockScroll(enable) {
+ document.documentElement.classList.toggle(SCROLL_LOCK, enable);
+ document.body.classList.toggle(SCROLL_LOCK, enable);
+ }
+
+ static clickBackdrop(event) {
+ if ($popup.hasAttribute(CLOSING)) {
+ return;
+ }
+
+ const rect = event.target.getBoundingClientRect();
+ if (
+ event.clientX < rect.left ||
+ event.clientX > rect.right ||
+ event.clientY < rect.top ||
+ event.clientY > rect.bottom
+ ) {
+ this.hidePopup();
+ }
+ }
+
+ static initComponents() {
+ this.initBar();
+
+ [...$triggers].forEach((trigger) => {
+ trigger.onclick = () => this.showPopup();
+ });
+
+ $popup.onclick = (e) => this.clickBackdrop(e);
+ $btnClose.onclick = () => this.hidePopup();
+ $popup.oncancel = (e) => {
+ e.preventDefault();
+ this.hidePopup();
+ };
+ }
+
+ static init() {
+ tocbot.init(this.options);
+ this.listenAnchors();
+ this.initComponents();
+ }
+}
diff --git a/_javascript/modules/components/tooltip-loader.js b/_javascript/modules/components/tooltip-loader.js
new file mode 100644
index 00000000..d30e81cf
--- /dev/null
+++ b/_javascript/modules/components/tooltip-loader.js
@@ -0,0 +1,11 @@
+import Tooltip from 'bootstrap/js/src/tooltip';
+
+export function loadTooltip() {
+ const tooltipTriggerList = document.querySelectorAll(
+ '[data-bs-toggle="tooltip"]'
+ );
+
+ [...tooltipTriggerList].map(
+ (tooltipTriggerEl) => new Tooltip(tooltipTriggerEl)
+ );
+}
diff --git a/_javascript/modules/layouts.js b/_javascript/modules/layouts.js
new file mode 100644
index 00000000..28f79625
--- /dev/null
+++ b/_javascript/modules/layouts.js
@@ -0,0 +1,3 @@
+export { basic } from './layouts/basic';
+export { initSidebar } from './layouts/sidebar';
+export { initTopbar } from './layouts/topbar';
diff --git a/_javascript/modules/layouts/basic.js b/_javascript/modules/layouts/basic.js
new file mode 100644
index 00000000..8e104dcc
--- /dev/null
+++ b/_javascript/modules/layouts/basic.js
@@ -0,0 +1,7 @@
+import { back2top, loadTooltip, modeWatcher } from '../components';
+
+export function basic() {
+ modeWatcher();
+ back2top();
+ loadTooltip();
+}
diff --git a/_javascript/modules/layouts/sidebar.js b/_javascript/modules/layouts/sidebar.js
new file mode 100644
index 00000000..bbf5e7da
--- /dev/null
+++ b/_javascript/modules/layouts/sidebar.js
@@ -0,0 +1,19 @@
+const ATTR_DISPLAY = 'sidebar-display';
+const $sidebar = document.getElementById('sidebar');
+const $trigger = document.getElementById('sidebar-trigger');
+const $mask = document.getElementById('mask');
+
+class SidebarUtil {
+ static #isExpanded = false;
+
+ static toggle() {
+ this.#isExpanded = !this.#isExpanded;
+ document.body.toggleAttribute(ATTR_DISPLAY, this.#isExpanded);
+ $sidebar.classList.toggle('z-2', this.#isExpanded);
+ $mask.classList.toggle('d-none', !this.#isExpanded);
+ }
+}
+
+export function initSidebar() {
+ $trigger.onclick = $mask.onclick = () => SidebarUtil.toggle();
+}
diff --git a/_javascript/modules/layouts/topbar.js b/_javascript/modules/layouts/topbar.js
new file mode 100644
index 00000000..cfcd0edf
--- /dev/null
+++ b/_javascript/modules/layouts/topbar.js
@@ -0,0 +1,5 @@
+import { displaySearch } from '../components/search-display';
+
+export function initTopbar() {
+ displaySearch();
+}
diff --git a/_javascript/page.js b/_javascript/page.js
new file mode 100644
index 00000000..4b03b790
--- /dev/null
+++ b/_javascript/page.js
@@ -0,0 +1,15 @@
+import { basic, initSidebar, initTopbar } from './modules/layouts';
+import {
+ loadImg,
+ imgPopup,
+ initClipboard,
+ loadMermaid
+} from './modules/components';
+
+loadImg();
+imgPopup();
+initSidebar();
+initTopbar();
+initClipboard();
+loadMermaid();
+basic();
diff --git a/_javascript/post.js b/_javascript/post.js
new file mode 100644
index 00000000..dc472b42
--- /dev/null
+++ b/_javascript/post.js
@@ -0,0 +1,20 @@
+import { basic, initTopbar, initSidebar } from './modules/layouts';
+
+import {
+ loadImg,
+ imgPopup,
+ initLocaleDatetime,
+ initClipboard,
+ initToc,
+ loadMermaid
+} from './modules/components';
+
+loadImg();
+initToc();
+imgPopup();
+initSidebar();
+initLocaleDatetime();
+initClipboard();
+initTopbar();
+loadMermaid();
+basic();
diff --git a/_javascript/pwa/app.js b/_javascript/pwa/app.js
new file mode 100644
index 00000000..6bb2e5a5
--- /dev/null
+++ b/_javascript/pwa/app.js
@@ -0,0 +1,55 @@
+import Toast from 'bootstrap/js/src/toast';
+
+if ('serviceWorker' in navigator) {
+ // Get Jekyll config from URL parameters
+ const src = new URL(document.currentScript.src);
+ const register = src.searchParams.get('register');
+ const baseUrl = src.searchParams.get('baseurl');
+
+ if (register) {
+ const swUrl = `${baseUrl}/sw.min.js`;
+ const $notification = document.getElementById('notification');
+ const $btnUpdate = $notification.querySelector('[aria-label="Update"]');
+ const popupWindow = Toast.getOrCreateInstance($notification);
+
+ navigator.serviceWorker.register(swUrl).then((registration) => {
+ // Restore the update window that was last manually closed by the user
+ if (registration.waiting) {
+ popupWindow.show();
+ }
+
+ registration.addEventListener('updatefound', () => {
+ registration.installing.addEventListener('statechange', () => {
+ if (registration.waiting) {
+ if (navigator.serviceWorker.controller) {
+ popupWindow.show();
+ }
+ }
+ });
+ });
+
+ $btnUpdate.addEventListener('click', () => {
+ if (registration.waiting) {
+ registration.waiting.postMessage('SKIP_WAITING');
+ }
+ popupWindow.hide();
+ });
+ });
+
+ let refreshing = false;
+
+ // Detect controller change and refresh all the opened tabs
+ navigator.serviceWorker.addEventListener('controllerchange', () => {
+ if (!refreshing) {
+ window.location.reload();
+ refreshing = true;
+ }
+ });
+ } else {
+ navigator.serviceWorker.getRegistrations().then(function (registrations) {
+ for (let registration of registrations) {
+ registration.unregister();
+ }
+ });
+ }
+}
diff --git a/_javascript/pwa/sw.js b/_javascript/pwa/sw.js
new file mode 100644
index 00000000..ff9125dd
--- /dev/null
+++ b/_javascript/pwa/sw.js
@@ -0,0 +1,92 @@
+importScripts('./assets/js/data/swconf.js');
+
+const purge = swconf.purge;
+const interceptor = swconf.interceptor;
+
+function verifyUrl(url) {
+ const requestUrl = new URL(url);
+ const requestPath = requestUrl.pathname;
+
+ if (!requestUrl.protocol.startsWith('http')) {
+ return false;
+ }
+
+ for (const prefix of interceptor.urlPrefixes) {
+ if (requestUrl.href.startsWith(prefix)) {
+ return false;
+ }
+ }
+
+ for (const path of interceptor.paths) {
+ if (requestPath.startsWith(path)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+self.addEventListener('install', (event) => {
+ if (purge) {
+ return;
+ }
+
+ event.waitUntil(
+ caches.open(swconf.cacheName).then((cache) => {
+ return cache.addAll(swconf.resources);
+ })
+ );
+});
+
+self.addEventListener('activate', (event) => {
+ event.waitUntil(
+ caches.keys().then((keyList) => {
+ return Promise.all(
+ keyList.map((key) => {
+ if (purge) {
+ return caches.delete(key);
+ } else {
+ if (key !== swconf.cacheName) {
+ return caches.delete(key);
+ }
+ }
+ })
+ );
+ })
+ );
+});
+
+self.addEventListener('message', (event) => {
+ if (event.data === 'SKIP_WAITING') {
+ self.skipWaiting();
+ }
+});
+
+self.addEventListener('fetch', (event) => {
+ if (event.request.headers.has('range')) {
+ return;
+ }
+
+ event.respondWith(
+ caches.match(event.request).then((response) => {
+ if (response) {
+ return response;
+ }
+
+ return fetch(event.request).then((response) => {
+ const url = event.request.url;
+
+ if (purge || event.request.method !== 'GET' || !verifyUrl(url)) {
+ return response;
+ }
+
+ // See:
+ let responseToCache = response.clone();
+
+ caches.open(swconf.cacheName).then((cache) => {
+ cache.put(event.request, responseToCache);
+ });
+ return response;
+ });
+ })
+ );
+});
diff --git a/_javascript/theme.js b/_javascript/theme.js
new file mode 100644
index 00000000..a10dd3e4
--- /dev/null
+++ b/_javascript/theme.js
@@ -0,0 +1,156 @@
+/**
+ * A utility class that manages the site's theme mode.
+ *
+ * Concepts:
+ * - Mode: dark, light, or system. The latter follows the operating system's preference.
+ * - Theme: The actual theme applied to the DOM, either dark or light. Determined by the mode or system preference.
+ */
+class Theme {
+ /** @type {string} LocalStorage key for the selected theme mode. */
+ static #storageKey = 'theme';
+
+ static Mode = Object.freeze({
+ DARK: 'dark',
+ LIGHT: 'light',
+ SYSTEM: 'system'
+ });
+
+ static #root = document.documentElement;
+
+ /** @type {MediaQueryList} System dark-mode preference query. */
+ static #mediaDark = window.matchMedia('(prefers-color-scheme: dark)');
+
+ /** @returns {string|null} The theme currently set on the DOM. */
+ static get #domTheme() {
+ return this.#root.dataset.bsTheme || null;
+ }
+
+ /** @returns {string|null} The theme stored on the client. */
+ static get #storedTheme() {
+ return localStorage.getItem(this.#storageKey);
+ }
+
+ /** @returns {string} The theme preferred by the operating system. */
+ static get #systemTheme() {
+ return this.#prefersDark ? this.Mode.DARK : this.Mode.LIGHT;
+ }
+
+ /** @returns {boolean} Whether the operating system prefers dark mode. */
+ static get #prefersDark() {
+ return this.#mediaDark.matches;
+ }
+
+ /**
+ * Applies a theme and optionally persists it as a user preference.
+ *
+ * @param {'light'|'dark'} theme
+ * @param {{ persist?: boolean, domPersist?: boolean }} [options]
+ * - `persist`: Whether the theme is persisted in localStorage.
+ * - `domPersist`: Whether the theme is persisted in data attributes on the DOM.
+ */
+ static #apply(theme, { persist = false, domPersist = false } = {}) {
+ this.#root.dataset.bsTheme = theme;
+
+ if (persist) {
+ localStorage.setItem(this.#storageKey, theme);
+ }
+
+ if (domPersist || persist) {
+ this.#root.toggleAttribute('data-theme-persisted', true);
+ }
+ }
+
+ /** Removes the stored user preference. */
+ static #clearStorage() {
+ localStorage.removeItem(this.#storageKey);
+ this.#root.toggleAttribute('data-theme-persisted', false);
+ }
+
+ /** Broadcasts a theme change event to dependent modules. */
+ static #notify() {
+ window.postMessage({ id: this.eventId }, '*');
+ }
+
+ /** @type {boolean} Whether the current page allows theme toggling. */
+ static isToggleable = this.#domTheme === null;
+
+ static eventId = 'theme-updated';
+
+ /** @returns {string} Resolved theme, falling back to the system preference. */
+ static get resolvedTheme() {
+ return this.#storedTheme || this.#systemTheme;
+ }
+
+ /** @returns {boolean} Whether the theme is determined by the system preference. */
+ static get isSystemTheme() {
+ return this.#storedTheme === null;
+ }
+
+ /** @returns {boolean} Whether the resolved theme is dark. */
+ static get isDark() {
+ return this.resolvedTheme === this.Mode.DARK;
+ }
+
+ /**
+ * Creates a mode-indexed value map.
+ *
+ * @template T
+ * @param {T} light Value for light mode.
+ * @param {T} dark Value for dark mode.
+ * @returns {{ light: T, dark: T }}
+ */
+ static newThemeMap(light, dark) {
+ return {
+ [this.Mode.LIGHT]: light,
+ [this.Mode.DARK]: dark
+ };
+ }
+
+ /** Initializes the theme from the stored value or system preference. */
+ static init() {
+ if (!this.isToggleable) {
+ this.#clearStorage();
+ return;
+ }
+
+ const storedTheme = this.#storedTheme;
+
+ if (storedTheme) {
+ this.#apply(storedTheme, { domPersist: true });
+ } else {
+ this.#apply(this.#systemTheme);
+ }
+
+ this.#mediaDark.addEventListener('change', () => {
+ if (this.#storedTheme) {
+ return;
+ }
+
+ this.#apply(this.#systemTheme);
+ this.#notify();
+ });
+ }
+
+ /**
+ * Updates the theme by the specified mode.
+ *
+ * @param {'light'|'dark'|'system'} mode
+ */
+ static update(mode) {
+ const newTheme = mode === this.Mode.SYSTEM ? this.#systemTheme : mode;
+
+ if (newTheme !== this.resolvedTheme) {
+ this.#notify();
+ }
+
+ this.#apply(newTheme, { persist: mode !== this.Mode.SYSTEM });
+
+ if (mode === this.Mode.SYSTEM) {
+ this.#clearStorage();
+ }
+ }
+}
+
+Theme.init();
+
+export default Theme;
diff --git a/_javascript/utils/category-collapse.js b/_javascript/utils/category-collapse.js
deleted file mode 100644
index 965bcfdc..00000000
--- a/_javascript/utils/category-collapse.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Tab 'Categories' expand/close effect.
- */
-
-$(function () {
- const childPrefix = "l_";
- const parentPrefix = "h_";
- const collapse = $(".collapse");
-
- /* close up top-category */
- collapse.on("hide.bs.collapse", function () { /* Bootstrap collapse events. */
- const parentId = parentPrefix + $(this).attr("id").substring(childPrefix.length);
- if (parentId) {
- $(`#${parentId} .far.fa-folder-open`).attr("class", "far fa-folder fa-fw");
- $(`#${parentId} i.fas`).addClass("rotate");
- $(`#${parentId}`).removeClass("hide-border-bottom");
- }
- });
-
- /* expand the top category */
- collapse.on("show.bs.collapse", function () {
- const parentId = parentPrefix + $(this).attr("id").substring(childPrefix.length);
- if (parentId) {
- $(`#${parentId} .far.fa-folder`).attr("class", "far fa-folder-open fa-fw");
- $(`#${parentId} i.fas`).removeClass("rotate");
- $(`#${parentId}`).addClass("hide-border-bottom");
- }
- });
-
-});
diff --git a/_javascript/utils/clipboard.js b/_javascript/utils/clipboard.js
deleted file mode 100644
index 1b5001b2..00000000
--- a/_javascript/utils/clipboard.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * Clipboard functions
- *
- * Dependencies:
- * - popper.js (https://github.com/popperjs/popper-core)
- * - clipboard.js (https://github.com/zenorocha/clipboard.js)
- */
-
-$(function () {
- const btnSelector = '.code-header>button';
- const ICON_SUCCESS = 'fas fa-check';
- const ATTR_TIMEOUT = 'timeout';
- const ATTR_TITLE_SUCCEED = 'data-title-succeed';
- const ATTR_TITLE_ORIGIN = 'data-original-title';
- const TIMEOUT = 2000; // in milliseconds
-
- function isLocked(node) {
- if ($(node)[0].hasAttribute(ATTR_TIMEOUT)) {
- let timeout = $(node).attr(ATTR_TIMEOUT);
- if (Number(timeout) > Date.now()) {
- return true;
- }
- }
- return false;
- }
-
- function lock(node) {
- $(node).attr(ATTR_TIMEOUT, Date.now() + TIMEOUT);
- }
-
- function unlock(node) {
- $(node).removeAttr(ATTR_TIMEOUT);
- }
-
- /* --- Copy code block --- */
-
- // Initial the clipboard.js object
- const clipboard = new ClipboardJS(btnSelector, {
- target(trigger) {
- let codeBlock = trigger.parentNode.nextElementSibling;
- return codeBlock.querySelector('code .rouge-code');
- }
- });
-
- $(btnSelector).tooltip({
- trigger: 'hover',
- placement: 'left'
- });
-
- function getIcon(btn) {
- let iconNode = $(btn).children();
- return iconNode.attr('class');
- }
-
- const ICON_DEFAULT = getIcon(btnSelector);
-
- function showTooltip(btn) {
- const succeedTitle = $(btn).attr(ATTR_TITLE_SUCCEED);
- $(btn).attr(ATTR_TITLE_ORIGIN, succeedTitle).tooltip('show');
- }
-
- function hideTooltip(btn) {
- $(btn).tooltip('hide').removeAttr(ATTR_TITLE_ORIGIN);
- }
-
- function setSuccessIcon(btn) {
- let btnNode = $(btn);
- let iconNode = btnNode.children();
- iconNode.attr('class', ICON_SUCCESS);
- }
-
- function resumeIcon(btn) {
- let btnNode = $(btn);
- let iconNode = btnNode.children();
- iconNode.attr('class', ICON_DEFAULT);
- }
-
- clipboard.on('success', (e) => {
- e.clearSelection();
-
- const trigger = e.trigger;
- if (isLocked(trigger)) {
- return;
- }
-
- setSuccessIcon(trigger);
- showTooltip(trigger);
- lock(trigger);
-
- setTimeout(() => {
- hideTooltip(trigger);
- resumeIcon(trigger);
- unlock(trigger);
- }, TIMEOUT);
-
- });
-
- /* --- Post link sharing --- */
-
- $('#copy-link').click((e) => {
-
- let target = $(e.target);
-
- if (isLocked(target)) {
- return;
- }
-
- // Copy URL to clipboard
-
- const url = window.location.href;
- const $temp = $("");
-
- $("body").append($temp);
- $temp.val(url).select();
- document.execCommand("copy");
- $temp.remove();
-
- // Switch tooltip title
-
- const defaultTitle = target.attr(ATTR_TITLE_ORIGIN);
- const succeedTitle = target.attr(ATTR_TITLE_SUCCEED);
-
- target.attr(ATTR_TITLE_ORIGIN, succeedTitle).tooltip('show');
- lock(target);
-
- setTimeout(() => {
- target.attr(ATTR_TITLE_ORIGIN, defaultTitle);
- unlock(target);
- }, TIMEOUT);
-
- });
-
-});
diff --git a/_javascript/utils/img-extra.js b/_javascript/utils/img-extra.js
deleted file mode 100644
index e371244d..00000000
--- a/_javascript/utils/img-extra.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- Set up image popup stuff (https://github.com/dimsemenov/Magnific-Popup)
- */
-
-$(function () {
- const IMG_SCOPE = '#main > div.row:first-child > div:first-child';
-
- if ($(`${IMG_SCOPE} img`).length <= 0) {
- return;
- }
-
- /* popup */
-
- $(`${IMG_SCOPE} p > img[data-src], ${IMG_SCOPE} img[data-src].preview-img`).each(
- function () {
- let nextTag = $(this).next();
- const title = nextTag.prop('tagName') === 'EM' ? nextTag.text() : '';
- const src = $(this).attr('data-src'); // created by lozad.js
-
- $(this).wrap(``);
- }
- );
-
- $('.popup').magnificPopup({
- type: 'image',
- closeOnContentClick: true,
- showCloseBtn: false,
- zoom: {
- enabled: true,
- duration: 300,
- easing: 'ease-in-out'
- }
- });
-
- /* markup the image links */
-
- $(`${IMG_SCOPE} a`).has('img').addClass('img-link');
-
-});
diff --git a/_javascript/utils/locale-datetime.js b/_javascript/utils/locale-datetime.js
deleted file mode 100644
index 80d86c98..00000000
--- a/_javascript/utils/locale-datetime.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Update month/day to locale datetime
- *
- * Requirement:
- */
-
-/* A tool for locale datetime */
-const LocaleHelper = (function () {
- const locale = $('html').attr('lang').substr(0, 2);
- const attrTimestamp = 'data-ts';
- const attrDateFormat = 'data-df';
-
- return {
- locale: () => locale,
- attrTimestamp: () => attrTimestamp,
- attrDateFormat: () => attrDateFormat,
- getTimestamp: ($elem) => Number($elem.attr(attrTimestamp)), // unix timestamp
- getDateFormat: ($elem) => $elem.attr(attrDateFormat)
- };
-
-}());
-
-$(function () {
- dayjs.locale(LocaleHelper.locale());
- dayjs.extend(window.dayjs_plugin_localizedFormat);
-
- $(`[${LocaleHelper.attrTimestamp()}]`).each(function () {
- const date = dayjs.unix(LocaleHelper.getTimestamp($(this)));
- const text = date.format(LocaleHelper.getDateFormat($(this)));
- $(this).text(text);
- $(this).removeAttr(LocaleHelper.attrTimestamp());
- $(this).removeAttr(LocaleHelper.attrDateFormat());
-
- // setup tooltips
- const tooltip = $(this).attr('data-toggle');
- if (typeof tooltip === 'undefined' || tooltip !== 'tooltip') {
- return;
- }
-
- const tooltipText = date.format('llll'); // see: https://day.js.org/docs/en/display/format#list-of-localized-formats
- $(this).attr('data-original-title', tooltipText);
- });
-});
diff --git a/_javascript/utils/pageviews.js b/_javascript/utils/pageviews.js
deleted file mode 100644
index 1e875d81..00000000
--- a/_javascript/utils/pageviews.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/**
- * Count page views form GA or local cache file.
- *
- * Dependencies:
- * - jQuery
- * - countUp.js
- */
-
-const getInitStatus = (function () {
- let hasInit = false;
- return () => {
- let ret = hasInit;
- if (!hasInit) {
- hasInit = true;
- }
- return ret;
- };
-}());
-
-const PvOpts = (function () {
- function getContent(selector) {
- return $(selector).attr("content");
- }
-
- function hasContent(selector) {
- let content = getContent(selector);
- return (typeof content !== "undefined" && content !== false);
- }
-
- return {
- getProxyMeta() {
- return getContent("meta[name=pv-proxy-endpoint]");
- },
- getLocalMeta() {
- return getContent("meta[name=pv-cache-path]");
- },
- hasProxyMeta() {
- return hasContent("meta[name=pv-proxy-endpoint]");
- },
- hasLocalMeta() {
- return hasContent("meta[name=pv-cache-path]");
- }
- };
-
-}());
-
-const PvStorage = (function () {
- const Keys = {
- KEY_PV: "pv",
- KEY_PV_SRC: "pv_src",
- KEY_CREATION: "pv_created_date"
- };
-
- const Source = {
- LOCAL: "same-origin",
- PROXY: "cors"
- };
-
- function get(key) {
- return localStorage.getItem(key);
- }
-
- function set(key, val) {
- localStorage.setItem(key, val);
- }
-
- function saveCache(pv, src) {
- set(Keys.KEY_PV, pv);
- set(Keys.KEY_PV_SRC, src);
- set(Keys.KEY_CREATION, new Date().toJSON());
- }
-
- return {
- keysCount() {
- return Object.keys(Keys).length;
- },
- hasCache() {
- return (localStorage.getItem(Keys.KEY_PV) !== null);
- },
- getCache() {
- return JSON.parse(localStorage.getItem(Keys.KEY_PV));
- },
- saveLocalCache(pv) {
- saveCache(pv, Source.LOCAL);
- },
- saveProxyCache(pv) {
- saveCache(pv, Source.PROXY);
- },
- isExpired() {
- let date = new Date(get(Keys.KEY_CREATION));
- date.setHours(date.getHours() + 1); // per hour
- return Date.now() >= date.getTime();
- },
- isFromLocal() {
- return get(Keys.KEY_PV_SRC) === Source.LOCAL;
- },
- isFromProxy() {
- return get(Keys.KEY_PV_SRC) === Source.PROXY;
- },
- newerThan(pv) {
- return PvStorage.getCache().totalsForAllResults["ga:pageviews"] > pv.totalsForAllResults["ga:pageviews"];
- },
- inspectKeys() {
- if (localStorage.length !== PvStorage.keysCount()) {
- localStorage.clear();
- return;
- }
-
- for (let i = 0; i < localStorage.length; i++) {
- const key = localStorage.key(i);
- switch (key) {
- case Keys.KEY_PV:
- case Keys.KEY_PV_SRC:
- case Keys.KEY_CREATION:
- break;
- default:
- localStorage.clear();
- return;
- }
- }
- }
- };
-}()); /* PvStorage */
-
-function countUp(min, max, destId) {
- if (min < max) {
- let numAnim = new CountUp(destId, min, max);
- if (!numAnim.error) {
- numAnim.start();
- } else {
- console.error(numAnim.error);
- }
- }
-}
-
-function countPV(path, rows) {
- let count = 0;
-
- if (typeof rows !== "undefined") {
- for (let i = 0; i < rows.length; ++i) {
- const gaPath = rows[parseInt(i, 10)][0];
- if (gaPath === path) { /* path format see: site.permalink */
- count += parseInt(rows[parseInt(i, 10)][1], 10);
- break;
- }
- }
- }
-
- return count;
-}
-
-function tacklePV(rows, path, elem, hasInit) {
- let count = countPV(path, rows);
- count = (count === 0 ? 1 : count);
-
- if (!hasInit) {
- elem.text(new Intl.NumberFormat().format(count));
- } else {
- const initCount = parseInt(elem.text().replace(/,/g, ""), 10);
- if (count > initCount) {
- countUp(initCount, count, elem.attr("id"));
- }
- }
-}
-
-function displayPageviews(data) {
- if (typeof data === "undefined") {
- return;
- }
-
- let hasInit = getInitStatus();
- const rows = data.rows; /* could be undefined */
-
- if ($("#post-list").length > 0) { /* the Home page */
- $(".post-preview").each(function () {
- const path = $(this).find("a").attr("href");
- tacklePV(rows, path, $(this).find(".pageviews"), hasInit);
- });
-
- } else if ($(".post").length > 0) { /* the post */
- const path = window.location.pathname;
- tacklePV(rows, path, $("#pv"), hasInit);
- }
-}
-
-function fetchProxyPageviews() {
- if (PvOpts.hasProxyMeta()) {
- $.ajax({
- type: "GET",
- url: PvOpts.getProxyMeta(),
- dataType: "jsonp",
- jsonpCallback: "displayPageviews",
- success: (data) => {
- PvStorage.saveProxyCache(JSON.stringify(data));
- },
- error: (jqXHR, textStatus, errorThrown) => {
- console.log("Failed to load pageviews from proxy server: " + errorThrown);
- }
- });
- }
-}
-
-function fetchLocalPageviews(hasCache = false) {
- return fetch(PvOpts.getLocalMeta())
- .then(response => response.json())
- .then(data => {
- if (hasCache) {
- // The cache from the proxy will sometimes be more recent than the local one
- if (PvStorage.isFromProxy() && PvStorage.newerThan(data)) {
- return;
- }
- }
- displayPageviews(data);
- PvStorage.saveLocalCache(JSON.stringify(data));
- });
-}
-
-$(function () {
- if ($(".pageviews").length <= 0) {
- return;
- }
-
- PvStorage.inspectKeys();
-
- if (PvStorage.hasCache()) {
- displayPageviews(PvStorage.getCache());
-
- if (PvStorage.isExpired()) {
- if (PvOpts.hasLocalMeta()) {
- fetchLocalPageviews(true).then(fetchProxyPageviews);
- } else {
- fetchProxyPageviews();
- }
-
- } else {
- if (PvStorage.isFromLocal()) {
- fetchProxyPageviews();
- }
- }
-
- } else { // no cached
-
- if (PvOpts.hasLocalMeta()) {
- fetchLocalPageviews().then(fetchProxyPageviews);
- } else {
- fetchProxyPageviews();
- }
- }
-
-});
diff --git a/_javascript/utils/smooth-scroll.js b/_javascript/utils/smooth-scroll.js
deleted file mode 100644
index f8aba660..00000000
--- a/_javascript/utils/smooth-scroll.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- Safari doesn't support CSS `scroll-behavior: smooth`,
- so here is a compatible solution for all browser to smooth scrolling
-
- See:
-
- Warning: It must be called after all `` tags (e.g., the dynamic TOC) are ready.
- */
-
-$(function () {
- const $topbarTitle = $("#topbar-title");
- const REM = 16; // in pixels
- const ATTR_SCROLL_FOCUS = "scroll-focus";
-
- $("a[href*='#']")
- .not("[href='#']")
- .not("[href='#0']")
- .click(function (event) {
- if (this.pathname.replace(/^\//, "") !==
- location.pathname.replace(/^\//, "")) {
- return;
- }
-
- if (location.hostname !== this.hostname) {
- return;
- }
-
- const hash = decodeURI(this.hash);
- let toFootnoteRef = RegExp(/^#fnref:/).test(hash);
- let toFootnote = toFootnoteRef ? false : RegExp(/^#fn:/).test(hash);
- let selector = hash.includes(":") ? hash.replace(/:/g, "\\:") : hash;
- let $target = $(selector);
-
- let isMobileViews = $topbarTitle.is(":visible");
- let isPortrait = $(window).width() < $(window).height();
-
- if (typeof $target === "undefined") {
- return;
- }
-
- event.preventDefault();
-
- if (history.pushState) { /* add hash to URL */
- history.pushState(null, null, hash);
- }
-
- let curOffset = $(window).scrollTop();
- let destOffset = $target.offset().top -= REM / 2;
-
- if (destOffset < curOffset) { // scroll up
- ScrollHelper.hideTopbar();
- ScrollHelper.addScrollUpTask();
-
- if (isMobileViews && isPortrait) {
- destOffset -= ScrollHelper.getTopbarHeight();
- }
-
- } else { // scroll down
- if (isMobileViews && isPortrait) {
- destOffset -= ScrollHelper.getTopbarHeight();
- }
- }
-
- $("html").animate({
- scrollTop: destOffset
- }, 500, () => {
- $target.focus();
-
- /* clean up old scroll mark */
- if ($(`[${ATTR_SCROLL_FOCUS}=true]`).length) {
- $(`[${ATTR_SCROLL_FOCUS}=true]`).attr(ATTR_SCROLL_FOCUS, false);
- }
-
- /* Clean :target links */
- if ($(":target").length) { /* element that visited by the URL with hash */
- $(":target").attr(ATTR_SCROLL_FOCUS, false);
- }
-
- /* set scroll mark to footnotes */
- if (toFootnote || toFootnoteRef) {
- $target.attr(ATTR_SCROLL_FOCUS, true);
- }
-
- if ($target.is(":focus")) { /* Checking if the target was focused */
- return false;
- } else {
- $target.attr("tabindex", "-1"); /* Adding tabindex for elements not focusable */
- $target.focus(); /* Set focus again */
- }
-
- if (ScrollHelper.hasScrollUpTask()) {
- ScrollHelper.popScrollUpTask();
- }
- });
- }); /* click() */
-});
diff --git a/_layouts/archives.html b/_layouts/archives.html
index f86b4178..4f7ad7df 100644
--- a/_layouts/archives.html
+++ b/_layouts/archives.html
@@ -3,32 +3,33 @@
# The Archives of posts.
---
-{% assign df_strftime_m = site.data.locales[site.lang].df.archives.strftime | default: '/ %m' %}
-{% assign df_dayjs_m = site.data.locales[site.lang].df.archives.dayjs | default: '/ MM' %}
+{% include lang.html %}
-
+{% assign df_strftime_m = site.data.locales[lang].df.archives.strftime | default: '/ %m' %}
+{% assign df_dayjs_m = site.data.locales[lang].df.archives.dayjs | default: '/ MM' %}
-{% for post in site.posts %}
- {% capture cur_year %}{{ post.date | date: "%Y" }}{% endcapture %}
+
+ {% for post in site.posts %}
+ {% assign cur_year = post.date | date: '%Y' %}
- {% if cur_year != last_year %}
- {% unless forloop.first %}{% endunless %}
- {{ cur_year }}
-
- {% assign last_year = cur_year %}
- {% endif %}
+ {% if cur_year != last_year %}
+ {% unless forloop.first %}
{% endunless %}
-
- {% assign ts = post.date | date: '%s' %}
- {{ post.date | date: "%d" }}
-
- {{ post.date | date: df_strftime_m }}
-
- {{ post.title }}
-
+
+ {{ '' }}
- {% if forloop.last %}
{% endif %}
+ {% assign last_year = cur_year %}
+ {% endif %}
-{% endfor %}
+
+ {% assign ts = post.date | date: '%s' %}
+ {{ post.date | date: '%d' }}
+
+ {{ post.date | date: df_strftime_m }}
+
+ {{ post.title }}
+
+ {% if forloop.last %}{% endif %}
+ {% endfor %}
diff --git a/_layouts/categories.html b/_layouts/categories.html
index b207186d..05150970 100644
--- a/_layouts/categories.html
+++ b/_layouts/categories.html
@@ -3,8 +3,10 @@
# All the Categories of posts
---
-{% assign HEAD_PREFIX = "h_" %}
-{% assign LIST_PREFIX = "l_" %}
+{% include lang.html %}
+
+{% assign HEAD_PREFIX = 'h_' %}
+{% assign LIST_PREFIX = 'l_' %}
{% assign group_index = 0 %}
@@ -16,7 +18,7 @@
{% assign first_post = posts_of_category | first %}
{% if category_name == first_post.categories[0] %}
- {% assign sub_categories = "" | split: "" %}
+ {% assign sub_categories = '' | split: '' %}
{% for post in posts_of_category %}
{% assign second_category = post.categories[1] %}
@@ -30,89 +32,107 @@
{% assign sub_categories = sub_categories | sort %}
{% assign sub_categories_size = sub_categories | size %}
-
-
-
-
-
-
- {% capture _category_url %}/categories/{{ category_name | slugify | url_encode }}/{% endcapture %}
- {{ category_name }}
-
-
- {% assign top_posts_size = site.categories[category_name] | size %}
-
- {% if sub_categories_size > 0 %}
- {{ sub_categories_size }}
- {% if sub_categories_size > 1 %}
- {{ site.data.locales[site.lang].categories.category_measure.plural
- | default: site.data.locales[site.lang].categories.category_measure }}
- {% else %}
- {{ site.data.locales[site.lang].categories.category_measure.singular
- | default: site.data.locales[site.lang].categories.category_measure }}
- {% endif %},
- {% endif %}
-
- {{ top_posts_size }}
-
- {% if top_posts_size > 1 %}
- {{ site.data.locales[site.lang].categories.post_measure.plural
- | default: site.data.locales[site.lang].categories.post_measure }}
- {% else %}
- {{ site.data.locales[site.lang].categories.post_measure.singular
- | default: site.data.locales[site.lang].categories.post_measure }}
- {% endif %}
-
-
-
-
- {% if sub_categories_size > 0%}
-
-
-
- {% else %}
-
-
-
- {% endif %}
+
+
+
+
+
-
+ {% capture _category_url %}/categories/{{ category_name | slugify | url_encode }}/{% endcapture %}
+ {{ category_name }}
-
- {% if sub_categories_size > 0 %}
-
-
- {% for sub_category in sub_categories %}
- -
-
-
- {% capture _sub_ctg_url %}/categories/{{ sub_category | slugify | url_encode }}/{% endcapture %}
- {{ sub_category }}
-
- {% assign posts_size = site.categories[sub_category] | size %}
+
+ {% assign top_posts_size = site.categories[category_name] | size %}
- {{ posts_size }}
+ {% if sub_categories_size > 0 %}
+ {{ sub_categories_size }}
+ {% if sub_categories_size > 1 %}
+ {{
+ site.data.locales[lang].categories.category_measure.plural
+ | default: site.data.locales[lang].categories.category_measure
+ }}
+ {% else %}
+ {{
+ site.data.locales[lang].categories.category_measure.singular
+ | default: site.data.locales[lang].categories.category_measure
+ }}
+ {% endif -%}
+ ,
+ {% endif %}
- {% if posts_size > 1 %}
- {{ site.data.locales[site.lang].categories.post_measure.plural
- | default: site.data.locales[site.lang].categories.post_measure }}
+ {{ top_posts_size }}
+
+ {% if top_posts_size > 1 %}
+ {{
+ site.data.locales[lang].categories.post_measure.plural
+ | default: site.data.locales[lang].categories.post_measure
+ }}
{% else %}
- {{ site.data.locales[site.lang].categories.post_measure.singular
- | default: site.data.locales[site.lang].categories.post_measure }}
+ {{
+ site.data.locales[lang].categories.post_measure.singular
+ | default: site.data.locales[lang].categories.post_measure
+ }}
{% endif %}
-
- {% endfor %}
-
-
- {% endif %}
+
-
+
+ {% if sub_categories_size > 0 %}
+
+
+
+ {% else %}
+
+
+
+ {% endif %}
+
+
+
+
+ {% if sub_categories_size > 0 %}
+
+
+ {% for sub_category in sub_categories %}
+ -
+
+
+ {% capture _sub_ctg_url %}/categories/{{ sub_category | slugify | url_encode }}/{% endcapture %}
+ {{ sub_category }}
+
+ {% assign posts_size = site.categories[sub_category] | size %}
+
+ {{ posts_size }}
+
+ {% if posts_size > 1 %}
+ {{
+ site.data.locales[lang].categories.post_measure.plural
+ | default: site.data.locales[lang].categories.post_measure
+ }}
+ {% else %}
+ {{
+ site.data.locales[lang].categories.post_measure.singular
+ | default: site.data.locales[lang].categories.post_measure
+ }}
+ {% endif %}
+
+
+ {% endfor %}
+
+
+ {% endif %}
+
+
{% assign group_index = group_index | plus: 1 %}
-
{% endif %}
{% endfor %}
diff --git a/_layouts/category.html b/_layouts/category.html
index 07129bb0..b064f27c 100644
--- a/_layouts/category.html
+++ b/_layouts/category.html
@@ -3,20 +3,22 @@
# The Category layout
---
+{% include lang.html %}
+
-
+
{{ page.title }}
- {{ page.posts | size }}
+ {{ page.posts | size }}
-
+
{% for post in page.posts %}
- -
- {{ post.title }}
-
- {% include datetime.html date=post.date wrap='span' class='text-muted small' %}
-
+ -
+ {{ post.title }}
+
+ {% include datetime.html date=post.date class='text-muted small text-nowrap' lang=lang %}
+
{% endfor %}
diff --git a/_layouts/compress.html b/_layouts/compress.html
index bb34487d..2779e92a 100644
--- a/_layouts/compress.html
+++ b/_layouts/compress.html
@@ -1,10 +1,10 @@
---
# Jekyll layout that compresses HTML
-# v3.1.0
+# v3.2.0
# http://jch.penibelst.de/
# © 2014–2015 Anatol Broder
# MIT License
---
{% capture _LINE_FEED %}
-{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ; ; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} Step Bytes raw {{ content | size }}{% if _profile_endings %} endings {{ _profile_endings }}{% endif %}{% if _profile_startings %} startings {{ _profile_startings }}{% endif %}{% if _profile_comments %} comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %} collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %} clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %}
+{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" or page.compress_html == false %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ; ; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} Step Bytes raw {{ content | size }}{% if _profile_endings %} endings {{ _profile_endings }}{% endif %}{% if _profile_startings %} startings {{ _profile_startings }}{% endif %}{% if _profile_comments %} comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %} collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %} clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %}
diff --git a/_layouts/default.html b/_layouts/default.html
index 6d1b0a52..704bebae 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -1,71 +1,87 @@
---
layout: compress
-# Default layout
---
-
+
-{% include assets-origin.html %}
+{% include origin-type.html %}
-{% capture prefer_mode %}
- {% if site.theme_mode %}
- data-mode="{{ site.theme_mode }}"
- {% endif %}
-{% endcapture %}
+{% include lang.html %}
-
+
+ {% include head.html lang=lang %}
- {% include head.html %}
-
-
-
- {% include sidebar.html %}
-
- {% include topbar.html %}
+
+ {% include sidebar.html lang=lang %}
-
- {{ content }}
-
-
- {% include search-results.html %}
+
+ {% include topbar.html lang=lang %}
+
+
+
+ {% if layout.layout == 'default' %}
+ {% include refactor-content.html content=content lang=lang %}
+ {% else %}
+ {{ content }}
+ {% endif %}
+
+
+
+
+
-
+
+
+
+ {% for _include in layout.tail_includes %}
+ {% assign _include_path = _include | append: '.html' %}
+ {% include {{ _include_path }} lang=lang %}
+ {% endfor %}
- {% include footer.html %}
+ {% include_cached footer.html lang=lang %}
+
+
- {% if page.mermaid %}
- {% include mermaid.html %}
- {% endif %}
+ {% include_cached search-results.html lang=lang %}
+
-
+
+
-
-
-
+
{% if site.pwa.enabled %}
-
-
-
-
-
- {{ site.data.locales[site.lang].notification.update_found }}
-
-
-
+ {% include_cached notification.html lang=lang %}
{% endif %}
- {% include search-loader.html %}
+
- {% include js-selector.html %}
+ {% for _include in layout.script_includes %}
+ {% assign _include_path = _include | append: '.html' %}
+ {% include {{ _include_path }} %}
+ {% endfor %}
+ {% include_cached search-loader.html lang=lang %}
-
diff --git a/_layouts/home.html b/_layouts/home.html
index ad5328d6..0161ad8f 100644
--- a/_layouts/home.html
+++ b/_layouts/home.html
@@ -1,99 +1,140 @@
---
-layout: page
-# The Home page layout
+layout: default
---
-{% assign pinned = site.posts | where: "pin", "true" %}
-{% assign default = site.posts | where_exp: "item", "item.pin != true and item.hidden != true" %}
+{% include lang.html %}
-{% assign posts = "" | split: "" %}
+{% assign all_pinned = site.posts | where: 'pin', 'true' %}
+{% assign all_normal = site.posts | where_exp: 'item', 'item.pin != true and item.hidden != true' %}
-
+{% assign posts = '' | split: '' %}
-{% assign offset = paginator.page | minus: 1 | times: paginator.per_page %}
-{% assign pinned_num = pinned.size | minus: offset %}
+
-{% if pinned_num > 0 %}
- {% for i in (offset..pinned.size) limit: pinned_num %}
- {% assign posts = posts | push: pinned[i] %}
+{% assign visible_start = paginator.page | minus: 1 | times: paginator.per_page %}
+{% assign visible_end = visible_start | plus: paginator.per_page %}
+
+{% if all_pinned.size > visible_start %}
+ {% if all_pinned.size > visible_end %}
+ {% assign pinned_size = paginator.per_page %}
+ {% else %}
+ {% assign pinned_size = all_pinned.size | minus: visible_start %}
+ {% endif %}
+
+ {% for i in (visible_start..all_pinned.size) limit: pinned_size %}
+ {% assign posts = posts | push: all_pinned[i] %}
{% endfor %}
{% else %}
- {% assign pinned_num = 0 %}
+ {% assign pinned_size = 0 %}
{% endif %}
-
+
-{% assign default_beg = offset | minus: pinned.size %}
+{% assign normal_size = paginator.posts | size | minus: pinned_size %}
-{% if default_beg < 0 %}
- {% assign default_beg = 0 %}
-{% endif %}
+{% if normal_size > 0 %}
+ {% if pinned_size > 0 %}
+ {% assign normal_start = 0 %}
+ {% else %}
+ {% assign normal_start = visible_start | minus: all_pinned.size %}
+ {% endif %}
-{% assign default_num = paginator.posts | size | minus: pinned_num %}
-{% assign default_end = default_beg | plus: default_num | minus: 1 %}
+ {% assign normal_end = normal_start | plus: normal_size | minus: 1 %}
-{% if default_num > 0 %}
- {% for i in (default_beg..default_end) %}
- {% assign posts = posts | push: default[i] %}
+ {% for i in (normal_start..normal_end) %}
+ {% assign posts = posts | push: all_normal[i] %}
{% endfor %}
{% endif %}
-
+
-{% if paginator.total_pages > 0 %}
+{% if paginator.total_pages > 1 %}
{% include post-paginator.html %}
{% endif %}
diff --git a/_layouts/page.html b/_layouts/page.html
index 4285c858..32d6582a 100644
--- a/_layouts/page.html
+++ b/_layouts/page.html
@@ -2,62 +2,19 @@
layout: default
---
-{% include assets-origin.html %}
-
-
-
-
-
-
-
- {% capture _content %}
- {% if layout.refactor or page.layout == 'page' %}
- {% include refactor-content.html content=content %}
- {% else %}
- {{ content }}
- {% endif %}
- {% endcapture %}
-
- {% if page.layout == 'page' or page.collection == 'tabs' %}
- {% assign tab_key = page.title | downcase %}
- {% assign title = site.data.locales[site.lang].tabs[tab_key] | default: page.title %}
-
- {{ title }}
-
-
- {{ _content }}
-
- {% else %}
- {{ _content }}
- {% endif %}
-
+{% include lang.html %}
+
+
+ {% if page.layout == 'page' or page.collection == 'tabs' %}
+ {% assign tab_key = page.title | downcase %}
+ {% assign title = site.data.locales[lang].tabs[tab_key] | default: page.title %}
+
+ {{ title }}
+
+
+ {{ content }}
-
-
-
-
-
-
- {% include update-list.html %}
- {% include trending-tags.html %}
-
-
- {% for _include in layout.panel_includes %}
- {% assign _include_path = _include | append: '.html' %}
- {% include {{ _include_path }} %}
- {% endfor %}
-
-
-
-
-
-{% if layout.tail_includes %}
-
-
- {% for _include in layout.tail_includes %}
- {% assign _include_path = _include | append: '.html' %}
- {% include {{ _include_path }} %}
- {% endfor %}
-
-
-{% endif %}
+ {% else %}
+ {{ content }}
+ {% endif %}
+
diff --git a/_layouts/post.html b/_layouts/post.html
index 2e02bfa9..7eab3d45 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -1,154 +1,183 @@
---
-layout: page
-refactor: true
+layout: default
panel_includes:
- toc
tail_includes:
+ - fediverse-comments
- related-posts
- post-nav
- - comments
+script_includes:
+ - comment
+ - legacy-lightbox
---
-{{ page.title }}
-
-
-
-
- {{ site.data.locales[site.lang].post.posted }}
- {% include datetime.html date=page.date tooltip=true %}
-
-
-
- {% if page.last_modified_at %}
-
- {{ site.data.locales[site.lang].post.updated }}
- {% include datetime.html date=page.last_modified_at tooltip=true %}
-
- {% endif %}
-
- {% if page.image %}
- {% capture bg %}
- {% unless page.image.no_bg %}{{ 'bg' }}{% endunless %}
- {% endcapture %}
-
-
-
-
- {% if page.image.alt %}
- {{ page.image.alt }}
- {% endif %}
-
-
- {% endif %}
+{% include toc-status.html %}
-
-
-
- {% if page.author %}
- {% assign authors = page.author %}
- {% elsif page.authors %}
- {% assign authors = page.authors %}
- {% endif %}
+
+
+ {{ page.title }}
+ {% if page.description %}
+ {{ page.description }}
+ {% endif %}
- {{ site.data.locales[site.lang].post.written_by }}
+
+
+
+ {{ site.data.locales[lang].post.posted }}
+ {% include datetime.html date=page.date tooltip=true lang=lang %}
+
-
- {% if authors %}
- {% for author in authors %}
- {{ site.data.authors[author].name }}
- {% unless forloop.last %}, {% endunless %}
- {% endfor %}
- {% else %}
- {{ site.social.name }}
+
+ {% if page.last_modified_at and page.last_modified_at != page.date %}
+
+ {{ site.data.locales[lang].post.updated }}
+ {% include datetime.html date=page.last_modified_at tooltip=true lang=lang %}
+
{% endif %}
-
-
-
-
- {% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
-
-
-
-
- {{ site.data.locales[site.lang].post.pageview_measure }}
-
+ {% if page.image %}
+ {% capture src %}src="{{ page.image.path | default: page.image }}"{% endcapture %}
+ {% capture class %}class="preview-img{% if page.image.no_bg %}{{ ' no-bg' }}{% endif %}"{% endcapture %}
+ {% capture alt %}alt="{{ page.image.alt | xml_escape | default: "Preview Image" }}"{% endcapture %}
+
+ {% if page.image.lqip %}
+ {%- capture lqip -%}lqip="{{ page.image.lqip }}"{%- endcapture -%}
+ {% endif %}
+
+
+
+ {%- if page.image.alt -%}
+ {{ page.image.alt }}
+ {%- endif -%}
+
{% endif %}
-
- {% include read-time.html content=content prompt=true %}
+
+
+
+ {% if page.author %}
+ {% assign authors = page.author %}
+ {% elsif page.authors %}
+ {% assign authors = page.authors %}
+ {% endif %}
+
+ {{ site.data.locales[lang].post.written_by }}
+
+
+ {% if authors %}
+ {% for author in authors %}
+ {% if site.data.authors[author].url -%}
+ {{ site.data.authors[author].name }}
+ {%- else -%}
+ {{ site.data.authors[author].name }}
+ {%- endif %}
+ {% unless forloop.last %}{{ ', ' }}{% endunless %}
+ {% endfor %}
+ {% else %}
+ {{ site.social.name }}
+ {% endif %}
+
+
+
+
+
+ {% if site.pageviews.provider and site.analytics[site.pageviews.provider].id %}
+
+
+
+
+ {{ site.data.locales[lang].post.pageview_measure }}
+
+ {% endif %}
+
+
+ {% include read-time.html content=content prompt=true lang=lang %}
+
+
+
+
+
+ {% if enable_toc %}
+
+ {{ page.title }}
+
-
-
-
-
-
- {{ content }}
-
-
-
-
-
- {% if page.categories.size > 0 %}
-
-
- {% for category in page.categories %}
- {{ category }}
- {%- unless forloop.last -%}, {%- endunless -%}
- {% endfor %}
-
+
+
+
{% endif %}
-
- {% if page.tags.size > 0 %}
-
-
- {% for tag in page.tags %}
-
- {{- tag -}}
-
- {% endfor %}
+
+ {{ content }}
- {% endif %}
-
-
+
+
+
+ {% if page.categories.size > 0 %}
+
+
+ {% for category in page.categories %}
+ {{ category }}
+ {%- unless forloop.last -%},{%- endunless -%}
+ {% endfor %}
+
+ {% endif %}
+
+
+ {% include post-edit.html lang=lang %}
+
- {% if site.data.locales[site.lang].copyright.license.template %}
+
+ {% if page.tags.size > 0 %}
+
+
+ {% for tag in page.tags %}
+
+ {{- tag -}}
+
+ {% endfor %}
+
+ {% endif %}
- {% capture _replacement %}
-
- {{ site.data.locales[site.lang].copyright.license.name }}
+
+
+ {% if site.data.locales[lang].copyright.license.template %}
+ {% capture _replacement %}
+
+ {{ site.data.locales[lang].copyright.license.name }}
{% endcapture %}
- {{ site.data.locales[site.lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }}
+ {{ site.data.locales[lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }}
+ {% endif %}
+
- {% endif %}
+ {% include post-sharing.html lang=lang %}
-
- {% include post-sharing.html %}
-
-
-
- {% if page.comments.id %}
- {% include fediverse_comments.html %}
- {% endif %}
-
-
+
+
+
+
diff --git a/_layouts/tag.html b/_layouts/tag.html
index 5fd528f5..d766d099 100644
--- a/_layouts/tag.html
+++ b/_layouts/tag.html
@@ -3,19 +3,21 @@
# The layout for Tag page
---
+{% include lang.html %}
+
-
+
{{ page.title }}
- {{ page.posts | size }}
+ {{ page.posts | size }}
-
+
{% for post in page.posts %}
- -
- {{ post.title }}
-
- {% include datetime.html date=post.date wrap='span' class='text-muted small' %}
-
+ -
+ {{ post.title }}
+
+ {% include datetime.html date=post.date class='text-muted small text-nowrap' lang=lang %}
+
{% endfor %}
diff --git a/_layouts/tags.html b/_layouts/tags.html
index b3321f7f..7800ca0f 100644
--- a/_layouts/tags.html
+++ b/_layouts/tags.html
@@ -3,9 +3,8 @@
# All the Tags of posts.
---
-
-
- {% assign tags = "" | split: "" %}
+
+ {% assign tags = '' | split: '' %}
{% for t in site.tags %}
{% assign tags = tags | push: t[0] %}
{% endfor %}
@@ -15,9 +14,9 @@
{% for t in sorted_tags %}
{% endfor %}
-
diff --git a/_posts/2020-7-23-org-in-a-box-architecture.md b/_posts/2020-7-23-org-in-a-box-architecture.md
index bdd5303d..2a427ed3 100644
--- a/_posts/2020-7-23-org-in-a-box-architecture.md
+++ b/_posts/2020-7-23-org-in-a-box-architecture.md
@@ -12,7 +12,7 @@ canon: https://blog.quantumlyconfused.com/org-in-a-box/2020/07/23/org-in-a-
tags:
- org-in-a-box
- architecture
- - IAM
+ - iam
- raspberry pi
- project
---
diff --git a/_posts/2022-5-8-qiskit-first-contribution.md b/_posts/2022-5-8-qiskit-first-contribution.md
index 626cfa21..aad37fed 100644
--- a/_posts/2022-5-8-qiskit-first-contribution.md
+++ b/_posts/2022-5-8-qiskit-first-contribution.md
@@ -11,7 +11,7 @@ keywords: quantum computing,qiskit,quantum,python,ibm,pennylane,qubits,quantum
thumbnail: https://blog.quantumlyconfused.com/assets/quantum-computing/qiskit-open-source/logo.png
canon: https://blog.quantumlyconfused.com/quantum-computing/2022/05/08/qiskit-first-contribution/
tags:
- - quantum computing
+ - quantum-computing
- qiskit
- open source
- github
diff --git a/_sass/abstracts/_breakpoints.scss b/_sass/abstracts/_breakpoints.scss
new file mode 100644
index 00000000..e40cefee
--- /dev/null
+++ b/_sass/abstracts/_breakpoints.scss
@@ -0,0 +1,73 @@
+@use 'sass:map';
+
+$-breakpoints: (
+ // 1 column
+ sm: 576px,
+ md: 768px,
+ // 2 columns
+ lg: 850px,
+ // 3 columns
+ xl: 1200px,
+ xxl: 1400px,
+ xxxl: 1650px
+);
+
+@function get($breakpoint) {
+ @return map.get($-breakpoints, $breakpoint);
+}
+
+/* Less than the given width */
+@mixin lt($width) {
+ @media all and (max-width: calc(#{$width} - 1px)) {
+ @content;
+ }
+}
+
+/* Less than or equal to the given width */
+@mixin lte($width) {
+ @media all and (max-width: $width) {
+ @content;
+ }
+}
+
+@mixin sm {
+ @media all and (min-width: get(sm)) {
+ @content;
+ }
+}
+
+@mixin md {
+ @media all and (min-width: get(md)) {
+ @content;
+ }
+}
+
+@mixin lg {
+ @media all and (min-width: get(lg)) {
+ @content;
+ }
+}
+
+@mixin xl {
+ @media all and (min-width: get(xl)) {
+ @content;
+ }
+}
+
+@mixin xxl {
+ @media all and (min-width: get(xxl)) {
+ @content;
+ }
+}
+
+@mixin xxxl {
+ @media all and (min-width: get(xxxl)) {
+ @content;
+ }
+}
+
+@mixin between($min, $max) {
+ @media all and (min-width: $min) and (max-width: $max) {
+ @content;
+ }
+}
diff --git a/_sass/abstracts/_index.scss b/_sass/abstracts/_index.scss
new file mode 100644
index 00000000..6c9e21cf
--- /dev/null
+++ b/_sass/abstracts/_index.scss
@@ -0,0 +1,4 @@
+@forward 'variables';
+@forward 'mixins';
+@forward 'placeholders';
+@forward 'breakpoints';
diff --git a/_sass/abstracts/_mixins.scss b/_sass/abstracts/_mixins.scss
new file mode 100644
index 00000000..b08bc811
--- /dev/null
+++ b/_sass/abstracts/_mixins.scss
@@ -0,0 +1,86 @@
+@mixin color-scheme($mode) {
+ @media (prefers-color-scheme: #{$mode}) {
+ @content;
+ }
+}
+
+@mixin text-ellipsis {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+@mixin mt-mb($value) {
+ margin-top: $value;
+ margin-bottom: $value;
+}
+
+@mixin ml-mr($value) {
+ margin-left: $value;
+ margin-right: $value;
+}
+
+@mixin pt-pb($val) {
+ padding-top: $val;
+ padding-bottom: $val;
+}
+
+@mixin pl-pr($val, $important: false) {
+ @if $important {
+ padding-left: $val !important;
+ padding-right: $val !important;
+ } @else {
+ padding-left: $val;
+ padding-right: $val;
+ }
+}
+
+@mixin placeholder {
+ color: var(--text-muted-color) !important;
+}
+
+@mixin placeholder-focus {
+ opacity: 0.6;
+}
+
+@mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) {
+ color: $color;
+ font-size: $font-size;
+ font-weight: $font-weight;
+}
+
+@mixin align-center {
+ position: relative;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+@mixin prompt($type, $fa-content, $fa-style: 'solid', $rotate: 0) {
+ &.prompt-#{$type} {
+ background-color: var(--prompt-#{$type}-bg);
+
+ &::before {
+ content: $fa-content;
+ color: var(--prompt-#{$type}-icon-color);
+ font: var(--fa-font-#{$fa-style});
+
+ @if $rotate != 0 {
+ transform: rotate(#{$rotate}deg);
+ }
+ }
+ }
+}
+
+@mixin slide($append: null) {
+ $basic: transform 0.4s ease;
+
+ @if $append {
+ transition: $basic, $append;
+ } @else {
+ transition: $basic;
+ }
+}
+
+@mixin max-w-100 {
+ max-width: 100%;
+}
diff --git a/_sass/addon/module.scss b/_sass/abstracts/_placeholders.scss
similarity index 52%
rename from _sass/addon/module.scss
rename to _sass/abstracts/_placeholders.scss
index 3afff6aa..d8a10604 100644
--- a/_sass/addon/module.scss
+++ b/_sass/abstracts/_placeholders.scss
@@ -1,24 +1,11 @@
-/*
-* Mainly scss modules, only imported to `assets/css/main.scss`
-*/
-
-/* ---------- scss placeholder --------- */
+@use 'variables' as v;
+@use 'mixins' as mx;
%heading {
color: var(--heading-color);
font-weight: 400;
- font-family: Lato, "Microsoft Yahei", sans-serif;
-}
-
-%section {
- #core-wrapper & {
- margin-top: 2.5rem;
- margin-bottom: 1.25rem;
-
- &:focus {
- outline: none; /* avoid outline in Safari */
- }
- }
+ font-family: v.$font-family-heading;
+ scroll-margin-top: 3.5rem;
}
%anchor {
@@ -44,7 +31,10 @@
}
%tag-hover {
+ @extend %link-color;
+
background: var(--tag-hover);
+ border-color: var(--tag-hover);
transition: background 0.35s ease-in-out;
}
@@ -56,6 +46,7 @@
%link-hover {
color: #d2603a !important;
+ border-bottom: 1px solid #d2603a;
text-decoration: none;
}
@@ -68,12 +59,13 @@
}
%clickable-transition {
- transition: color 0.35s ease-in-out;
+ transition: all 0.3s ease-in-out;
}
%no-cursor {
-webkit-user-select: none;
-moz-user-select: none;
+ -ms-user-select: none;
user-select: none;
}
@@ -89,6 +81,10 @@
font-style: normal;
}
+%rounded {
+ border-radius: v.$radius-lg;
+}
+
%img-caption {
+ em {
display: block;
@@ -101,53 +97,67 @@
}
%sidebar-links {
- color: rgba(117, 117, 117, 0.9);
+ color: var(--sidebar-muted-color);
-webkit-user-select: none;
-moz-user-select: none;
+ -ms-user-select: none;
user-select: none;
}
-/* ---------- scss mixin --------- */
+%text-clip {
+ display: -webkit-box;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+
+%text-ellipsis {
+ @include mx.text-ellipsis;
+}
-@mixin no-text-decoration {
- text-decoration: none;
+%text-highlight {
+ color: var(--text-muted-highlight-color);
+ font-weight: 600;
+}
+
+%text-sm {
+ font-size: 0.85rem;
}
-@mixin ml-mr($value) {
- margin-left: $value;
- margin-right: $value;
+%text-xs {
+ font-size: 0.8rem;
}
-@mixin pl-pr($val) {
- padding-left: $val;
- padding-right: $val;
+%sup-fn-target {
+ &:target {
+ background-color: var(--footnote-target-bg);
+ width: -moz-fit-content;
+ width: -webkit-fit-content;
+ width: fit-content;
+ transition: background-color 1.75s ease-in-out;
+ }
}
-@mixin input-placeholder {
- opacity: 0.6;
+%btn-color {
+ button i {
+ color: #999999;
+ }
}
-@mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) {
- color: $color;
- font-size: $font-size;
- font-weight: $font-weight;
+%code-snippet-bg {
+ background-color: var(--highlight-bg-color);
}
-@mixin align-center {
- position: relative;
- left: 50%;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
+%code-snippet-padding {
+ padding-left: 1rem;
+ padding-right: 1.5rem;
}
-@mixin prompt($type, $fa-content, $fa-style: "solid") {
- &.prompt-#{$type} {
- background-color: var(--prompt-#{$type}-bg);
+%max-w-100 {
+ max-width: 100%;
+}
- &::before {
- content: $fa-content;
- color: var(--prompt-#{$type}-icon-color);
- font: var(--fa-font-#{$fa-style});
- }
- }
+%panel-border {
+ border-left: 1px solid var(--main-border-color);
}
diff --git a/_sass/abstracts/_variables.scss b/_sass/abstracts/_variables.scss
new file mode 100644
index 00000000..39c3b4a1
--- /dev/null
+++ b/_sass/abstracts/_variables.scss
@@ -0,0 +1,36 @@
+/* sidebar */
+
+$sidebar-width: 260px !default; /* the basic width */
+$sidebar-width-large: 300px !default; /* screen width: >= 1650px */
+$sb-btn-gap: 0.8rem !default;
+$sb-btn-gap-lg: 1rem !default;
+
+/* other framework sizes */
+
+$topbar-height: 3rem !default;
+$search-max-width: 200px !default;
+$footer-height: 5rem !default;
+$footer-height-large: 6rem !default; /* screen width: < 850px */
+$main-content-max-width: 1250px !default;
+$radius-sm: 6px !default;
+$radius-lg: 10px !default;
+$back2top-size: 2.75rem !default;
+
+/* syntax highlight */
+
+$code-font-size: 0.85rem !default;
+$code-header-height: 2.25rem !default;
+$code-dot-size: 0.75rem !default;
+$code-dot-gap: 0.5rem !default;
+$code-icon-width: 1.75rem !default;
+
+/* fonts */
+
+$font-family-base: 'Source Sans Pro', 'Microsoft Yahei', sans-serif !default;
+$font-family-heading: Lato, 'Microsoft Yahei', sans-serif !default;
+
+/* Theme mode settings */
+
+$theme-attr: 'data-bs-theme'; /* the attribute used to indicate the resolved theme */
+$theme-options: light, dark;
+$theme: null !default; /* set by Jekyll site configuration */
diff --git a/_sass/addon/commons.scss b/_sass/addon/commons.scss
deleted file mode 100644
index 26d1a0bc..00000000
--- a/_sass/addon/commons.scss
+++ /dev/null
@@ -1,1678 +0,0 @@
-/*
- The common styles
-*/
-
-html {
- @media (prefers-color-scheme: light) {
- &:not([data-mode]),
- &[data-mode="light"] {
- @include light-scheme;
- }
-
- &[data-mode="dark"] {
- @include dark-scheme;
- }
- }
-
- @media (prefers-color-scheme: dark) {
- &:not([data-mode]),
- &[data-mode="dark"] {
- @include dark-scheme;
- }
-
- &[data-mode="light"] {
- @include light-scheme;
- }
- }
-
- font-size: 16px;
-}
-
-body {
- background: var(--body-bg);
- color: var(--text-color);
- -webkit-font-smoothing: antialiased;
- font-family: "Source Sans Pro", "Microsoft Yahei", sans-serif;
- line-height: 1.75;
-}
-
-/* --- Typography --- */
-
-h1 {
- @extend %heading;
-
- font-size: 1.9rem;
-}
-
-h2 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.5rem;
-}
-
-h3 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.2rem;
-}
-
-h4 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.15rem;
-}
-
-h5 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.1rem;
-}
-
-a {
- @extend %link-color;
-}
-
-img {
- max-width: 100%;
- height: auto;
-}
-
-blockquote {
- border-left: 5px solid var(--blockquote-border-color);
- padding-left: 1rem;
- color: var(--blockquote-text-color);
-
- &[class^="prompt-"] {
- display: flex;
- border-left: 0;
- border-radius: 6px;
- padding: 1rem;
- color: var(--prompt-text-color);
-
- &::before {
- text-align: center;
- width: 1.25rem;
- margin-right: 0.75rem;
- position: relative;
- top: 0.4rem;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- }
-
- > div {
- max-width: calc(100% - 2rem);
-
- > :last-child {
- margin-bottom: 0;
- }
- }
- }
-
- @include prompt("tip", "\f0eb", "regular");
- @include prompt("info", "\f06a");
- @include prompt("warning", "\f06a");
- @include prompt("danger", "\f071");
-}
-
-mjx-container {
- overflow-x: auto;
- overflow-y: hidden;
-}
-
-kbd {
- font-family: inherit;
- display: inline-block;
- vertical-align: middle;
- line-height: 1.3rem;
- min-width: 1.75rem;
- text-align: center;
- margin: 0 0.3rem;
- padding-top: 0.1rem;
- color: var(--kbd-text-color);
- background-color: var(--kbd-bg-color);
- border-radius: 0.25rem;
- border: solid 1px var(--kbd-wrap-color);
- box-shadow: inset 0 -2px 0 var(--kbd-wrap-color);
-}
-
-footer {
- font-size: 0.8rem;
- background-color: var(--main-bg);
-
- div.d-flex {
- height: $footer-height;
- line-height: 1.2rem;
- padding-bottom: 1rem;
- border-top: 1px solid var(--main-border-color);
-
- > div {
- width: 350px;
- }
- }
-
- a {
- @extend %text-color;
-
- &:link {
- @include no-text-decoration;
- }
-
- &:hover {
- @extend %link-hover;
- @include no-text-decoration;
- }
- }
-
- .footer-right {
- text-align: right;
- }
-}
-
-i { /* fontawesome icons */
- &.far,
- &.fas {
- @extend %no-cursor;
- }
-}
-
-img[data-src] {
- margin: 0.5rem 0;
-
- &.lazyload,
- &.lazyloading {
- opacity: 0;
- @include align-center;
- }
-
- &.lazyloaded {
- opacity: 1;
- transition: opacity 0.5s;
- @include align-center;
- }
-
- &.left {
- float: left;
- margin: 0.75rem 1rem 1rem 0;
- }
-
- &.right {
- float: right;
- margin: 0.75rem 0 1rem 1rem;
- }
-
- &.shadow {
- -webkit-filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08));
- filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08));
- box-shadow: none !important; /* cover the Bootstrap 4.6.1 styles */
- }
-
- @extend %img-caption;
-}
-
-/* --- Panels --- */
-
-.access {
- top: 2rem;
- transition: top 0.2s ease-in-out;
- margin-top: 3rem;
- margin-bottom: 4rem;
-
- &:only-child {
- position: -webkit-sticky;
- position: sticky;
- }
-
- > div {
- padding-left: 1rem;
- border-left: 1px solid var(--main-border-color);
-
- &:not(:last-child) {
- margin-bottom: 4rem;
- }
- }
-
- .post-content {
- font-size: 0.9rem;
- }
-}
-
-#panel-wrapper {
- /* the headings */
- .panel-heading {
- @include label(inherit);
- }
-
- .post-tag {
- display: inline-block;
- line-height: 1rem;
- font-size: 0.85rem;
- background: none;
- border: 1px solid var(--btn-border-color);
- border-radius: 0.8rem;
- padding: 0.3rem 0.5rem;
- margin: 0 0.35rem 0.5rem 0;
-
- &:hover {
- background-color: #2a408e;
- border-color: #2a408e;
- color: #ffffff;
- transition: none;
- }
- }
-
- [data-topbar-visible="true"] & > div {
- top: 6rem;
- }
-}
-
-#access-lastmod {
- li {
- height: 1.8rem;
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 1;
- -webkit-box-orient: vertical;
- list-style: none;
- }
-
- a {
- &:hover {
- @extend %link-hover;
- }
-
- @extend %no-bottom-border;
-
- color: inherit;
- }
-}
-
-.footnotes > ol {
- padding-left: 2rem;
- margin-top: 0.5rem;
-
- > li {
- &:not(:last-child) {
- margin-bottom: 0.3rem;
- }
-
- > p {
- margin-left: 0.25em;
- margin-top: 0;
- margin-bottom: 0;
- }
-
- /* [scroll-focus] added by `smooth-scroll.js` */
- &:target:not([scroll-focus]),
- &[scroll-focus="true"] > p {
- background-color: var(--footnote-target-bg);
- width: -moz-fit-content;
- width: -webkit-fit-content;
- width: fit-content;
- transition: background-color 1.5s ease-in-out;
- }
- }
-}
-
-.footnote {
- @at-root a#{&} {
- @include ml-mr(1px);
- @include pl-pr(2px);
-
- border-bottom-style: none !important;
- transition: background-color 1.5s ease-in-out;
- }
-
- /* [scroll-focus] added by `smooth-scroll.js` */
- @at-root sup:target:not([scroll-focus]),
- sup[scroll-focus=true] > a#{&} {
- background-color: var(--footnote-target-bg);
- }
-}
-
-.reversefootnote {
- @at-root a#{&} {
- font-size: 0.6rem;
- line-height: 1;
- position: relative;
- bottom: 0.25em;
- margin-left: 0.25em;
- border-bottom-style: none !important;
- }
-}
-
-/* --- Begin of Markdown table style --- */
-
-/* it will be created by Liquid */
-.table-wrapper {
- overflow-x: auto;
- margin-bottom: 1.5rem;
-
- > table {
- min-width: 100%;
- overflow-x: auto;
- border-spacing: 0;
-
- thead {
- border-bottom: solid 2px rgba(210, 215, 217, 0.75);
-
- th {
- @extend %table-cell;
- }
- }
-
- tbody {
- tr {
- border-bottom: 1px solid var(--tb-border-color);
-
- &:nth-child(2n) {
- background-color: var(--tb-even-bg);
- }
-
- &:nth-child(2n + 1) {
- background-color: var(--tb-odd-bg);
- }
-
- td {
- @extend %table-cell;
- }
- }
- } /* tbody */
- }/* table */
-}
-
-/* --- post --- */
-
-.post {
- h1 {
- margin-top: 3rem;
- margin-bottom: 1.5rem;
- }
-
- a {
- &.img-link {
- @extend %no-cursor;
- }
-
- /* created by `_includes/img-extra.html` */
- &.popup {
- cursor: zoom-in;
-
- > img[data-src]:not(.normal):not(.left):not(.right) {
- @include align-center;
- }
- }
-
- &:hover {
- code {
- @extend %link-hover;
- }
- }
- } /* a */
-}
-
-.pageviews .fa-spinner {
- font-size: 80%;
-}
-
-.post-meta {
- font-size: 0.85rem;
- word-spacing: 1px;
-
- a {
- &:not(:last-child) {
- margin-right: 2px;
- }
-
- &:not([class]):hover {
- @extend %link-hover;
- }
- }
-
- em {
- @extend %normal-font-style;
- }
-}
-
-.post-content {
- font-size: 1.08rem;
- margin-top: 2rem;
- overflow-wrap: break-word;
-
- a {
- &:not(.img-link) {
- @extend %link-underline;
-
- &:hover {
- @extend %link-hover;
- }
- }
-
- &.img-link {
- @extend %img-caption;
- }
- }
-
- ol,
- ul {
- &:not([class]),
- &.task-list {
- -webkit-padding-start: 1.75rem;
- padding-inline-start: 1.75rem;
-
- li {
- margin: 0.25rem 0;
- padding-left: 0.25rem;
- }
-
- ol,
- ul {
- -webkit-padding-start: 1.25rem;
- padding-inline-start: 1.25rem;
- margin: 0.5rem 0;
- }
- }
- }
-
- ul.task-list {
- -webkit-padding-start: 1.25rem;
- padding-inline-start: 1.25rem;
-
- li {
- list-style-type: none;
- padding-left: 0;
-
- > i { /* checkbox icon */
- width: 2rem;
- margin-left: -1.25rem;
- color: var(--checkbox-color);
-
- &.checked {
- color: var(--checkbox-checked-color);
- }
- }
-
- ul {
- -webkit-padding-start: 1.75rem;
- padding-inline-start: 1.75rem;
- }
- }
-
- input[type="checkbox"] {
- margin: 0 0.5rem 0.2rem -1.3rem;
- vertical-align: middle;
- }
- } /* ul */
-
- dl > dd {
- margin-left: 1rem;
- }
-} /* .post-content */
-
-.tag:hover {
- @extend %tag-hover;
-}
-
-.post-tag {
- display: inline-block;
- min-width: 2rem;
- text-align: center;
- background: var(--tag-bg);
- border-radius: 0.3rem;
- padding: 0 0.4rem;
- color: inherit;
- line-height: 1.3rem;
-
- &:not(:last-child) {
- margin-right: 0.2rem;
- }
-
- &:hover {
- @extend %tag-hover;
-
- border-bottom: none;
- text-decoration: none;
- color: #d2603a;
- }
-}
-
-/* --- buttons --- */
-.btn-lang {
- border: 1px solid !important;
- padding: 1px 3px;
- border-radius: 3px;
- color: var(--link-color);
-
- &:focus {
- box-shadow: none;
- }
-}
-
-/* --- Effects classes --- */
-
-.loaded {
- display: block !important;
-
- @at-root .d-flex#{&} {
- display: flex !important;
- }
-}
-
-.unloaded {
- display: none !important;
-}
-
-.visible {
- visibility: visible !important;
-}
-
-.hidden {
- visibility: hidden !important;
-}
-
-.flex-grow-1 {
- flex-grow: 1 !important;
-}
-
-.btn-box-shadow {
- box-shadow: 0 0 8px 0 var(--btn-box-shadow) !important;
-}
-
-.no-text-decoration {
- @include no-text-decoration;
-}
-
-.tooltip-inner { /* Overrided BS4 Tooltip */
- font-size: 0.7rem;
- max-width: 220px;
- text-align: left;
-}
-
-.disabled {
- color: rgb(206, 196, 196);
- pointer-events: auto;
- cursor: not-allowed;
-}
-
-.hide-border-bottom {
- border-bottom: none !important;
-}
-
-.input-focus {
- box-shadow: none;
- border-color: var(--input-focus-border-color) !important;
- background: center !important;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
-}
-
-/* --- Overriding --- */
-
-/* magnific-popup */
-figure .mfp-title {
- text-align: center;
- padding-right: 0;
- margin-top: 0.5rem;
-}
-
-/* mermaid */
-.mermaid {
- text-align: center;
-}
-
-/* --- sidebar layout --- */
-
-$sidebar-display: "sidebar-display";
-
-#sidebar {
- @include pl-pr(0);
-
- position: fixed;
- top: 0;
- left: 0;
- height: 100%;
- overflow-y: auto;
- width: $sidebar-width;
- z-index: 99;
- background: var(--sidebar-bg);
-
- /* Hide scrollbar for Chrome, Safari and Opera */
- &::-webkit-scrollbar {
- display: none;
- }
-
- /* Hide scrollbar for IE, Edge and Firefox */
- -ms-overflow-style: none; /* IE and Edge */
- scrollbar-width: none; /* Firefox */
-
- a {
- @extend %sidebar-links;
-
- &:hover {
- @include no-text-decoration;
-
- color: var(--sidebar-active-color) !important;
- }
- }
-
- #avatar {
- > a {
- display: block;
- width: 6rem;
- height: 6rem;
- border-radius: 50%;
- border: 2px solid rgba(222, 222, 222, 0.7);
- overflow: hidden;
- -webkit-transform: translateZ(0);
- transform: translateZ(0); /* fixed the zoom in Safari */
- transition: border-color 0.35s ease-in-out;
-
- &:hover {
- border-color: white;
- }
- }
-
- img {
- width: 100%;
- height: 100%;
- transition: -webkit-transform 0.5s;
- transition: transform 0.5s;
- transition: transform 0.5s, -webkit-transform 0.5s;
-
- &:hover {
- -webkit-transform: scale(1.2);
- transform: scale(1.2);
- }
- }
- } /* #avatar */
-
- .site-title {
- margin-top: 0.55rem;
-
- a {
- @extend %clickable-transition;
-
- font-weight: 900;
- font-size: 1.5rem;
- letter-spacing: 0.5px;
- color: rgba(134, 133, 133, 0.99);
- }
- }
-
- .site-subtitle {
- font-size: 95%;
- color: var(--sidebar-muted-color);
- line-height: 1.25rem;
- word-spacing: 1px;
- margin: 0.2rem 1.5rem 0.5rem 1.5rem;
- min-height: 3rem; /* avoid vertical shifting in multi-line words */
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- }
-
- .nav-link {
- border-radius: 0;
- font-size: 0.95rem;
- font-weight: 600;
- letter-spacing: 1px;
- display: table-cell;
- vertical-align: middle;
- }
-
- .nav-item {
- text-align: center;
- display: table;
- height: $tab-height;
-
- &.active {
- .nav-link {
- color: var(--sidebar-active-color);
- }
- }
-
- &:not(.active) > a {
- @extend %clickable-transition;
- }
- }
-
- ul {
- height: $tab-height * $tab-count;
- margin-bottom: 2rem;
- padding-left: 0;
-
- li {
- width: 100%;
-
- &:last-child {
- a {
- position: relative;
- left: $cursor-width / 2;
- width: 100%;
- }
-
- &::after { /* the cursor */
- display: table;
- visibility: hidden;
- content: "";
- position: relative;
- right: 1px;
- width: $cursor-width;
- height: $tab-cursor-height;
- border-radius: 1px;
- background-color: var(--nav-cursor-color);
- pointer-events: none;
- }
- }
- } /* li */
-
- @mixin fix-cursor($top) {
- top: $top;
- visibility: visible;
- }
-
- @for $i from 1 through $tab-count {
- $offset: $tab-count - $i;
- $top: -$offset * $tab-height + ($tab-height - $tab-cursor-height) / 2;
-
- @if $i < $tab-count {
- > li.active:nth-child(#{$i}),
- > li.nav-item:nth-child(#{$i}):hover {
- ~ li:last-child::after {
- @include fix-cursor($top);
- }
- }
- } @else {
- > li.active:nth-child(#{$i}):last-child::after,
- > li.nav-item:nth-child(#{$i}):last-child:hover::after {
- @include fix-cursor($top);
- }
- }
- } /* @for */
- } /* ul */
-
- .sidebar-bottom {
- margin-bottom: 2.1rem;
-
- @include ml-mr(auto);
- @include pl-pr(1rem);
-
- %icon {
- width: 2.4rem;
- text-align: center;
- }
-
- a {
- @extend %icon;
- @extend %clickable-transition;
- }
-
- i {
- font-size: 1.2rem;
- line-height: 1.75rem;
- }
-
- .mode-toggle {
- padding: 0;
- border: 0;
- margin-bottom: 1px;
- background-color: transparent;
-
- @extend %icon;
- @extend %sidebar-links;
-
- > i {
- @extend %clickable-transition;
- }
-
- &:hover > i {
- color: var(--sidebar-active-color);
- }
- }
-
- .icon-border {
- @extend %no-cursor;
-
- background-color: var(--sidebar-muted-color);
- content: "";
- width: 3px;
- height: 3px;
- border-radius: 50%;
- }
- } /* .sidebar-bottom */
-} /* #sidebar */
-
-@media (hover: hover) {
- #sidebar ul > li:last-child::after {
- transition: top 0.5s ease;
- }
-}
-
-.profile-wrapper {
- margin-top: 2rem;
- width: 100%;
-}
-
-#search-result-wrapper {
- display: none;
- height: 100%;
- width: 100%;
- overflow: auto;
-
- .post-content {
- margin-top: 2rem;
- }
-}
-
-/* --- top-bar --- */
-
-#topbar-wrapper {
- height: $topbar-height;
- position: fixed;
- top: 0;
- left: $sidebar-width; /* same as sidebar width */
- right: 0;
- transition: top 0.2s ease-in-out;
- z-index: 50;
- border-bottom: 1px solid rgba(95, 165, 236, 0.8);
- background-color: var(--topbar-wrapper-bg);
-
- [data-topbar-visible="false"] & {
- top: -$topbar-height; /* same as topbar height. */
- }
-}
-
-#topbar {
- i { /* icons */
- color: #999999;
- }
-
- #breadcrumb {
- font-size: 1rem;
- color: gray;
- padding-left: 0.5rem;
-
- a:hover {
- @extend %link-hover;
- }
-
- span {
- &:not(:last-child) {
- &::after {
- content: "›";
- padding: 0 0.3rem;
- }
- }
- }
- }
-} /* #topbar */
-
-#sidebar-trigger,
-#search-trigger {
- display: none;
-}
-
-#search-wrapper {
- display: flex;
- width: 100%;
- border-radius: 1rem;
- border: 1px solid var(--search-wrapper-border-color);
- background: var(--search-wrapper-bg);
- padding: 0 0.5rem;
-
- i {
- z-index: 2;
- font-size: 0.9rem;
- color: var(--search-icon-color);
- }
-}
-
-#search-cancel { /* 'Cancel' link */
- color: var(--link-color);
- margin-left: 1rem;
- display: none;
-
- @extend %cursor-pointer;
-}
-
-#search-input {
- background: center;
- border: 0;
- border-radius: 0;
- padding: 0.18rem 0.3rem;
- color: var(--text-color);
- height: auto;
-
- &:focus {
- box-shadow: none;
- background: center;
-
- &.form-control {
- &::-moz-placeholder { @include input-placeholder; }
- &::-webkit-input-placeholder { @include input-placeholder; }
- &::placeholder { @include input-placeholder; }
- }
- }
-}
-
-#search-hints {
- padding: 0 1rem;
-
- h4 {
- margin-bottom: 1.5rem;
- }
-
- .post-tag {
- display: inline-block;
- line-height: 1rem;
- font-size: 1rem;
- background: var(--search-tag-bg);
- border: none;
- padding: 0.5rem;
- margin: 0 1.25rem 1rem 0;
-
- &::before {
- content: "#";
- color: var(--text-muted-color);
- padding-right: 0.2rem;
- }
-
- @extend %link-color;
- }
-}
-
-#search-results {
- padding-bottom: 3rem;
-
- a {
- &:hover {
- @extend %link-hover;
- }
-
- @extend %link-color;
- @extend %no-bottom-border;
- @extend %heading;
-
- font-size: 1.4rem;
- line-height: 2.5rem;
- }
-
- > div {
- width: 100%;
-
- &:not(:last-child) {
- margin-bottom: 1rem;
- }
-
- i { /* icons */
- color: #818182;
- margin-right: 0.15rem;
- font-size: 80%;
- }
-
- > p {
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 3;
- -webkit-box-orient: vertical;
- }
- }
-} /* #search-results */
-
-#topbar-title {
- display: none;
- font-size: 1.1rem;
- font-weight: 600;
- font-family: sans-serif;
- color: var(--topbar-text-color);
- text-align: center;
- width: 70%;
- overflow: hidden;
- text-overflow: ellipsis;
- word-break: keep-all;
- white-space: nowrap;
-}
-
-#core-wrapper {
- .categories,
- #tags,
- #archives {
- a:not(:hover) {
- @extend %no-bottom-border;
- }
- }
-
- @at-root .row:only-child > #{&} {
- padding-bottom: 3rem;
- }
-}
-
-#mask {
- display: none;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- height: 100%;
- width: 100%;
- z-index: 1;
-
- @at-root [#{$sidebar-display}] & {
- display: block !important;
- }
-}
-
-/* --- main wrapper --- */
-
-#main-wrapper {
- background-color: var(--main-bg);
- position: relative;
- min-height: calc(100vh - #{$footer-height});
-
- @include pl-pr(0);
-}
-
-#core-wrapper,
-#panel-wrapper {
- margin-top: $topbar-height; /* same as the height of topbar */
-}
-
-#topbar-wrapper.row,
-#main > .row,
-#search-result-wrapper > .row {
- @include ml-mr(0);
-}
-
-/* --- button back-to-top --- */
-
-#back-to-top {
- $size: 2.7em;
-
- display: none;
- z-index: 1;
- cursor: pointer;
- position: fixed;
- background: var(--button-bg);
- color: var(--btn-backtotop-color);
- padding: 0;
- width: $size;
- height: $size;
- border-radius: 50%;
- border: 1px solid var(--btn-backtotop-border-color);
- transition: -webkit-transform 0.2s ease-out;
- transition: transform 0.2s ease-out;
- transition: transform 0.2s ease-out, -webkit-transform 0.2s ease-out;
- -webkit-transition: transform 0.2s ease-out;
-
- i {
- line-height: $size;
- position: relative;
- bottom: 2px;
- }
-}
-
-#back-to-top:hover {
- transform: translate3d(0, -5px, 0);
- -webkit-transform: translate3d(0, -5px, 0);
-}
-
-#notification {
- @-webkit-keyframes popup {
- from {
- opacity: 0;
- bottom: 0;
- }
- }
-
- @keyframes popup {
- from {
- opacity: 0;
- bottom: 0;
- }
- }
-
- .toast-header {
- background: none;
- border-bottom: none;
- color: inherit;
- }
-
- .toast-body {
- font-family: Lato, sans-serif;
- line-height: 1.25rem;
-
- button {
- font-size: 90%;
- min-width: 4rem;
- }
- }
-
- &.toast {
- display: none;
-
- &.show {
- display: block;
- min-width: 20rem;
- border-radius: 0.5rem;
- -webkit-backdrop-filter: blur(10px);
- backdrop-filter: blur(10px);
- background-color: rgba(255, 255, 255, 0.5);
- color: #1b1b1eba;
- position: fixed;
- left: 50%;
- bottom: 20%;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
- -webkit-animation: popup 0.8s;
- animation: popup 0.8s;
- }
- }
-}
-
-/*
- Responsive Design:
-
- {sidebar, content, panel} >= 1120px screen width
- {sidebar, content} >= 850px screen width
- {content} <= 849px screen width
-
-*/
-
-@media all and (max-width: 576px) {
- footer {
- height: $footer-height-mobile;
-
- div.d-flex {
- padding: 1.5rem 0;
- flex-wrap: wrap;
- justify-content: space-around !important;
- }
-
- .footer-left,
- .footer-right {
- text-align: center;
- }
- }
-
- #main-wrapper {
- min-height: calc(100vh - #{$footer-height-mobile});
- }
-
- #core-wrapper {
- min-height: calc(100vh - #{$topbar-height} - #{$footer-height-mobile}) !important;
-
- h1 {
- margin-top: 2.2rem;
- font-size: 1.75rem;
- }
-
- .post-content {
- > blockquote[class^="prompt-"] {
- @include pl-pr(1.25rem);
- @include ml-mr(-1.25rem);
-
- border-radius: 0;
- max-width: none;
- }
- }
- }
-
- #avatar > a {
- width: 5rem;
- height: 5rem;
- }
-
- .site-subtitle {
- @include ml-mr(1.8rem);
- }
-}
-
-@media all and (max-width: 768px) {
- %full-width {
- max-width: 100%;
- }
-
- #topbar {
- @extend %full-width;
- }
-
- #main {
- @extend %full-width;
- @include pl-pr(0);
- }
-}
-
-/* hide sidebar and panel */
-@media all and (max-width: 849px) {
- @mixin slide($append: null) {
- $basic: transform 0.4s ease;
-
- @if $append {
- transition: $basic, $append;
- } @else {
- transition: $basic;
- }
- }
-
- html,
- body {
- overflow-x: hidden;
- }
-
- footer {
- @include slide;
- }
-
- [#{$sidebar-display}] {
- #sidebar {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
-
- #topbar-wrapper,
- #main-wrapper,
- footer {
- -webkit-transform: translateX(#{$sidebar-width});
- transform: translateX(#{$sidebar-width});
- }
- }
-
- #sidebar {
- @include slide;
-
- transform: translateX(-#{$sidebar-width}); /* hide */
- -webkit-transform: translateX(-#{$sidebar-width});
-
- .cursor {
- transition: none;
- }
- }
-
- #main-wrapper {
- @include slide;
-
- padding-top: $topbar-height;
- }
-
- #topbar,
- #main,
- footer > .container {
- max-width: 100%;
- }
-
- #search-result-wrapper {
- width: 100%;
- }
-
- #breadcrumb,
- #search-wrapper {
- display: none;
- }
-
- #topbar-wrapper {
- @include slide(top 0.2s ease);
-
- left: 0;
- }
-
- #core-wrapper,
- #panel-wrapper {
- margin-top: 0;
- }
-
- #topbar-title,
- #sidebar-trigger,
- #search-trigger {
- display: block;
- }
-
- #search-result-wrapper .post-content {
- letter-spacing: 0;
- }
-
- #tags {
- justify-content: center !important;
- }
-
- h1.dynamic-title {
- display: none;
-
- ~ .post-content {
- margin-top: 3rem;
- }
- }
-} /* max-width: 849px */
-
-@media all and (max-width: 849px) and (orientation: portrait) {
- [data-topbar-visible="false"] #topbar-wrapper {
- top: 0;
- }
-}
-
-/* Phone & Pad */
-@media all and (min-width: 577px) and (max-width: 1199px) {
- footer .d-flex > div {
- width: 312px;
- }
-}
-
-/* Sidebar is visible */
-@media all and (min-width: 850px) {
- /* Solved jumping scrollbar */
- html {
- overflow-y: scroll;
- }
-
- #main-wrapper,
- footer {
- margin-left: $sidebar-width;
- }
-
- .profile-wrapper {
- margin-top: 3rem;
- }
-
- #search-hints {
- display: none;
- }
-
- #search-wrapper {
- max-width: $search-max-width;
- }
-
- #search-result-wrapper {
- margin-top: 3rem;
- max-width: $main-content-max-width;
- }
-
- div.post-content .table-wrapper > table {
- min-width: 70%;
- }
-
- /* button 'back-to-Top' position */
- #back-to-top {
- bottom: 5.5rem;
- right: 5%;
- }
-
- #topbar-title {
- text-align: left;
- }
-}
-
-/* Pad horizontal */
-@media all and (min-width: 992px) and (max-width: 1199px) {
- #main .col-lg-11 {
- flex: 0 0 96%;
- max-width: 96%;
- }
-}
-
-/* Compact icons in sidebar & panel hidden */
-@media all and (min-width: 850px) and (max-width: 1199px) {
- #sidebar {
- width: $sidebar-width-small;
-
- .site-subtitle {
- margin-left: 1rem;
- margin-right: 1rem;
- }
-
- .sidebar-bottom {
- a,
- span {
- width: 2rem;
- }
-
- .icon-border {
- left: -3px;
- }
- }
- }
-
- #topbar-wrapper {
- left: $sidebar-width-small;
- }
-
- #search-results > div {
- max-width: 700px;
- }
-
- .site-title {
- font-size: 1.3rem;
- margin-left: 0 !important;
- }
-
- .site-subtitle {
- @include ml-mr(1rem);
-
- font-size: 90%;
- }
-
- #main-wrapper,
- footer {
- margin-left: $sidebar-width-small;
- }
-
- #breadcrumb {
- width: 65%;
- overflow: hidden;
- text-overflow: ellipsis;
- word-break: keep-all;
- white-space: nowrap;
- }
-}
-
-/* panel hidden */
-@media all and (max-width: 1199px) {
- #panel-wrapper {
- display: none;
- }
-
- #main > div.row {
- justify-content: center !important;
- }
-}
-
-/* --- desktop mode, both sidebar and panel are visible --- */
-
-@media all and (min-width: 1200px) {
- #back-to-top {
- bottom: 6.5rem;
- }
-
- #search-wrapper {
- margin-right: 4rem;
- }
-
- #search-input {
- transition: all 0.3s ease-in-out;
- }
-
- #search-results > div {
- width: 46%;
-
- &:nth-child(odd) {
- margin-right: 1.5rem;
- }
-
- &:nth-child(even) {
- margin-left: 1.5rem;
- }
-
- &:last-child:nth-child(odd) {
- position: relative;
- right: 24.3%;
- }
- }
-
- .post-content {
- font-size: 1.03rem;
- }
-
- footer {
- div.d-felx {
- width: 85%;
- }
- }
-}
-
-@media all and (min-width: 1400px) {
- #back-to-top {
- right: calc((100vw - #{$sidebar-width} - 1140px) / 2 + 3rem);
- }
-}
-
-@media all and (min-width: 1650px) {
- #main-wrapper,
- footer {
- margin-left: $sidebar-width-large;
- }
-
- #topbar-wrapper {
- left: $sidebar-width-large;
- }
-
- #search-wrapper {
- margin-right: calc(#{$main-content-max-width} * 0.25 - #{$search-max-width});
- }
-
- #topbar,
- #main,
- footer > .container {
- max-width: $main-content-max-width;
- }
-
- #core-wrapper,
- #tail-wrapper {
- padding-right: 4.5rem !important;
- }
-
- #back-to-top {
- right: calc((100vw - #{$sidebar-width-large} - #{$main-content-max-width}) / 2 + 2rem);
- }
-
- #sidebar {
- width: $sidebar-width-large;
-
- .profile-wrapper {
- margin-top: 4rem;
- margin-bottom: 1rem;
-
- &.text-center {
- text-align: left !important;
- }
-
- %profile-ml {
- margin-left: 4.5rem;
- }
-
- #avatar {
- @extend %profile-ml;
-
- > a {
- width: 6.2rem;
- height: 6.2rem;
-
- &.mx-auto {
- margin-left: 0 !important;
- }
- }
- }
-
- .site-title {
- @extend %profile-ml;
-
- margin-top: 0.4rem;
-
- a {
- font-size: 1.7rem;
- letter-spacing: 1px;
- }
- }
-
- .site-subtitle {
- @extend %profile-ml;
-
- word-spacing: 0;
- margin-top: 0;
- }
- } /* .profile-wrapper (min-width: 1650px) */
-
- ul {
- padding-left: 2.5rem;
-
- > li:last-child {
- > a {
- position: static;
- }
- }
-
- .nav-item {
- text-align: left;
-
- .nav-link {
- > span {
- letter-spacing: 2px;
- }
-
- > i {
- &.unloaded {
- display: inline-block !important;
- }
- }
- }
- }
- }
-
- .sidebar-bottom {
- padding-left: 3.5rem;
- width: 100%;
-
- $icon-block-size: 2rem;
-
- &.justify-content-center {
- justify-content: flex-start !important;
- }
-
- > span,
- > button.mode-toggle,
- > a {
- @include ml-mr(0.15rem);
-
- height: $icon-block-size;
- margin-bottom: 0.5rem; /* wrap line */
- }
-
- i {
- background-color: var(--sidebar-btn-bg);
- font-size: 1rem;
- width: $icon-block-size;
- height: $icon-block-size;
- border-radius: 50%;
- position: relative;
-
- &::before {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
- }
- }
-
- .icon-border {
- top: 0.9rem;
- }
- } /* .sidebar-bottom */
- } /* #sidebar */
-} /* min-width: 1650px */
diff --git a/_sass/addon/syntax.scss b/_sass/addon/syntax.scss
deleted file mode 100644
index 361fe089..00000000
--- a/_sass/addon/syntax.scss
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-* The syntax highlight.
-*/
-
-@import "colors/light-syntax";
-@import "colors/dark-syntax";
-
-html {
- @media (prefers-color-scheme: light) {
- &:not([data-mode]),
- &[data-mode="light"] {
- @include light-syntax;
- }
-
- &[data-mode="dark"] {
- @include dark-syntax;
- }
- }
-
- @media (prefers-color-scheme: dark) {
- &:not([data-mode]),
- &[data-mode="dark"] {
- @include dark-syntax;
- }
-
- &[data-mode="light"] {
- @include light-syntax;
- }
- }
-}
-
-/* -- Codes Snippet -- */
-
-$code-radius: 6px;
-
-%code-snippet-bg {
- background: var(--highlight-bg-color);
-}
-
-%code-snippet-radius {
- border-radius: $code-radius;
-}
-
-%code-snippet-padding {
- padding-left: 1rem;
- padding-right: 1.5rem;
-}
-
-.highlighter-rouge {
- @extend %code-snippet-bg;
- @extend %code-snippet-radius;
-
- color: var(--highlighter-rouge-color);
- margin-top: 0.5rem;
- margin-bottom: 1.2em; /* Override BS Inline-code style */
-}
-
-.highlight {
- @extend %code-snippet-radius;
- @extend %code-snippet-bg;
-
- @at-root figure#{&} {
- @extend %code-snippet-bg;
- }
-
- overflow: auto;
- padding-top: 0.5rem;
- padding-bottom: 1rem;
-
- pre {
- margin-bottom: 0;
- font-size: $code-font-size;
- line-height: 1.4rem;
- word-wrap: normal; /* Fixed Safari overflow-x */
- }
-
- table {
- td pre {
- overflow: visible; /* Fixed iOS safari overflow-x */
- word-break: normal; /* Fixed iOS safari linenos code break */
- }
- }
-
- .lineno {
- padding-right: 0.5rem;
- min-width: 2.2rem;
- text-align: right;
- color: var(--highlight-lineno-color);
- -webkit-user-select: none;
- -moz-user-select: none;
- -o-user-select: none;
- user-select: none;
- }
-
- /* set the dollar sign to non-selectable */
- .gp {
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- }
-} /* .highlight */
-
-code {
- -webkit-hyphens: none;
- hyphens: none;
-
- &.highlighter-rouge {
- font-size: $code-font-size;
- padding: 3px 5px;
- word-break: break-word;
- border-radius: 4px;
- background-color: var(--inline-code-bg);
- }
-
- &.filepath {
- background-color: inherit;
- color: var(--filepath-text-color);
- font-weight: 600;
- padding: 0;
- }
-
- a > &.highlighter-rouge {
- padding-bottom: 0; /* show link's underlinke */
- color: inherit;
- }
-
- a:hover > &.highlighter-rouge {
- border-bottom: none;
- }
-
- blockquote & {
- color: inherit;
- }
-
- .highlight > & {
- color: transparent;
- }
-}
-
-td.rouge-code {
- @extend %code-snippet-padding;
-
- /*
- Prevent some browser extends from
- changing the URL string of code block.
- */
- a {
- color: inherit !important;
- border-bottom: none !important;
- pointer-events: none;
- }
-}
-
-/* Hide line numbers for default, console, and terminal code snippets */
-div {
- &[class^="highlighter-rouge"],
- &.nolineno,
- &.language-plaintext.highlighter-rouge,
- &.language-console.highlighter-rouge,
- &.language-terminal.highlighter-rouge {
- pre.lineno {
- display: none;
- }
-
- td.rouge-code {
- padding-left: 1.5rem;
- }
- }
-}
-
-.code-header {
- @extend %no-cursor;
-
- $code-header-height: 2.25rem;
-
- border-top-left-radius: $code-radius;
- border-top-right-radius: $code-radius;
- display: flex;
- justify-content: space-between;
- align-items: center;
- height: $code-header-height;
-
- &::before {
- $dot-size: 0.75rem;
- $dot-margin: 0.5rem;
-
- content: "";
- display: inline-block;
- margin-left: 1rem;
- width: $dot-size;
- height: $dot-size;
- border-radius: 50%;
- background-color: var(--code-header-muted-color);
- box-shadow:
- ($dot-size + $dot-margin) 0 0 var(--code-header-muted-color),
- ($dot-size + $dot-margin) * 2 0 0 var(--code-header-muted-color);
- }
-
- /* the label block */
- span {
- /* label icon */
- i {
- font-size: 1rem;
- margin-right: 0.4rem;
- color: var(--code-header-icon-color);
-
- &.small {
- font-size: 70%;
- }
- }
-
- @at-root [file] #{&} > i {
- position: relative;
- top: 1px; /* center the file icon */
- }
-
- /* label text */
- &::after {
- content: attr(data-label-text);
- font-size: 0.85rem;
- font-weight: 600;
- color: var(--code-header-text-color);
- }
- }
-
- /* clipboard */
- button {
- @extend %cursor-pointer;
-
- border: 1px solid transparent;
- border-radius: $code-radius;
- height: $code-header-height;
- width: $code-header-height;
- padding: 0;
- background-color: inherit;
-
- i {
- color: var(--code-header-icon-color);
- }
-
- &[timeout] {
- &:hover {
- border-color: var(--clipboard-checked-color);
- }
-
- i {
- color: var(--clipboard-checked-color);
- }
- }
-
- &:focus {
- outline: none;
- }
-
- &:not([timeout]):hover {
- background-color: rgba(128, 128, 128, 0.37);
-
- i {
- color: white;
- }
- }
- }
-}
-
-@media all and (max-width: 576px) {
- .post-content {
- > div[class^="language-"] {
- @include ml-mr(-1.25rem);
-
- border-radius: 0;
-
- .highlight {
- padding-left: 0.25rem;
- }
-
- .code-header {
- border-radius: 0;
- padding-left: 0.4rem;
- padding-right: 0.5rem;
- }
- }
- }
-}
diff --git a/_sass/addon/variables.scss b/_sass/addon/variables.scss
deleted file mode 100644
index 99614a5b..00000000
--- a/_sass/addon/variables.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * The SCSS variables
- */
-
-/* sidebar */
-
-$sidebar-width: 260px !default; /* the basic width */
-$sidebar-width-small: 210px !default; /* screen width: >= 850px, <= 1199px (iPad landscape) */
-$sidebar-width-large: 350px !default; /* screen width: >= 1650px */
-
-/* tabs of sidebar */
-
-$tab-count: 5 !default; /* backward compatible (version <= 4.0.2) */
-$tab-height: 3rem !default;
-$tab-cursor-height: 1.6rem !default;
-$cursor-width: 2px !default; /* the cursor width of the selected tab */
-
-/* other framework sizes */
-
-$topbar-height: 3rem !default;
-$search-max-width: 210px !default;
-$footer-height: 5rem !default;
-$footer-height-mobile: 6rem !default; /* screen width: <= 576px */
-
-$main-content-max-width: 1250px !default;
-$bottom-min-height: 35rem !default;
-
-/* syntax highlight */
-
-$code-font-size: 0.85rem !default;
diff --git a/_sass/base/_base.scss b/_sass/base/_base.scss
new file mode 100644
index 00000000..6a5df78f
--- /dev/null
+++ b/_sass/base/_base.scss
@@ -0,0 +1,491 @@
+@use 'sass:list';
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+@use '../themes/light';
+@use '../themes/dark';
+
+$enable-dual: not list.index(v.$theme-options, v.$theme);
+$enable-light: v.$theme == light or $enable-dual;
+$enable-dark: v.$theme == dark or $enable-dual;
+
+@if $enable-light {
+ :root[#{v.$theme-attr}='light'] {
+ @include light.styles;
+ }
+}
+
+@if $enable-dark {
+ :root[#{v.$theme-attr}='dark'] {
+ @include dark.styles;
+ }
+}
+
+@if $enable-dual {
+ :root:not([#{v.$theme-attr}]) {
+ @include mx.color-scheme(light) {
+ @include light.styles;
+ }
+
+ @include mx.color-scheme(dark) {
+ @include dark.styles;
+ }
+ }
+}
+
+:root {
+ font-size: 16px;
+
+ @include bp.lg {
+ overflow-y: scroll;
+ }
+}
+
+body {
+ background: var(--main-bg);
+ padding: env(safe-area-inset-top) env(safe-area-inset-right)
+ env(safe-area-inset-bottom) env(safe-area-inset-left);
+ color: var(--text-color);
+ -webkit-font-smoothing: antialiased;
+ font-family: v.$font-family-base;
+}
+
+h1.dynamic-title {
+ @include bp.lt(bp.get(lg)) {
+ display: none;
+
+ ~ .content {
+ margin-top: 2.5rem;
+ }
+ }
+}
+
+main {
+ &.col-12 {
+ @include bp.xxxl {
+ padding-right: 4.5rem !important;
+ }
+ }
+}
+
+.preview-img {
+ aspect-ratio: 40 / 21;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+
+ @extend %rounded;
+
+ &:not(.no-bg) {
+ background: var(--img-bg);
+ }
+
+ img {
+ height: 100%;
+ -o-object-fit: cover;
+ object-fit: cover;
+
+ @extend %rounded;
+
+ @at-root #post-list & {
+ width: 100%;
+ }
+ }
+}
+
+.post-preview {
+ @extend %rounded;
+
+ border: 0;
+ background: var(--card-bg);
+ box-shadow: var(--card-shadow);
+
+ &::before {
+ @extend %rounded;
+
+ content: '';
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ background-color: var(--card-hover-bg);
+ opacity: 0;
+ transition: opacity 0.35s ease-in-out;
+ }
+
+ &:hover {
+ &::before {
+ opacity: 0.3;
+ }
+ }
+}
+
+.post-meta {
+ @extend %text-sm;
+
+ a {
+ &:not([class]):hover {
+ @extend %link-hover;
+ }
+ }
+
+ em {
+ @extend %normal-font-style;
+ }
+}
+
+.content {
+ font-size: 1.08rem;
+ margin-top: 2rem;
+ overflow-wrap: break-word;
+
+ @include bp.xl {
+ font-size: 1.03rem;
+ }
+
+ a {
+ &.popup {
+ @extend %no-cursor;
+ @extend %img-caption;
+ @include mx.mt-mb(0.5rem);
+
+ cursor: zoom-in;
+ }
+
+ &:not(.img-link) {
+ @extend %link-underline;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+ }
+
+ ol,
+ ul {
+ &:not([class]),
+ &.task-list {
+ -webkit-padding-start: 1.75rem;
+ padding-inline-start: 1.75rem;
+
+ li {
+ margin: 0.25rem 0;
+ padding-left: 0.25rem;
+ }
+
+ ol,
+ ul {
+ -webkit-padding-start: 1.25rem;
+ padding-inline-start: 1.25rem;
+ margin: 0.5rem 0;
+ }
+ }
+ }
+
+ ul.task-list {
+ -webkit-padding-start: 1.25rem;
+ padding-inline-start: 1.25rem;
+
+ li {
+ list-style-type: none;
+ padding-left: 0;
+
+ /* checkbox icon */
+ > i {
+ width: 2rem;
+ margin-left: -1.25rem;
+ color: var(--checkbox-color);
+
+ &.checked {
+ color: var(--checkbox-checked-color);
+ }
+ }
+
+ ul {
+ -webkit-padding-start: 1.75rem;
+ padding-inline-start: 1.75rem;
+ }
+ }
+
+ input[type='checkbox'] {
+ margin: 0 0.5rem 0.2rem -1.3rem;
+ vertical-align: middle;
+ }
+ } /* ul */
+
+ dl > dd {
+ margin-left: 1rem;
+ }
+
+ ::marker {
+ color: var(--text-muted-color);
+ }
+
+ .table-wrapper > table {
+ @include bp.lg {
+ min-width: 70%;
+ }
+ }
+} /* .content */
+
+.tag:hover {
+ @extend %tag-hover;
+}
+
+.post-tag {
+ display: inline-block;
+ min-width: 2rem;
+ text-align: center;
+ border-radius: 0.5rem;
+ border: 1px solid var(--btn-border-color);
+ padding: 0 0.4rem;
+ color: var(--text-muted-color);
+ line-height: 1.3rem;
+
+ &:not(:last-child) {
+ margin-right: 0.2rem;
+ }
+}
+
+.rounded-10 {
+ border-radius: 10px !important;
+}
+
+.img-link {
+ color: transparent;
+ display: inline-flex;
+}
+
+.shimmer {
+ overflow: hidden;
+ position: relative;
+ background: var(--img-bg);
+
+ &::before {
+ content: '';
+ position: absolute;
+ background: var(--shimmer-bg);
+ height: 100%;
+ width: 100%;
+ -webkit-animation: shimmer 1.3s infinite;
+ animation: shimmer 1.3s infinite;
+ }
+
+ @-webkit-keyframes shimmer {
+ 0% {
+ transform: translateX(-100%);
+ }
+
+ 100% {
+ transform: translateX(100%);
+ }
+ }
+
+ @keyframes shimmer {
+ 0% {
+ transform: translateX(-100%);
+ }
+
+ 100% {
+ transform: translateX(100%);
+ }
+ }
+}
+
+.embed-video {
+ width: 100%;
+ height: 100%;
+ margin-bottom: 1rem;
+ aspect-ratio: 16 / 9;
+
+ @extend %rounded;
+
+ &.twitch {
+ aspect-ratio: 310 / 189;
+ }
+
+ &.file {
+ display: block;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ margin: auto;
+ margin-bottom: 0;
+ }
+
+ @extend %img-caption;
+}
+
+.embed-audio {
+ width: 100%;
+
+ &.file {
+ display: block;
+ }
+
+ &.spotify {
+ border-radius: 14px;
+ }
+
+ @extend %img-caption;
+}
+
+/* --- Effects classes --- */
+
+.flex-grow-1 {
+ flex-grow: 1 !important;
+}
+
+.btn-box-shadow {
+ box-shadow: var(--card-shadow);
+}
+
+/* overwrite bootstrap muted */
+.text-muted {
+ color: var(--text-muted-color) !important;
+}
+
+/* Overwrite bootstrap tooltip */
+.tooltip-inner {
+ font-size: 0.7rem;
+ max-width: 220px;
+ text-align: left;
+}
+
+/* Overwrite bootstrap outline button */
+.btn.btn-outline-primary {
+ &:not(.disabled):hover {
+ border-color: #007bff !important;
+ }
+}
+
+.disabled {
+ color: rgb(206 196 196);
+ pointer-events: auto;
+ cursor: not-allowed;
+}
+
+.hide-border-bottom {
+ border-bottom: none !important;
+}
+
+.input-focus {
+ box-shadow: none;
+ border-color: var(--input-focus-border-color) !important;
+ background: center !important;
+ transition:
+ background-color 0.15s ease-in-out,
+ border-color 0.15s ease-in-out;
+}
+
+.left {
+ float: left;
+ margin: 0.75rem 1rem 1rem 0;
+}
+
+.right {
+ float: right;
+ margin: 0.75rem 0 1rem 1rem;
+}
+
+/* --- Overriding --- */
+
+/* mermaid */
+.mermaid {
+ text-align: center;
+}
+
+/* MathJax */
+mjx-container {
+ a {
+ display: inline-block;
+ }
+}
+
+@media (hover: hover) {
+ #sidebar ul > li:last-child::after {
+ transition: top 0.5s ease;
+ }
+
+ .nav-link {
+ transition: background-color 0.3s ease-in-out;
+ }
+
+ .post-preview {
+ transition: background-color 0.35s ease-in-out;
+ }
+}
+
+#mask {
+ inset: 0 0 0 0;
+}
+
+#main-wrapper {
+ position: relative;
+
+ @include mx.pl-pr(0);
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide;
+ }
+
+ @include bp.lg {
+ margin-left: v.$sidebar-width;
+ }
+
+ @include bp.xxxl {
+ margin-left: v.$sidebar-width-large;
+ }
+
+ > .container {
+ min-height: 100vh;
+
+ @include bp.lte(bp.get(md)) {
+ @include mx.max-w-100;
+ @include mx.pl-pr(0);
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ max-width: 100%;
+ }
+
+ /* Pad horizontal */
+ @include bp.between(992px, calc(#{bp.get(xl)} - 1px)) {
+ .col-lg-11 {
+ flex: 0 0 96%;
+ max-width: 96%;
+ }
+ }
+
+ @include bp.lt(bp.get(xl)) {
+ > .row {
+ justify-content: center !important;
+ }
+ }
+
+ @include bp.xxxl {
+ max-width: v.$main-content-max-width;
+
+ @include mx.pl-pr(1.75rem, true);
+ }
+ }
+}
+
+/* --- basic wrappers --- */
+
+#topbar-wrapper.row,
+#main-wrapper > .container > .row,
+#search-result-wrapper > .row {
+ @include mx.ml-mr(0);
+}
+
+#tail-wrapper {
+ @include bp.xxxl {
+ padding-right: 4.5rem !important;
+ }
+
+ > :not(script) {
+ margin-top: 3rem;
+ }
+}
diff --git a/_sass/base/_index.scss b/_sass/base/_index.scss
new file mode 100644
index 00000000..611d28ff
--- /dev/null
+++ b/_sass/base/_index.scss
@@ -0,0 +1,4 @@
+@forward 'reset';
+@forward 'base';
+@forward 'typography';
+@forward 'syntax';
diff --git a/_sass/base/_reset.scss b/_sass/base/_reset.scss
new file mode 100644
index 00000000..1e5a6294
--- /dev/null
+++ b/_sass/base/_reset.scss
@@ -0,0 +1,41 @@
+@use '../abstracts/mixins' as *;
+
+::-webkit-input-placeholder {
+ @include placeholder;
+}
+
+::-moz-placeholder {
+ @include placeholder;
+}
+
+:-ms-input-placeholder {
+ @include placeholder;
+}
+
+::-ms-input-placeholder {
+ @include placeholder;
+}
+
+::placeholder {
+ @include placeholder;
+}
+
+:focus::-webkit-input-placeholder {
+ @include placeholder-focus;
+}
+
+:focus::-moz-placeholder {
+ @include placeholder-focus;
+}
+
+:focus:-ms-input-placeholder {
+ @include placeholder-focus;
+}
+
+:focus::-ms-input-placeholder {
+ @include placeholder-focus;
+}
+
+:focus::placeholder {
+ @include placeholder-focus;
+}
diff --git a/_sass/base/_syntax.scss b/_sass/base/_syntax.scss
new file mode 100644
index 00000000..a7a5cba9
--- /dev/null
+++ b/_sass/base/_syntax.scss
@@ -0,0 +1,255 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+.highlighter-rouge {
+ color: var(--highlighter-rouge-color);
+ margin-top: 0.5rem;
+ margin-bottom: 1.2em; /* Override BS Inline-code style */
+}
+
+.highlight {
+ @extend %rounded;
+ @extend %code-snippet-bg;
+
+ overflow: auto;
+ padding-bottom: 0.75rem;
+
+ @at-root figure#{&} {
+ @extend %code-snippet-bg;
+ }
+
+ pre {
+ margin-bottom: 0;
+ font-size: v.$code-font-size;
+ line-height: 1.4rem;
+ }
+
+ table {
+ td {
+ &:first-child {
+ display: inline-block;
+ margin-left: 1rem;
+ margin-right: 0.75rem;
+ }
+
+ &:last-child {
+ padding-right: 2rem !important;
+ }
+
+ pre {
+ overflow: visible; /* Fixed iOS safari overflow-x */
+ word-break: normal; /* Fixed iOS safari linenos code break */
+ }
+ }
+ }
+
+ .lineno {
+ text-align: right;
+ color: var(--highlight-lineno-color);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+} /* .highlight */
+
+code {
+ -webkit-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+ color: var(--code-color);
+
+ &.highlighter-rouge {
+ font-size: v.$code-font-size;
+ padding: 3px 5px;
+ overflow-wrap: break-word;
+ border-radius: v.$radius-sm;
+ background-color: var(--inline-code-bg);
+ }
+
+ &.filepath {
+ background-color: inherit;
+ color: var(--filepath-text-color);
+ font-weight: 600;
+ padding: 0;
+ }
+
+ a > &.highlighter-rouge {
+ padding-bottom: 0; /* show link's underline */
+ color: inherit;
+ }
+
+ a:hover > &.highlighter-rouge {
+ border-bottom: none;
+ }
+
+ blockquote & {
+ color: inherit;
+ }
+}
+
+td.rouge-code {
+ @extend %code-snippet-padding;
+
+ /*
+ Prevent some browser extends from
+ changing the URL string of code block.
+ */
+ a {
+ color: inherit !important;
+ border-bottom: none !important;
+ pointer-events: none;
+ }
+}
+
+div[class^='language-'] {
+ @extend %rounded;
+ @extend %code-snippet-bg;
+
+ box-shadow: var(--language-border-color) 0 0 0 1px;
+
+ .content > & {
+ @include mx.ml-mr(-1rem);
+
+ border-radius: 0;
+
+ @include bp.sm {
+ @include mx.ml-mr(0);
+
+ border-radius: v.$radius-lg;
+ }
+ }
+
+ .code-header {
+ @include bp.sm {
+ @include mx.ml-mr(0);
+
+ $dot-margin: 1rem;
+
+ &::before {
+ content: '';
+ display: inline-block;
+ margin-left: $dot-margin;
+ width: v.$code-dot-size;
+ height: v.$code-dot-size;
+ border-radius: 50%;
+ background-color: var(--code-header-muted-color);
+ box-shadow:
+ (v.$code-dot-size + v.$code-dot-gap) 0 0
+ var(--code-header-muted-color),
+ (v.$code-dot-size + v.$code-dot-gap) * 2 0 0
+ var(--code-header-muted-color);
+ }
+
+ span {
+ // center the text of label
+ margin-left: calc(($dot-margin + v.$code-dot-size) / 2 * -1);
+ }
+ }
+ }
+
+ .highlight {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+}
+
+/* Hide line numbers for default, console, and terminal code snippets */
+div {
+ &.nolineno,
+ &.language-plaintext,
+ &.language-console,
+ &.language-terminal {
+ td:first-child {
+ padding: 0 !important;
+ margin-right: 0;
+
+ .lineno {
+ display: none;
+ }
+ }
+ }
+}
+
+.code-header {
+ @extend %no-cursor;
+
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: v.$code-header-height;
+ margin-left: 0.75rem;
+ margin-right: 0.25rem;
+
+ /* the label block */
+ span {
+ line-height: v.$code-header-height;
+
+ /* label icon */
+ i {
+ font-size: 1rem;
+ width: v.$code-icon-width;
+ color: var(--code-header-icon-color);
+
+ &.small {
+ font-size: 70%;
+ }
+ }
+
+ @at-root [file] #{&} > i {
+ position: relative;
+ top: 1px; /* center the file icon */
+ }
+
+ /* label text */
+ &::after {
+ content: attr(data-label-text);
+ font-size: 0.85rem;
+ font-weight: 600;
+ color: var(--code-header-text-color);
+ }
+ }
+
+ /* clipboard */
+ button {
+ @extend %cursor-pointer;
+ @extend %rounded;
+
+ border: 1px solid transparent;
+ height: 2rem;
+ width: 2rem;
+ margin-right: 0.125rem;
+ padding: 0;
+ background-color: inherit;
+
+ i {
+ color: var(--code-header-icon-color);
+ }
+
+ &[timeout] {
+ &:hover {
+ border-color: var(--clipboard-checked-color);
+ }
+
+ i {
+ font-size: 90%;
+ color: var(--clipboard-checked-color);
+ }
+ }
+
+ &:focus {
+ outline: none;
+ }
+
+ &:not([timeout]):hover {
+ background-color: rgb(128 128 128 / 37%);
+
+ i {
+ color: white;
+ }
+ }
+ }
+}
diff --git a/_sass/base/_typography.scss b/_sass/base/_typography.scss
new file mode 100644
index 00000000..8b679726
--- /dev/null
+++ b/_sass/base/_typography.scss
@@ -0,0 +1,264 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+@for $i from 1 through 5 {
+ h#{$i} {
+ @extend %heading;
+
+ @if $i > 1 {
+ @extend %anchor;
+ }
+
+ @if $i < 5 {
+ $size-factor: 0.25rem;
+
+ @if $i > 1 {
+ $size-factor: 0.18rem;
+
+ main & {
+ @if $i == 2 {
+ margin: 2.5rem 0 1.25rem;
+ } @else {
+ margin: 2rem 0 1rem;
+ }
+ }
+ }
+
+ font-size: 1rem + (5 - $i) * $size-factor;
+ } @else {
+ font-size: 1.05rem;
+ }
+ }
+}
+
+a {
+ @extend %link-color;
+
+ text-decoration: none;
+}
+
+img {
+ max-width: 100%;
+ height: auto;
+ transition: all 0.35s ease-in-out;
+
+ .blur & {
+ $blur: 20px;
+
+ -webkit-filter: blur($blur);
+ filter: blur($blur);
+ }
+}
+
+blockquote {
+ border-left: 0.125rem solid var(--blockquote-border-color);
+ padding-left: 1rem;
+ color: var(--blockquote-text-color);
+ margin-top: 0.5rem;
+
+ > p:last-child {
+ margin-bottom: 0;
+ }
+
+ &[class^='prompt-'] {
+ border-left: 0;
+ position: relative;
+ padding: 1rem 1rem 1rem 3rem;
+ color: var(--prompt-text-color);
+
+ @extend %rounded;
+
+ &::before {
+ text-align: center;
+ width: 3rem;
+ position: absolute;
+ left: 0.25rem;
+ margin-top: 0.4rem;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ }
+ }
+
+ @include mx.prompt('tip', '\f0eb', $fa-style: 'regular');
+ @include mx.prompt('info', '\f06a', $rotate: 180);
+ @include mx.prompt('warning', '\f06a');
+ @include mx.prompt('danger', '\f071');
+}
+
+kbd {
+ font-family: Lato, sans-serif;
+ display: inline-block;
+ vertical-align: middle;
+ line-height: 1.3rem;
+ min-width: 1.75rem;
+ text-align: center;
+ margin: 0 0.3rem;
+ padding-top: 0.1rem;
+ color: var(--kbd-text-color);
+ background-color: var(--kbd-bg-color);
+ border-radius: v.$radius-sm;
+ border: solid 1px var(--kbd-wrap-color);
+ box-shadow: inset 0 -2px 0 var(--kbd-wrap-color);
+}
+
+hr {
+ border-color: var(--main-border-color);
+ opacity: 1;
+}
+
+footer {
+ background-color: var(--main-bg);
+ height: v.$footer-height;
+ border-top: 1px solid var(--main-border-color);
+
+ @extend %text-xs;
+
+ a {
+ @extend %text-highlight;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+
+ em {
+ @extend %text-highlight;
+ }
+
+ p {
+ text-align: center;
+ margin-bottom: 0;
+ }
+}
+
+/* fontawesome icons */
+i {
+ &.far,
+ &.fas {
+ @extend %no-cursor;
+ }
+}
+
+sup {
+ @extend %sup-fn-target;
+}
+
+main {
+ line-height: 1.75;
+
+ h1 {
+ margin-top: 2rem;
+
+ @include bp.lg {
+ margin-top: 3rem;
+ }
+ }
+
+ p {
+ > a.popup {
+ &:not(.normal):not(.left):not(.right) {
+ @include mx.align-center;
+ }
+ }
+ }
+
+ .categories,
+ #tags,
+ #archives {
+ a:not(:hover) {
+ @extend %no-bottom-border;
+ }
+ }
+
+ @include bp.lte(bp.get(sm)) {
+ .content {
+ > blockquote[class^='prompt-'] {
+ @include mx.ml-mr(-1rem);
+
+ border-radius: 0;
+ max-width: none;
+ }
+ }
+ }
+}
+
+.footnotes > ol {
+ padding-left: 2rem;
+ margin-top: 0.5rem;
+
+ > li {
+ &:not(:last-child) {
+ margin-bottom: 0.3rem;
+ }
+
+ @extend %sup-fn-target;
+
+ > p {
+ margin-left: 0.25em;
+
+ @include mx.mt-mb(0);
+ }
+ }
+}
+
+.footnote {
+ @at-root a#{&} {
+ @include mx.ml-mr(1px);
+ @include mx.pl-pr(2px);
+
+ border-bottom-style: none !important;
+ }
+}
+
+.reversefootnote {
+ @at-root a#{&} {
+ font-size: 0.6rem;
+ line-height: 1;
+ position: relative;
+ bottom: 0.25em;
+ margin-left: 0.25em;
+ border-bottom-style: none !important;
+ }
+}
+
+/* --- Begin of Markdown table style --- */
+
+/* it will be created by Liquid */
+.table-wrapper {
+ overflow-x: auto;
+ margin-bottom: 1.5rem;
+
+ > table {
+ min-width: 100%;
+ overflow-x: auto;
+ border-spacing: 0;
+
+ thead {
+ border-bottom: solid 2px rgb(210 215 217 / 75%);
+
+ th {
+ @extend %table-cell;
+ }
+ }
+
+ tbody {
+ tr {
+ border-bottom: 1px solid var(--tb-border-color);
+
+ &:nth-child(2n) {
+ background-color: var(--tb-even-bg);
+ }
+
+ &:nth-child(2n + 1) {
+ background-color: var(--tb-odd-bg);
+ }
+
+ td {
+ @extend %table-cell;
+ }
+ }
+ } /* tbody */
+ } /* table */
+}
diff --git a/_sass/colors/dark-syntax.scss b/_sass/colors/dark-syntax.scss
deleted file mode 100644
index 3912ed39..00000000
--- a/_sass/colors/dark-syntax.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The syntax dark mode styles.
- */
-
-@mixin dark-syntax {
- --highlight-bg-color: #252525;
- --highlighter-rouge-color: #de6b18;
- --highlight-lineno-color: #6c6c6d;
- --inline-code-bg: #272822;
- --code-header-text-color: #6a6a6a;
- --code-header-muted-color: rgb(60, 60, 60);
- --code-header-icon-color: rgb(86, 86, 86);
- --clipboard-checked-color: #2bcc2b;
- --filepath-text-color: #bdbdbd;
-
- pre { color: #bfbfbf; } /* override Bootstrap */
-
- .highlight {
- .gp { color: #818c96; }
- }
-
- /* syntax highlight colors from https://raw.githubusercontent.com/jwarby/pygments-css/master/monokai.css */
-
- .highlight pre { background-color: var(--highlight-bg-color); }
- .highlight .hll { background-color: var(--highlight-bg-color); }
- .highlight .c { color: #75715e; } /* Comment */
- .highlight .err { color: #960050; background-color: #1e0010; } /* Error */
- .highlight .k { color: #66d9ef; } /* Keyword */
- .highlight .l { color: #ae81ff; } /* Literal */
- .highlight .n { color: #f8f8f2; } /* Name */
- .highlight .o { color: #f92672; } /* Operator */
- .highlight .p { color: #f8f8f2; } /* Punctuation */
- .highlight .cm { color: #75715e; } /* Comment.Multiline */
- .highlight .cp { color: #75715e; } /* Comment.Preproc */
- .highlight .c1 { color: #75715e; } /* Comment.Single */
- .highlight .cs { color: #75715e; } /* Comment.Special */
- .highlight .ge { color: inherit; font-style: italic; } /* Generic.Emph */
- .highlight .gs { font-weight: bold; } /* Generic.Strong */
- .highlight .kc { color: #66d9ef; } /* Keyword.Constant */
- .highlight .kd { color: #66d9ef; } /* Keyword.Declaration */
- .highlight .kn { color: #f92672; } /* Keyword.Namespace */
- .highlight .kp { color: #66d9ef; } /* Keyword.Pseudo */
- .highlight .kr { color: #66d9ef; } /* Keyword.Reserved */
- .highlight .kt { color: #66d9ef; } /* Keyword.Type */
- .highlight .ld { color: #e6db74; } /* Literal.Date */
- .highlight .m { color: #ae81ff; } /* Literal.Number */
- .highlight .s { color: #e6db74; } /* Literal.String */
- .highlight .na { color: #a6e22e; } /* Name.Attribute */
- .highlight .nb { color: #f8f8f2; } /* Name.Builtin */
- .highlight .nc { color: #a6e22e; } /* Name.Class */
- .highlight .no { color: #66d9ef; } /* Name.Constant */
- .highlight .nd { color: #a6e22e; } /* Name.Decorator */
- .highlight .ni { color: #f8f8f2; } /* Name.Entity */
- .highlight .ne { color: #a6e22e; } /* Name.Exception */
- .highlight .nf { color: #a6e22e; } /* Name.Function */
- .highlight .nl { color: #f8f8f2; } /* Name.Label */
- .highlight .nn { color: #f8f8f2; } /* Name.Namespace */
- .highlight .nx { color: #a6e22e; } /* Name.Other */
- .highlight .py { color: #f8f8f2; } /* Name.Property */
- .highlight .nt { color: #f92672; } /* Name.Tag */
- .highlight .nv { color: #f8f8f2; } /* Name.Variable */
- .highlight .ow { color: #f92672; } /* Operator.Word */
- .highlight .w { color: #f8f8f2; } /* Text.Whitespace */
- .highlight .mf { color: #ae81ff; } /* Literal.Number.Float */
- .highlight .mh { color: #ae81ff; } /* Literal.Number.Hex */
- .highlight .mi { color: #ae81ff; } /* Literal.Number.Integer */
- .highlight .mo { color: #ae81ff; } /* Literal.Number.Oct */
- .highlight .sb { color: #e6db74; } /* Literal.String.Backtick */
- .highlight .sc { color: #e6db74; } /* Literal.String.Char */
- .highlight .sd { color: #e6db74; } /* Literal.String.Doc */
- .highlight .s2 { color: #e6db74; } /* Literal.String.Double */
- .highlight .se { color: #ae81ff; } /* Literal.String.Escape */
- .highlight .sh { color: #e6db74; } /* Literal.String.Heredoc */
- .highlight .si { color: #e6db74; } /* Literal.String.Interpol */
- .highlight .sx { color: #e6db74; } /* Literal.String.Other */
- .highlight .sr { color: #e6db74; } /* Literal.String.Regex */
- .highlight .s1 { color: #e6db74; } /* Literal.String.Single */
- .highlight .ss { color: #e6db74; } /* Literal.String.Symbol */
- .highlight .bp { color: #f8f8f2; } /* Name.Builtin.Pseudo */
- .highlight .vc { color: #f8f8f2; } /* Name.Variable.Class */
- .highlight .vg { color: #f8f8f2; } /* Name.Variable.Global */
- .highlight .vi { color: #f8f8f2; } /* Name.Variable.Instance */
- .highlight .il { color: #ae81ff; } /* Literal.Number.Integer.Long */
- .highlight .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */
- .highlight .gd { color: #f92672; background-color: #561c08; } /* Generic.Deleted & Diff Deleted */
- .highlight .gi { color: #a6e22e; background-color: #0b5858; } /* Generic.Inserted & Diff Inserted */
-}
diff --git a/_sass/colors/dark-typography.scss b/_sass/colors/dark-typography.scss
deleted file mode 100644
index 7b7a39fe..00000000
--- a/_sass/colors/dark-typography.scss
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * The main dark mode styles
- */
-
-@mixin dark-scheme {
- /* Framework color */
- --body-bg: var(--main-bg);
- --mask-bg: rgb(68, 69, 70);
- --main-bg: rgb(27, 27, 30);
- --main-border-color: rgb(44, 45, 45);
-
- /* Common color */
- --text-color: rgb(175, 176, 177);
- --text-muted-color: rgb(107, 116, 124);
- --heading-color: #cccccc;
- --blockquote-border-color: rgb(66, 66, 66);
- --blockquote-text-color: rgb(117, 117, 117);
- --link-color: rgb(138, 180, 248);
- --link-underline-color: rgb(82, 108, 150);
- --button-bg: rgb(39, 40, 43);
- --btn-border-color: rgb(63, 65, 68);
- --btn-backtotop-color: var(--text-color);
- --btn-backtotop-border-color: var(--btn-border-color);
- --btn-box-shadow: var(--main-bg);
- --card-header-bg: rgb(51, 50, 50);
- --label-color: rgb(108, 117, 125);
- --checkbox-color: rgb(118, 120, 121);
- --checkbox-checked-color: var(--link-color);
-
- /* Sidebar */
- --sidebar-bg: radial-gradient(circle, #242424 0%, #1d1f27 100%);
- --sidebar-muted-color: #6d6c6b;
- --sidebar-active-color: rgb(255, 255, 255, 0.8);
- --nav-cursor-color: rgb(183, 182, 182);
- --sidebar-btn-bg: rgb(117, 116, 116, 0.2);
-
- /* Topbar */
- --topbar-text-color: var(--text-color);
- --topbar-wrapper-bg: rgb(39, 40, 43);
- --search-wrapper-bg: rgb(34, 34, 39);
- --search-wrapper-border-color: rgb(34, 34, 39);
- --search-icon-color: rgb(100, 102, 105);
- --input-focus-border-color: rgb(112, 114, 115);
-
- /* Home page */
- --post-list-text-color: rgb(175, 176, 177);
- --btn-patinator-text-color: var(--text-color);
- --btn-paginator-hover-color: rgb(64, 65, 66);
- --btn-paginator-border-color: var(--btn-border-color);
- --btn-text-color: var(--text-color);
- --pin-bg: rgb(34, 35, 37);
- --pin-color: inherit;
-
- /* Posts */
- --toc-highlight: rgb(116, 178, 243);
- --tag-bg: rgb(41, 40, 40);
- --tag-hover: rgb(43, 56, 62);
- --tb-odd-bg: rgba(42, 47, 53, 0.52); /* odd rows of the posts' table */
- --tb-even-bg: rgb(31, 31, 34); /* even rows of the posts' table */
- --tb-border-color: var(--tb-odd-bg);
- --footnote-target-bg: rgb(63, 81, 181);
- --btn-share-color: #6c757d;
- --btn-share-hover-color: #bfc1ca;
- --relate-post-date: var(--text-muted-color);
- --card-bg: rgb(39, 40, 43);
- --card-border-color: rgb(53, 53, 60);
- --card-box-shadow: var(--main-bg);
- --preview-img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);
- --kbd-wrap-color: #6a6a6a;
- --kbd-text-color: #d3d3d3;
- --kbd-bg-color: #242424;
- --prompt-text-color: rgb(216, 212, 212, 0.75);
- --prompt-tip-bg: rgba(77, 187, 95, 0.2);
- --prompt-tip-icon-color: rgb(5, 223, 5, 0.68);
- --prompt-info-bg: rgb(7, 59, 104, 0.8);
- --prompt-info-icon-color: #0075d1;
- --prompt-warning-bg: rgb(90, 69, 3, 0.95);
- --prompt-warning-icon-color: rgb(255, 165, 0, 0.8);
- --prompt-danger-bg: rgb(86, 28, 8, 0.8);
- --prompt-danger-icon-color: #cd0202;
-
- /* tags */
- --tag-border: rgb(59, 79, 88);
- --tag-shadow: rgb(32, 33, 33);
- --search-tag-bg: var(--tag-bg);
- --dash-color: rgb(63, 65, 68);
-
- /* categories */
- --categories-border: rgb(64, 66, 69);
- --categories-hover-bg: rgb(73, 75, 76);
- --categories-icon-hover-color: white;
-
- /* archives */
- --timeline-node-bg: rgb(150, 152, 156);
- --timeline-color: rgb(63, 65, 68);
- --timeline-year-dot-color: var(--timeline-color);
-
- .post img[data-src] {
- -webkit-filter: brightness(95%);
- filter: brightness(95%);
- }
-
- hr {
- border-color: var(--main-border-color);
- }
-
- /* posts' toc, override BS */
- nav[data-toggle="toc"] .nav-link.active,
- nav[data-toggle="toc"] .nav-link.active:focus,
- nav[data-toggle="toc"] .nav-link.active:hover,
- nav[data-toggle="toc"] .nav > li > a:focus,
- nav[data-toggle="toc"] .nav > li > a:hover {
- color: var(--toc-highlight) !important;
- border-left-color: var(--toc-highlight) !important;
- }
-
- /* categories */
- .categories.card,
- .list-group-item {
- background-color: var(--card-bg);
- }
-
- .categories {
- .card-header {
- background-color: var(--card-header-bg);
- }
-
- .list-group-item {
- border-left: none;
- border-right: none;
- padding-left: 2rem;
- border-color: var(--categories-border);
-
- &:last-child {
- border-bottom-color: var(--card-bg);
- }
- }
- }
-
- #archives li:nth-child(odd) {
- background-image:
- linear-gradient(
- to left,
- rgb(26, 26, 30),
- rgb(39, 39, 45),
- rgb(39, 39, 45),
- rgb(39, 39, 45),
- rgb(26, 26, 30)
- );
- }
-
- color-scheme: dark;
-
- #disqus_thread { /* stylelint-disable-line selector-id-pattern */
- color-scheme: none;
- }
-} /* dark-scheme */
diff --git a/_sass/colors/light-syntax.scss b/_sass/colors/light-syntax.scss
deleted file mode 100644
index aeac91fa..00000000
--- a/_sass/colors/light-syntax.scss
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The syntax light mode code snippet colors.
- */
-
-@mixin light-syntax {
- /* see: */
- .highlight .hll { background-color: #ffffcc; }
- .highlight .c { color: #999988; font-style: italic; } /* Comment */
- .highlight .err { color: #a61717; background-color: #e3d2d2; } /* Error */
- .highlight .k { color: #000000; font-weight: bold; } /* Keyword */
- .highlight .o { color: #000000; font-weight: bold; } /* Operator */
- .highlight .cm { color: #999988; font-style: italic; } /* Comment.Multiline */
- .highlight .cp { color: #999999; font-weight: bold; font-style: italic; } /* Comment.Preproc */
- .highlight .c1 { color: #999988; font-style: italic; } /* Comment.Single */
- .highlight .cs { color: #999999; font-weight: bold; font-style: italic; } /* Comment.Special */
- .highlight .gd { color: #d01040; background-color: #ffdddd; } /* Generic.Deleted */
- .highlight .ge { color: #000000; font-style: italic; } /* Generic.Emph */
- .highlight .gr { color: #aa0000; } /* Generic.Error */
- .highlight .gh { color: #999999; } /* Generic.Heading */
- .highlight .gi { color: #008080; background-color: #ddffdd; } /* Generic.Inserted */
- .highlight .go { color: #888888; } /* Generic.Output */
- .highlight .gp { color: #555555; } /* Generic.Prompt */
- .highlight .gs { font-weight: bold; } /* Generic.Strong */
- .highlight .gu { color: #aaaaaa; } /* Generic.Subheading */
- .highlight .gt { color: #aa0000; } /* Generic.Traceback */
- .highlight .kc { color: #000000; font-weight: bold; } /* Keyword.Constant */
- .highlight .kd { color: #000000; font-weight: bold; } /* Keyword.Declaration */
- .highlight .kn { color: #000000; font-weight: bold; } /* Keyword.Namespace */
- .highlight .kp { color: #000000; font-weight: bold; } /* Keyword.Pseudo */
- .highlight .kr { color: #000000; font-weight: bold; } /* Keyword.Reserved */
- .highlight .kt { color: #445588; font-weight: bold; } /* Keyword.Type */
- .highlight .m { color: #009999; } /* Literal.Number */
- .highlight .s { color: #d01040; } /* Literal.String */
- .highlight .na { color: #008080; } /* Name.Attribute */
- .highlight .nb { color: #0086b3; } /* Name.Builtin */
- .highlight .nc { color: #445588; font-weight: bold; } /* Name.Class */
- .highlight .no { color: #008080; } /* Name.Constant */
- .highlight .nd { color: #3c5d5d; font-weight: bold; } /* Name.Decorator */
- .highlight .ni { color: #800080; } /* Name.Entity */
- .highlight .ne { color: #990000; font-weight: bold; } /* Name.Exception */
- .highlight .nf { color: #990000; font-weight: bold; } /* Name.Function */
- .highlight .nl { color: #990000; font-weight: bold; } /* Name.Label */
- .highlight .nn { color: #555555; } /* Name.Namespace */
- .highlight .nt { color: #000080; } /* Name.Tag */
- .highlight .nv { color: #008080; } /* Name.Variable */
- .highlight .ow { color: #000000; font-weight: bold; } /* Operator.Word */
- .highlight .w { color: #bbbbbb; } /* Text.Whitespace */
- .highlight .mf { color: #009999; } /* Literal.Number.Float */
- .highlight .mh { color: #009999; } /* Literal.Number.Hex */
- .highlight .mi { color: #009999; } /* Literal.Number.Integer */
- .highlight .mo { color: #009999; } /* Literal.Number.Oct */
- .highlight .sb { color: #d01040; } /* Literal.String.Backtick */
- .highlight .sc { color: #d01040; } /* Literal.String.Char */
- .highlight .sd { color: #d01040; } /* Literal.String.Doc */
- .highlight .s2 { color: #d01040; } /* Literal.String.Double */
- .highlight .se { color: #d01040; } /* Literal.String.Escape */
- .highlight .sh { color: #d01040; } /* Literal.String.Heredoc */
- .highlight .si { color: #d01040; } /* Literal.String.Interpol */
- .highlight .sx { color: #d01040; } /* Literal.String.Other */
- .highlight .sr { color: #009926; } /* Literal.String.Regex */
- .highlight .s1 { color: #d01040; } /* Literal.String.Single */
- .highlight .ss { color: #990073; } /* Literal.String.Symbol */
- .highlight .bp { color: #999999; } /* Name.Builtin.Pseudo */
- .highlight .vc { color: #008080; } /* Name.Variable.Class */
- .highlight .vg { color: #008080; } /* Name.Variable.Global */
- .highlight .vi { color: #008080; } /* Name.Variable.Instance */
- .highlight .il { color: #009999; } /* Literal.Number.Integer.Long */
-
- /* --- custom light colors --- */
- --highlight-bg-color: #f7f7f7;
- --highlighter-rouge-color: #2f2f2f;
- --highlight-lineno-color: #c2c6cc;
- --inline-code-bg: #f3f3f3;
- --code-header-text-color: #a3a3b1;
- --code-header-muted-color: #ebebeb;
- --code-header-icon-color: #d1d1d1;
- --clipboard-checked-color: #43c743;
-
- [class^="prompt-"] {
- --inline-code-bg: #fbfafa;
- --highlighter-rouge-color: rgb(82, 82, 82);
- }
-} /* light-syntax */
diff --git a/_sass/colors/light-typography.scss b/_sass/colors/light-typography.scss
deleted file mode 100644
index 5e653f95..00000000
--- a/_sass/colors/light-typography.scss
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The syntax light mode typography colors
- */
-
-@mixin light-scheme {
- /* Framework color */
- --body-bg: #fafafa;
- --mask-bg: #c1c3c5;
- --main-bg: white;
- --main-border-color: #f3f3f3;
-
- /* Common color */
- --text-color: #34343c;
- --text-muted-color: gray;
- --heading-color: black;
- --blockquote-border-color: #eeeeee;
- --blockquote-text-color: #9a9a9a;
- --link-color: #2a408e;
- --link-underline-color: #dee2e6;
- --button-bg: #ffffff;
- --btn-border-color: #e9ecef;
- --btn-backtotop-color: #686868;
- --btn-backtotop-border-color: #f1f1f1;
- --btn-box-shadow: #eaeaea;
- --checkbox-color: #c5c5c5;
- --checkbox-checked-color: #07a8f7;
-
- /* Sidebar */
- --sidebar-bg: #eeeeee;
- --sidebar-muted-color: #a2a19f;
- --sidebar-active-color: #424242;
- --nav-cursor-color: #757575;
- --sidebar-btn-bg: white;
-
- /* Topbar */
- --topbar-text-color: rgb(78, 78, 78);
- --topbar-wrapper-bg: white;
- --search-wrapper-bg: rgb(245, 245, 245, 0.5);
- --search-wrapper-border-color: rgb(245, 245, 245);
- --search-tag-bg: #f8f9fa;
- --search-icon-color: #c2c6cc;
- --input-focus-border-color: var(--btn-border-color);
-
- /* Home page */
- --post-list-text-color: dimgray;
- --btn-patinator-text-color: #555555;
- --btn-paginator-hover-color: var(--sidebar-bg);
- --btn-paginator-border-color: var(--sidebar-bg);
- --btn-text-color: #676666;
- --pin-bg: #f5f5f5;
- --pin-color: #999fa4;
-
- /* Posts */
- --btn-share-hover-color: var(--link-color);
- --card-border-color: #f1f1f1;
- --card-box-shadow: rgba(234, 234, 234, 0.76);
- --label-color: #616161;
- --relate-post-date: rgba(30, 55, 70, 0.4);
- --footnote-target-bg: lightcyan;
- --tag-bg: rgba(0, 0, 0, 0.075);
- --tag-border: #dee2e6;
- --tag-shadow: var(--btn-border-color);
- --tag-hover: rgb(222, 226, 230);
- --tb-odd-bg: #fbfcfd;
- --tb-border-color: #eaeaea;
- --dash-color: silver;
- --preview-img-bg: radial-gradient(circle, rgb(255, 255, 255) 0%, rgb(249, 249, 249) 100%);
- --kbd-wrap-color: #bdbdbd;
- --kbd-text-color: var(--text-color);
- --kbd-bg-color: white;
- --prompt-text-color: rgb(46, 46, 46, 0.77);
- --prompt-tip-bg: rgb(123, 247, 144, 0.2);
- --prompt-tip-icon-color: #03b303;
- --prompt-info-bg: #e1f5fe;
- --prompt-info-icon-color: #0070cb;
- --prompt-warning-bg: rgb(255, 243, 205);
- --prompt-warning-icon-color: #ef9c03;
- --prompt-danger-bg: rgb(248, 215, 218, 0.56);
- --prompt-danger-icon-color: #df3c30;
-
- [class^="prompt-"] {
- --link-underline-color: rgb(219, 216, 216);
- }
-
- /* Categories */
- --categories-hover-bg: var(--btn-border-color);
- --categories-icon-hover-color: darkslategray;
-
- /* Archive */
- --timeline-color: rgba(0, 0, 0, 0.075);
- --timeline-node-bg: #c2c6cc;
- --timeline-year-dot-color: #ffffff;
-} /* light-scheme */
diff --git a/_sass/components/_buttons.scss b/_sass/components/_buttons.scss
new file mode 100644
index 00000000..bd7363e5
--- /dev/null
+++ b/_sass/components/_buttons.scss
@@ -0,0 +1,51 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+
+#back-to-top {
+ visibility: hidden;
+ opacity: 0;
+ z-index: 1;
+ cursor: pointer;
+ position: fixed;
+ right: 1rem;
+ bottom: calc(v.$footer-height-large - v.$back2top-size / 2);
+ background: var(--button-bg);
+ color: var(--btn-backtotop-color);
+ padding: 0;
+ width: v.$back2top-size;
+ height: v.$back2top-size;
+ border-radius: 50%;
+ border: 1px solid var(--btn-backtotop-border-color);
+ transition: opacity 0.5s ease-in-out, transform 0.2s ease-out;
+
+ @include bp.lg {
+ right: 5%;
+ bottom: calc(v.$footer-height - v.$back2top-size / 2);
+ }
+
+ @include bp.xxl {
+ right: calc((100vw - v.$sidebar-width - 1140px) / 2 + 3rem);
+ }
+
+ @include bp.xxxl {
+ right: calc(
+ (100vw - v.$sidebar-width-large - v.$main-content-max-width) / 2 + 2rem
+ );
+ }
+
+ &:hover {
+ transform: translate3d(0, -5px, 0);
+ -webkit-transform: translate3d(0, -5px, 0);
+ }
+
+ i {
+ line-height: v.$back2top-size;
+ position: relative;
+ bottom: 2px;
+ }
+
+ &.show {
+ opacity: 1;
+ visibility: visible;
+ }
+}
diff --git a/_sass/components/_index.scss b/_sass/components/_index.scss
new file mode 100644
index 00000000..ffbb9083
--- /dev/null
+++ b/_sass/components/_index.scss
@@ -0,0 +1,2 @@
+@forward 'buttons';
+@forward 'popups';
diff --git a/_sass/components/_popups.scss b/_sass/components/_popups.scss
new file mode 100644
index 00000000..2511b486
--- /dev/null
+++ b/_sass/components/_popups.scss
@@ -0,0 +1,161 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+/* PWA update popup */
+#notification {
+ @-webkit-keyframes popup {
+ from {
+ opacity: 0;
+ bottom: 10%;
+ }
+ }
+
+ @keyframes popup {
+ from {
+ opacity: 0;
+ bottom: 10%;
+ }
+ }
+
+ &.toast {
+ &.show {
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ position: fixed;
+ left: 50%;
+ bottom: 30%;
+ transform: translateX(-50%);
+ -webkit-animation: popup 0.8s;
+ animation: popup 0.8s;
+ }
+
+ .toast-body {
+ line-height: 1.25rem;
+ font-family: v.$font-family-heading;
+ }
+
+ button[aria-label='Update'] {
+ font-size: 0.8rem;
+ }
+
+ .btn-close {
+ font-size: 0.625rem;
+ }
+ }
+}
+
+#toc-popup {
+ $slide-in: slide-in 0.3s ease-out;
+ $slide-out: slide-out 0.3s ease-out;
+ $curtain-height: 2rem;
+ $backdrop: blur(5px);
+
+ border-color: var(--toc-popup-border-color);
+ border-width: 1px;
+ border-radius: v.$radius-lg;
+ color: var(--text-color);
+ background: var(--card-bg);
+ margin-top: v.$topbar-height;
+ min-width: 20rem;
+ font-size: 1.05rem;
+
+ @include bp.sm {
+ max-width: 32rem;
+ }
+
+ &[open] {
+ -webkit-animation: $slide-in;
+ animation: $slide-in;
+ }
+
+ &[closing] {
+ -webkit-animation: $slide-out;
+ animation: $slide-out;
+ }
+
+ @include bp.lg {
+ left: v.$sidebar-width;
+ }
+
+ .header {
+ @extend %btn-color;
+
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ background-color: inherit;
+ border-bottom: 1px solid var(--main-border-color);
+
+ .label {
+ font-family: v.$font-family-heading;
+ }
+ }
+
+ button {
+ font-size: 0.75rem;
+
+ &:focus-visible {
+ box-shadow: none;
+ }
+ }
+
+ ul {
+ list-style-type: none;
+ padding-left: 0;
+
+ li {
+ ul,
+ & + li {
+ margin-top: 0.25rem;
+ }
+
+ a {
+ display: flex;
+ line-height: 1.5;
+ padding: 0.375rem 0;
+ padding-right: 1.125rem;
+
+ &.toc-link::before {
+ display: none;
+ }
+ }
+ }
+ }
+
+ @for $i from 2 through 4 {
+ .node-name--H#{$i} {
+ padding-left: 1.125rem * ($i - 1);
+ }
+ }
+
+ .is-active-link {
+ color: var(--toc-highlight) !important;
+ font-weight: 600;
+ }
+
+ &::-webkit-backdrop {
+ -webkit-backdrop-filter: $backdrop;
+ backdrop-filter: $backdrop;
+ }
+
+ &::backdrop {
+ -webkit-backdrop-filter: $backdrop;
+ backdrop-filter: $backdrop;
+ }
+
+ &::after {
+ display: flex;
+ content: '';
+ position: relative;
+ background: linear-gradient(transparent, var(--card-bg) 70%);
+ height: $curtain-height;
+ }
+
+ #toc-popup-content {
+ overflow: auto;
+ max-height: calc(100vh - 4 * v.$topbar-height);
+ font-family: v.$font-family-heading;
+ margin-bottom: -$curtain-height;
+ }
+}
diff --git a/_sass/jekyll-theme-chirpy.scss b/_sass/jekyll-theme-chirpy.scss
deleted file mode 100644
index e1c42bc2..00000000
--- a/_sass/jekyll-theme-chirpy.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-/*!
- * The styles for Jekyll theme Chirpy
- *
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy)
- * © 2019 Cotes Chung
- * MIT Licensed
- */
-
-@import
- "colors/light-typography",
- "colors/dark-typography",
-
- "addon/module",
- "addon/variables",
- "variables-hook",
- "addon/syntax",
- "addon/commons",
-
- "layout/home",
- "layout/post",
- "layout/tags",
- "layout/archives",
- "layout/categories",
- "layout/category-tag";
diff --git a/_sass/layout/_footer.scss b/_sass/layout/_footer.scss
new file mode 100644
index 00000000..fd49ea04
--- /dev/null
+++ b/_sass/layout/_footer.scss
@@ -0,0 +1,36 @@
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/variables' as v;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+footer {
+ background-color: var(--main-bg);
+ height: v.$footer-height;
+ border-top: 1px solid var(--main-border-color);
+
+ @extend %text-xs;
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide;
+
+ height: v.$footer-height-large;
+ padding: 1.5rem 0;
+ }
+
+ a {
+ @extend %text-highlight;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+
+ em {
+ @extend %text-highlight;
+ }
+
+ p {
+ text-align: center;
+ margin-bottom: 0;
+ }
+}
diff --git a/_sass/layout/_index.scss b/_sass/layout/_index.scss
new file mode 100644
index 00000000..fa75daf9
--- /dev/null
+++ b/_sass/layout/_index.scss
@@ -0,0 +1,4 @@
+@forward 'sidebar';
+@forward 'topbar';
+@forward 'panel';
+@forward 'footer';
diff --git a/_sass/layout/_panel.scss b/_sass/layout/_panel.scss
new file mode 100644
index 00000000..c0d5e9eb
--- /dev/null
+++ b/_sass/layout/_panel.scss
@@ -0,0 +1,70 @@
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+.access {
+ top: 2rem;
+ transition: top 0.2s ease-in-out;
+ margin-top: 3rem;
+
+ &:only-child {
+ position: -webkit-sticky;
+ position: sticky;
+ }
+
+ > section {
+ @extend %panel-border;
+
+ padding-left: 1rem;
+
+ &:not(:first-child) {
+ margin-top: 4rem;
+ }
+ }
+
+ .content {
+ font-size: 0.9rem;
+ }
+}
+
+#panel-wrapper {
+ /* the headings */
+ .panel-heading {
+ font-family: inherit;
+ line-height: inherit;
+
+ @include mx.label(inherit);
+ }
+
+ .post-tag {
+ line-height: 1.05rem;
+ font-size: 0.85rem;
+ border-radius: 0.8rem;
+ padding: 0.3rem 0.5rem;
+ margin: 0 0.35rem 0.5rem 0;
+
+ &:hover {
+ transition: all 0.3s ease-in;
+ }
+ }
+
+ > :last-child {
+ margin-bottom: 4rem;
+ }
+
+ @include bp.lt(bp.get(xl)) {
+ display: none;
+ }
+}
+
+#access-lastmod {
+ a {
+ color: inherit;
+
+ &:hover {
+ @extend %link-hover;
+ }
+
+ @extend %no-bottom-border;
+ }
+}
diff --git a/_sass/layout/_sidebar.scss b/_sass/layout/_sidebar.scss
new file mode 100644
index 00000000..913c5fcb
--- /dev/null
+++ b/_sass/layout/_sidebar.scss
@@ -0,0 +1,346 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+$btn-border-width: 3px;
+$btn-mb: 0.5rem;
+$sidebar-display: 'sidebar-display'; /* the attribute for sidebar display */
+
+#sidebar {
+ @include mx.pl-pr(0);
+
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100%;
+ overflow-y: auto;
+ width: v.$sidebar-width;
+ background: var(--sidebar-bg);
+
+ /* Hide scrollbar for IE, Edge and Firefox */
+ -ms-overflow-style: none; /* IE and Edge */
+ scrollbar-width: none; /* Firefox */
+
+ /* Hide scrollbar for Chrome, Safari and Opera */
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide;
+
+ transform: translateX(-#{v.$sidebar-width}); /* hide */
+ -webkit-transform: translateX(-#{v.$sidebar-width});
+
+ [#{$sidebar-display}] & {
+ transform: translateX(0);
+ }
+ }
+
+ @include bp.xxxl {
+ width: v.$sidebar-width-large;
+ }
+
+ %sidebar-link-hover {
+ &:hover {
+ color: var(--sidebar-active-color);
+ }
+ }
+
+ a {
+ @extend %sidebar-links;
+ }
+
+ #avatar {
+ display: block;
+ width: 6.5rem;
+ height: 6.5rem;
+ overflow: hidden;
+ box-shadow: var(--avatar-border-color) 0 0 0 2px;
+ transform: translateZ(0); /* fixed the zoom in Safari */
+
+ @include bp.sm {
+ width: 7rem;
+ height: 7rem;
+ }
+
+ img {
+ transition: transform 0.5s;
+
+ &:hover {
+ transform: scale(1.2);
+ }
+ }
+ }
+
+ .profile-wrapper {
+ @extend %clickable-transition;
+
+ padding-left: 2.5rem;
+ padding-right: 1.25rem;
+ margin-top: 2.5rem;
+ margin-bottom: 1rem;
+ width: 100%;
+
+ @include bp.lg {
+ margin-top: 3rem;
+ }
+
+ @include bp.xxxl {
+ margin-top: 3.5rem;
+ margin-bottom: 2.5rem;
+ padding-left: 3.5rem;
+ }
+ }
+
+ .site-title {
+ @extend %clickable-transition;
+ @extend %sidebar-link-hover;
+
+ font-family: inherit;
+ font-weight: 900;
+ font-size: 1.75rem;
+ line-height: 1.2;
+ letter-spacing: 0.25px;
+ margin-top: 1.25rem;
+ margin-bottom: 0.5rem;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+ color: var(--site-title-color);
+ }
+
+ .site-subtitle {
+ font-size: 95%;
+ color: var(--site-subtitle-color);
+ margin-top: 0.25rem;
+ word-spacing: 1px;
+ height: 3rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+
+ ul {
+ margin-bottom: 2rem;
+
+ li.nav-item {
+ opacity: 0.9;
+ width: 100%;
+
+ @include mx.pl-pr(1.5rem);
+
+ @include bp.xxxl {
+ @include mx.pl-pr(2.75rem);
+ }
+
+ a.nav-link {
+ @include mx.pt-pb(0.6rem);
+
+ display: flex;
+ align-items: center;
+ border-radius: 0.75rem;
+ font-weight: 600;
+
+ &:hover {
+ background-color: var(--sidebar-hover-bg);
+ }
+
+ i {
+ font-size: 95%;
+ opacity: 0.8;
+ margin-right: 1.5rem;
+ }
+
+ span {
+ font-size: 90%;
+ letter-spacing: 0.2px;
+ }
+ }
+
+ &.active {
+ .nav-link {
+ color: var(--sidebar-active-color);
+ background-color: var(--sidebar-hover-bg);
+
+ span {
+ opacity: 1;
+ }
+ }
+ }
+
+ &:not(:first-child) {
+ margin-top: 0.25rem;
+ }
+ }
+ }
+
+ .sidebar-bottom {
+ padding-left: 2rem;
+ padding-right: 1rem;
+ margin-bottom: 1.5rem;
+
+ @include bp.xxxl {
+ padding-left: 2.75rem;
+ margin-bottom: 1.75rem;
+ }
+
+ $btn-size: 1.75rem;
+
+ %button {
+ width: $btn-size;
+ height: $btn-size;
+ margin-bottom: $btn-mb; // multi line gap
+ border-radius: 50%;
+ color: var(--sidebar-btn-color);
+ background-color: var(--sidebar-btn-bg);
+ text-align: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ &:not(:focus-visible) {
+ box-shadow: var(--sidebar-border-color) 0 0 0 1px;
+ }
+
+ &:hover {
+ background-color: var(--sidebar-hover-bg);
+ }
+ }
+
+ > a {
+ @extend %button;
+ @extend %sidebar-link-hover;
+ @extend %clickable-transition;
+
+ &:not(:last-child) {
+ margin-right: v.$sb-btn-gap;
+
+ @include bp.xxxl {
+ margin-right: v.$sb-btn-gap-lg;
+ }
+ }
+ }
+
+ i {
+ line-height: $btn-size;
+ }
+
+ #mode-toggle {
+ @extend %button;
+ @extend %sidebar-link-hover;
+ @extend %clickable-transition;
+
+ > i {
+ display: none;
+
+ @at-root :root[data-bs-theme='light'][data-theme-persisted]
+ &[data-theme-mode='light'] {
+ display: block;
+ }
+
+ @at-root :root[data-bs-theme='dark'][data-theme-persisted]
+ &[data-theme-mode='dark'] {
+ display: block;
+ }
+
+ @at-root :root:not([data-theme-persisted]) &[data-theme-mode='system'] {
+ display: block;
+ }
+ }
+
+ @-webkit-keyframes menu-pop {
+ from {
+ opacity: 0;
+ translate: 0 0.5rem;
+ }
+
+ to {
+ opacity: 1;
+ translate: 0 0;
+ }
+ }
+
+ @keyframes menu-pop {
+ from {
+ opacity: 0;
+ translate: 0 0.5rem;
+ }
+
+ to {
+ opacity: 1;
+ translate: 0 0;
+ }
+ }
+
+ + .dropdown-menu {
+ background-color: var(--menu-bg);
+ border-color: var(--menu-border-color);
+ box-shadow: var(--menu-shadow-color) 0 1px 4px;
+ border-radius: 0.75rem !important;
+
+ &.show {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+ left: -0.25rem !important;
+ -webkit-animation: menu-pop 0.2s ease-out;
+ animation: menu-pop 0.2s ease-out;
+ }
+
+ .dropdown-item {
+ border-radius: 0.5rem;
+ color: var(--sidebar-muted-color);
+ font-size: 90%;
+
+ &.active {
+ font-weight: 600;
+ color: var(--menu-active-color);
+
+ &::after {
+ content: '\f00c';
+ font: var(--fa-font-solid);
+ font-size: 0.75rem;
+ color: var(--sidebar-btn-color);
+ margin-left: auto;
+ padding-left: 1rem;
+ }
+ }
+
+ &:active,
+ &:hover,
+ &.active {
+ background-color: var(--menu-highlight-bg);
+ }
+
+ > i {
+ color: var(--sidebar-btn-color);
+ margin-right: 0.5rem;
+ }
+ }
+ }
+ }
+
+ .icon-border {
+ @extend %no-cursor;
+ @include mx.ml-mr(0.6rem);
+
+ background-color: var(--sidebar-btn-color);
+ content: '';
+ width: $btn-border-width;
+ height: $btn-border-width;
+ border-radius: 50%;
+ margin-bottom: $btn-mb;
+ }
+ } /* .sidebar-bottom */
+} /* #sidebar */
+
+[#{$sidebar-display}] {
+ #main-wrapper {
+ @include bp.lt(bp.get(lg)) {
+ transform: translateX(v.$sidebar-width);
+ }
+ }
+}
diff --git a/_sass/layout/_topbar.scss b/_sass/layout/_topbar.scss
new file mode 100644
index 00000000..eb0aea9b
--- /dev/null
+++ b/_sass/layout/_topbar.scss
@@ -0,0 +1,86 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+#topbar-wrapper {
+ height: v.$topbar-height;
+ background-color: var(--topbar-bg);
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide(top 0.2s ease);
+
+ left: 0;
+ }
+}
+
+#topbar {
+ @extend %btn-color;
+
+ #breadcrumb {
+ font-size: 1rem;
+ color: var(--text-muted-color);
+ padding-left: 0.5rem;
+
+ a:hover {
+ @extend %link-hover;
+ }
+
+ span {
+ &:not(:last-child) {
+ &::after {
+ content: '›';
+ padding: 0 0.3rem;
+ }
+ }
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ display: none;
+ }
+
+ @include bp.between(bp.get(lg), calc(#{bp.get(xl)} - 1px)) {
+ width: 65%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: keep-all;
+ white-space: nowrap;
+ }
+ }
+
+ @include bp.lte(bp.get(md)) {
+ @include mx.max-w-100;
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ max-width: 100%;
+ }
+}
+
+#topbar-title {
+ display: none;
+ font-size: 1.1rem;
+ font-weight: 600;
+ font-family: sans-serif;
+ color: var(--topbar-text-color);
+ text-align: center;
+ width: 70%;
+ word-break: keep-all;
+
+ @include bp.lt(bp.get(lg)) {
+ display: block;
+ }
+
+ @include bp.lg {
+ text-align: left;
+ }
+}
+
+#sidebar-trigger,
+#search-trigger {
+ display: none;
+
+ @include bp.lt(bp.get(lg)) {
+ display: block;
+ }
+}
diff --git a/_sass/layout/home.scss b/_sass/layout/home.scss
deleted file mode 100644
index 6c919456..00000000
--- a/_sass/layout/home.scss
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- Style for Homepage
-*/
-
-.pagination {
- color: var(--btn-patinator-text-color);
- font-family: Lato, sans-serif;
-
- a:hover {
- text-decoration: none;
- }
-
- .page-item {
- .page-link {
- color: inherit;
- width: 2.5rem;
- height: 2.5rem;
- padding: 0;
- display: -webkit-box;
- -webkit-box-pack: center;
- -webkit-box-align: center;
- border-radius: 50%;
- border: 1px solid var(--btn-paginator-border-color);
- background-color: var(--button-bg);
-
- &:hover {
- background-color: var(--btn-paginator-hover-color);
- }
- }
-
- &.active {
- .page-link {
- background-color: var(--btn-paginator-hover-color);
- color: var(--btn-text-color);
- }
- }
-
- &.disabled {
- cursor: not-allowed;
-
- .page-link {
- color: rgba(108, 117, 125, 0.57);
- border-color: var(--btn-paginator-border-color);
- background-color: var(--button-bg);
- }
- }
-
- &:first-child .page-link,
- &:last-child .page-link {
- border-radius: 50%;
- }
- } /* .page-item */
-} /* .pagination */
-
-#post-list {
- margin-top: 1rem;
- padding-right: 0.5rem;
- a {
- &:not(.img-hyperlink) {
- @extend %link-color;
- &:hover {
- @extend %link-hover;
- }
- }
- }
- .post-preview {
- padding-top: 0.5rem;
- padding-bottom: 1rem;
- border-radius: 10px;
- border-bottom: 1px solid var(--main-border-color);
- &:hover {
- text-decoration: none;
- background-color: var(--main-border-color);
- }
- h1 {
- font-size: 1.4rem;
- padding-top: 0.5rem;
- margin: 0;
- @extend %link-color;
- &:hover {
- @extend %link-hover;
- }
- ~i { // pinned icon
- font-size: 0.86rem;
- }
- img {
- padding-left: 0.5rem;
- }
- }
-
- .post-meta {
- i {
- font-size: 0.73rem;
- &:not(:first-child) { // post-meta icons on the homepage
- margin-left: 1.5rem;
- }
- }
- }
-
- .post-content {
- margin-top: 0.6rem;
- margin-bottom: 0.6rem;
- color: var(--post-list-text-color);
- >p {
- /* Make preview shorter on the homepage */
- margin: 0;
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- }
- }
-
- } // .post-preview
-
-} // #post-list
-
-/* Hide SideBar and TOC */
-@media all and (max-width: 830px) {
- .pagination {
- justify-content: space-evenly;
-
- .page-item {
- &:not(:first-child):not(:last-child) {
- display: none;
- }
- }
- }
-}
-
-/* Sidebar is visible */
-@media all and (min-width: 831px) {
- #post-list {
- margin-top: 1.5rem;
-
- .post-preview .post-meta {
- .pin {
- background: var(--pin-bg);
- border-radius: 5px;
- line-height: 1.4rem;
- height: 1.3rem;
- margin-top: 3px;
- padding-left: 1px;
- padding-right: 6px;
-
- > span {
- display: inline;
- }
- }
- }
- }
-
- .pagination {
- font-size: 0.85rem;
-
- .page-item {
- &:not(:last-child) {
- margin-right: 0.7rem;
- }
-
- .page-link {
- width: 2rem;
- height: 2rem;
- }
- }
-
- .page-index {
- display: none;
- }
- } /* .pagination */
-}
-
-/* Panel hidden */
-@media all and (max-width: 1200px) {
- #post-list {
- padding-right: 0;
- }
-}
diff --git a/_sass/layout/post.scss b/_sass/layout/post.scss
deleted file mode 100644
index db6c7c33..00000000
--- a/_sass/layout/post.scss
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- Post-specific style
-*/
-
-@mixin btn-sharing-color($light-color, $important: false) {
- @if $important {
- color: var(--btn-share-color, $light-color) !important;
- } @else {
- color: var(--btn-share-color, $light-color);
- }
-}
-
-@mixin btn-post-nav {
- width: 50%;
- position: relative;
- border-color: var(--btn-border-color);
-}
-
-@mixin dot($pl: 0.25rem, $pr: 0.25rem) {
- content: "\2022";
- padding-left: $pl;
- padding-right: $pr;
-}
-
-%text-color {
- color: var(--text-color);
-}
-
-img.preview-img {
- margin: 0;
- border-radius: 6px;
-
- &.bg {
- background: var(--preview-img-bg);
- }
-}
-
-h1 + .post-meta {
- span + span::before {
- @include dot;
- }
-
- em {
- @extend %text-color;
-
- a {
- @extend %text-color;
- }
- }
-}
-
-.post-tail-wrapper {
- margin-top: 6rem;
- border-bottom: 1px double var(--main-border-color);
- font-size: 0.85rem;
-
- .post-tail-bottom a {
- color: inherit;
- }
-
- .license-wrapper {
- line-height: 1.2rem;
-
- > a {
- color: var(--text-color);
-
- &:hover {
- @extend %link-hover;
- }
- }
-
- span:last-child {
- font-size: 0.85rem;
- }
- } /* .license-wrapper */
-
- .post-meta a:not(:hover) {
- @extend %link-underline;
- }
-
- .share-wrapper {
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
-
- .share-icons {
- font-size: 1.2rem;
-
- > i {
- position: relative;
- bottom: 1px;
-
- @extend %cursor-pointer;
-
- &:hover {
- @extend %btn-share-hovor;
- }
- }
-
- a {
- &:not(:last-child) {
- margin-right: 0.25rem;
- }
-
- &:hover {
- text-decoration: none;
-
- >i {
- @extend %btn-share-hovor;
- }
- }
- }
-
- .fab {
- &.fa-twitter {
- @include btn-sharing-color(rgba(29, 161, 242, 1));
- }
-
- &.fa-facebook-square {
- @include btn-sharing-color(rgb(66, 95, 156));
- }
-
- &.fa-telegram {
- @include btn-sharing-color(rgb(39, 159, 217));
- }
-
- &.fa-linkedin {
- @include btn-sharing-color(rgb(0, 119, 181));
- }
-
- &.fa-weibo {
- @include btn-sharing-color(rgb(229, 20, 43));
- }
- }
- } /* .share-icons */
-
- .fas.fa-link {
- @include btn-sharing-color(rgb(171, 171, 171));
- }
- } /* .share-wrapper */
-}
-
-.post-tags {
- line-height: 2rem;
-}
-
-.post-navigation {
- padding-top: 3rem;
- padding-bottom: 4rem;
-
- .btn {
- @include btn-post-nav;
-
- color: var(--link-color);
-
- &:hover {
- background: #2a408e;
- color: #ffffff;
- border-color: #2a408e;
- }
-
- &.disabled {
- @include btn-post-nav;
-
- pointer-events: auto;
- cursor: not-allowed;
- background: none;
- color: gray;
-
- &:hover {
- border-color: none;
- }
- }
-
- &.btn-outline-primary.disabled:focus {
- box-shadow: none;
- }
-
- &::before {
- color: var(--text-muted-color);
- font-size: 0.65rem;
- text-transform: uppercase;
- content: attr(prompt);
- }
-
- &:first-child {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- left: 0.5px;
- }
-
- &:last-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- right: 0.5px;
- }
- }
-
- p {
- font-size: 1.1rem;
- line-height: 1.5rem;
- margin-top: 0.3rem;
- white-space: normal;
- }
-} /* .post-navigation */
-
-@-webkit-keyframes fade-up {
- from {
- opacity: 0;
- position: relative;
- top: 2rem;
- }
-
- to {
- opacity: 1;
- position: relative;
- top: 0;
- }
-}
-
-@keyframes fade-up {
- from {
- opacity: 0;
- position: relative;
- top: 2rem;
- }
-
- to {
- opacity: 1;
- position: relative;
- top: 0;
- }
-}
-
-#toc-wrapper {
- border-left: 1px solid rgba(158, 158, 158, 0.17);
- position: -webkit-sticky;
- position: sticky;
- top: 4rem;
- transition: top 0.2s ease-in-out;
- -webkit-animation: fade-up 0.8s;
- animation: fade-up 0.8s;
-}
-
-#toc {
- ul.nav.navbar-nav {
- margin: 0.5rem 0;
- padding: 0;
-
- li {
- padding-top: 2px;
- padding-bottom: 2px;
- }
- }
-}
-
-nav[data-toggle="toc"] {
- .nav {
- .nav > li > a.active {
- font-weight: 600 !important;
- }
- }
-}
-
-/* --- Related Posts --- */
-
-#related-posts {
- > h3 {
- @include label(1.1rem, 600);
- }
-
- em {
- @extend %normal-font-style;
-
- color: var(--relate-post-date);
- }
-
- p {
- font-size: 0.9rem;
- margin-bottom: 0.5rem;
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- }
-
- a:hover {
- text-decoration: none;
- }
-
- .card {
- border-color: var(--card-border-color);
- background-color: var(--card-bg);
- box-shadow: 0 0 5px 0 var(--card-box-shadow);
- transition: all 0.3s ease-in-out;
-
- h3 {
- @extend %text-color;
- }
-
- &:hover {
- -webkit-transform: translate3d(0, -3px, 0);
- transform: translate3d(0, -3px, 0);
- box-shadow: 0 10px 15px -4px rgba(0, 0, 0, 0.15);
- }
- }
-}
-
-#tail-wrapper {
- min-height: 2rem;
-
- > div:last-of-type {
- margin-bottom: 2rem;
- }
-
- #disqus_thread { /* stylelint-disable-line selector-id-pattern */
- min-height: 8.5rem;
- }
-}
-
-%btn-share-hovor {
- color: var(--btn-share-hover-color) !important;
-}
-
-.share-label {
- @include label(inherit, 400, inherit);
-
- &::after {
- content: ":";
- }
-}
-
-@media all and (max-width: 576px) {
- .preview-img[data-src] {
- margin-top: 2.2rem;
- }
-
- .post-tail-bottom {
- flex-wrap: wrap-reverse !important;
-
- > div:first-child {
- width: 100%;
- margin-top: 1rem;
- }
- }
-}
-
-@media all and (max-width: 768px) {
- .post-content > p > img {
- max-width: calc(100% + 1rem);
- @include align-center;
- }
-}
-
-/* Hide SideBar and TOC */
-@media all and (max-width: 849px) {
- .post-navigation {
- padding-left: 0;
- padding-right: 0;
- margin-left: -0.5rem;
- margin-right: -0.5rem;
- }
-
- .preview-img[data-src] {
- max-width: 100vw;
- border-radius: 0;
- }
-}
-
-/*
- Comments
- ========================================================================== */
-
-@mixin clearfix {
- clear: both;
-
- &::after {
- clear: both;
- content: "";
- display: table;
- }
-}
-
- .page__comments {
-
- }
- p {
- }
- .card {
- border-color: var(--card-border-color);
- background-color: var(--card-bg);
- box-shadow: 0 0 5px 0 var(--card-box-shadow);
- transition: all 0.3s ease-in-out;
- }
-
-
- .page__comments-title {
- margin-top: 2rem;
- margin-bottom: 10px;
- padding-top: 2rem;
- font-size: 1.25em;
- border-top: 1px solid mix(#fff, #7a8288, 90%);
- text-transform: uppercase;
- }
-
- .page__comments-form {
- padding: 1em;
- background: mix(#fff, #7a8288, 90%);
- transition: all 0.2s ease-in-out;
-
- &.disabled {
- input,
- button,
- textarea,
- label {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- box-shadow: none;
- opacity: 0.65;
- }
- }
- }
-
- .comment {
- @include clearfix();
- margin: 1em 0;
-
- &:not(:last-child) {
- border-bottom: 1px solid mix(#fff, #7a8288, 90%);
- }
- }
-
- .comment__avatar-wrapper {
- float: left;
- margin-top: 25px;
- width: 60px;
- height: 60px;
-
- }
-
- .comment__avatar {
- width: 40px;
- height: 40px;
- border-radius: 50%;
-
- }
-
- .comment__content-wrapper {
- float: right;
- width: calc(100% - 60px);
-
- }
-
- .comment__author {
- margin: 0;
-
- a {
- text-decoration: none;
- }
- }
-
- .comment__date {
- margin: 0;
-
- a {
- text-decoration: none;
- }
- }
diff --git a/_sass/main.bundle.scss b/_sass/main.bundle.scss
new file mode 100644
index 00000000..5d84f938
--- /dev/null
+++ b/_sass/main.bundle.scss
@@ -0,0 +1,2 @@
+@use 'vendors/bootstrap';
+@use 'main';
diff --git a/_sass/main.scss b/_sass/main.scss
new file mode 100644
index 00000000..3bbb70d6
--- /dev/null
+++ b/_sass/main.scss
@@ -0,0 +1,4 @@
+@forward 'base';
+@forward 'components';
+@forward 'layout';
+@forward 'pages';
diff --git a/_sass/layout/archives.scss b/_sass/pages/_archives.scss
similarity index 82%
rename from _sass/layout/archives.scss
rename to _sass/pages/_archives.scss
index 70cf3792..833f809d 100644
--- a/_sass/layout/archives.scss
+++ b/_sass/pages/_archives.scss
@@ -1,14 +1,21 @@
-/*
- Style for Archives
-*/
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
#archives {
letter-spacing: 0.03rem;
+ @include bp.lt(bp.get(sm)) {
+ margin-top: -1rem;
+
+ ul {
+ letter-spacing: 0;
+ }
+ }
+
$timeline-width: 4px;
%timeline {
- content: "";
+ content: '';
width: $timeline-width;
position: relative;
float: left;
@@ -37,8 +44,9 @@
top: 24px;
}
- &::after { /* Year dot */
- content: "";
+ /* Year dot */
+ &::after {
+ content: '';
display: inline-block;
position: relative;
border-radius: 50%;
@@ -57,13 +65,19 @@
li {
font-size: 1.1rem;
line-height: 3rem;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
+
+ @extend %text-ellipsis;
&:nth-child(odd) {
background-color: var(--main-bg, #ffffff);
- background-image: linear-gradient(to left, #ffffff, #fbfbfb, #fbfbfb, #fbfbfb, #ffffff);
+ background-image: linear-gradient(
+ to left,
+ #ffffff,
+ #fbfbfb,
+ #fbfbfb,
+ #fbfbfb,
+ #ffffff
+ );
}
&::before {
@@ -98,7 +112,7 @@
}
a {
- /* post title in Archvies */
+ /* post title in Archives */
margin-left: 2.5rem;
position: relative;
top: 0.1rem;
@@ -109,7 +123,7 @@
&::before {
/* the dot before post title */
- content: "";
+ content: '';
display: inline-block;
position: relative;
border-radius: 50%;
@@ -124,13 +138,3 @@
}
}
} /* #archives */
-
-@media all and (max-width: 576px) {
- #archives {
- margin-top: -1rem;
-
- ul {
- letter-spacing: 0;
- }
- }
-}
diff --git a/_sass/layout/categories.scss b/_sass/pages/_categories.scss
similarity index 59%
rename from _sass/layout/categories.scss
rename to _sass/pages/_categories.scss
index c818e336..64a2df50 100644
--- a/_sass/layout/categories.scss
+++ b/_sass/pages/_categories.scss
@@ -1,20 +1,34 @@
-/*
- Style for Tab Categories
-*/
+@use '../abstracts/variables' as v;
+@use '../abstracts/placeholders';
-%category-icon-color {
+%-category-icon-color {
color: gray;
}
.categories {
margin-bottom: 2rem;
+ border-color: var(--categories-border);
+
+ &.card,
+ .list-group {
+ @extend %rounded;
+ }
.card-header {
- padding-right: 12px;
+ $radius: calc(v.$radius-lg - 1px);
+
+ padding: 0.75rem;
+ border-radius: $radius;
+ border-bottom: 0;
+
+ &.hide-border-bottom {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
}
i {
- @extend %category-icon-color;
+ @extend %-category-icon-color;
font-size: 86%; /* fontawesome icons */
}
@@ -28,6 +42,10 @@
border-top-left-radius: 0;
border-top-right-radius: 0;
}
+
+ &:last-child {
+ border-bottom: 0;
+ }
}
} /* .categories */
@@ -42,9 +60,7 @@
position: relative;
height: 0.7rem;
width: 1rem;
- transition: -webkit-transform 300ms ease;
transition: transform 300ms ease;
- transition: transform 300ms ease, -webkit-transform 300ms ease;
}
&:hover {
@@ -54,13 +70,13 @@
}
}
-@media (hover: hover) { /* only works on desktop */
+/* only works on desktop */
+@media (hover: hover) {
.category-trigger:hover {
background-color: var(--categories-hover-bg);
}
}
.rotate {
- -webkit-transform: rotate(-90deg);
transform: rotate(-90deg);
}
diff --git a/_sass/layout/category-tag.scss b/_sass/pages/_category-tag.scss
similarity index 61%
rename from _sass/layout/category-tag.scss
rename to _sass/pages/_category-tag.scss
index 44886712..0a827121 100644
--- a/_sass/layout/category-tag.scss
+++ b/_sass/pages/_category-tag.scss
@@ -1,6 +1,6 @@
-/*
- Style for page Category and Tag
-*/
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
.dash {
margin: 0 0.5rem 0.6rem 0.5rem;
@@ -13,31 +13,38 @@
line-height: 1.5rem;
padding: 0.6rem 0;
- &::before { /* dot */
+ /* dot */
+ &::before {
background: #999999;
width: 5px;
height: 5px;
border-radius: 50%;
display: block;
- content: "";
+ content: '';
position: relative;
top: 0.6rem;
margin-right: 0.5rem;
+
+ @include bp.lt(bp.get(sm)) {
+ margin: 0 0.5rem;
+ }
}
- > a { /* post's title */
+ /* post's title */
+ > a {
@extend %no-bottom-border;
font-size: 1.1rem;
- }
- > span:last-child {
- white-space: nowrap;
- } /* post's date */
+ @include bp.lt(bp.get(sm)) {
+ @include mx.text-ellipsis;
+ }
+ }
}
}
-#page-tag h1 > i { /* tag icon */
+/* tag icon */
+#page-tag h1 > i {
font-size: 1.2rem;
}
@@ -54,20 +61,3 @@
margin-bottom: -1px; /* Avoid jumping */
}
}
-
-@media all and (max-width: 576px) {
- #page-category,
- #page-tag {
- ul > li {
- &::before {
- margin: 0 0.5rem;
- }
-
- > a {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- }
- }
-}
diff --git a/_sass/pages/_home.scss b/_sass/pages/_home.scss
new file mode 100644
index 00000000..84f4b4aa
--- /dev/null
+++ b/_sass/pages/_home.scss
@@ -0,0 +1,170 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+#post-list {
+ margin-top: 2rem;
+
+ @include bp.lg {
+ margin-top: 2.5rem;
+ }
+
+ .card-wrapper {
+ &:hover {
+ text-decoration: none;
+ }
+
+ &:not(:last-child) {
+ margin-bottom: 1.25rem;
+ }
+ }
+
+ .card {
+ border: 0;
+ background: none;
+
+ %img-radius {
+ border-radius: v.$radius-lg v.$radius-lg 0 0;
+
+ @include bp.md {
+ border-radius: 0 v.$radius-lg v.$radius-lg 0;
+ }
+ }
+
+ .preview-img {
+ @extend %img-radius;
+
+ img {
+ @extend %img-radius;
+ }
+ }
+
+ .card-body {
+ height: 100%;
+ padding: 1rem;
+
+ @include bp.md {
+ padding: 1.75rem 1.75rem 1.25rem;
+ }
+
+ .card-title {
+ @extend %text-clip;
+
+ color: var(--heading-color) !important;
+ font-size: 1.25rem;
+ }
+
+ %muted {
+ color: var(--text-muted-color) !important;
+ }
+
+ .card-text {
+ @include bp.md {
+ display: inherit !important;
+ }
+
+ &.content {
+ @extend %muted;
+
+ p {
+ @extend %text-clip;
+
+ line-height: 1.5;
+ margin: 0;
+ }
+ }
+ }
+
+ .post-meta {
+ @extend %muted;
+
+ i {
+ &:not(:first-child) {
+ margin-left: 1.5rem;
+
+ @include bp.md {
+ margin-left: 1.75rem;
+ }
+ }
+ }
+
+ em {
+ @extend %normal-font-style;
+
+ color: inherit;
+ }
+
+ > div:first-child {
+ display: block;
+
+ @extend %text-ellipsis;
+ }
+ }
+ }
+ }
+} /* #post-list */
+
+.pagination {
+ color: var(--text-color);
+ font-family: Lato, sans-serif;
+ justify-content: space-evenly;
+
+ @include bp.lg {
+ font-size: 0.85rem;
+ justify-content: center;
+ }
+
+ a:hover {
+ text-decoration: none;
+ }
+
+ .page-item {
+ @include bp.lt(bp.get(lg)) {
+ &:not(:first-child):not(:last-child) {
+ display: none;
+ }
+ }
+
+ @include bp.lg {
+ &:not(:last-child) {
+ margin-right: 0.7rem;
+ }
+ }
+
+ .page-link {
+ color: var(--btn-patinator-text-color);
+ padding: 0 0.6rem;
+ border-radius: 0.5rem;
+ border: 0;
+ background-color: inherit;
+ }
+
+ &.active {
+ .page-link {
+ background-color: var(--btn-paginator-hover-color);
+ }
+ }
+
+ &:not(.active) {
+ .page-link {
+ &:hover {
+ box-shadow: inset var(--btn-border-color) 0 0 0 1px;
+ }
+ }
+ }
+
+ &.disabled {
+ cursor: not-allowed;
+
+ .page-link {
+ color: rgb(108 117 125 / 57%);
+ }
+ }
+ } /* .page-item */
+
+ .page-index {
+ @include bp.lg {
+ display: none;
+ }
+ }
+}
diff --git a/_sass/pages/_index.scss b/_sass/pages/_index.scss
new file mode 100644
index 00000000..74e9ea6e
--- /dev/null
+++ b/_sass/pages/_index.scss
@@ -0,0 +1,7 @@
+@forward 'search';
+@forward 'home';
+@forward 'post';
+@forward 'categories';
+@forward 'tags';
+@forward 'archives';
+@forward 'category-tag';
diff --git a/_sass/pages/_post.scss b/_sass/pages/_post.scss
new file mode 100644
index 00000000..31f7a8e2
--- /dev/null
+++ b/_sass/pages/_post.scss
@@ -0,0 +1,506 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+%-btn-post-nav {
+ width: 50%;
+ position: relative;
+ border-color: var(--btn-border-color);
+}
+
+@mixin -dot($pl: 0.25rem, $pr: 0.25rem) {
+ content: '\2022';
+ padding-left: $pl;
+ padding-right: $pr;
+}
+
+header {
+ .post-desc {
+ @extend %heading;
+
+ font-size: 1.125rem;
+ line-height: 1.6;
+ }
+
+ .post-meta {
+ span + span::before {
+ @include -dot;
+ }
+
+ em,
+ time {
+ @extend %text-highlight;
+ }
+
+ em {
+ a {
+ color: inherit;
+ }
+ }
+ }
+
+ h1 + .post-meta {
+ margin-top: 1.5rem;
+ }
+}
+
+.post-tail-wrapper {
+ @extend %text-sm;
+
+ margin-top: 6rem;
+ border-bottom: 1px double var(--main-border-color);
+
+ .license-wrapper {
+ line-height: 1.2rem;
+
+ > a {
+ @extend %text-highlight;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+
+ span:last-child {
+ @extend %text-sm;
+ }
+ } /* .license-wrapper */
+
+ .post-meta a:not(:hover) {
+ @extend %link-underline;
+ }
+
+ .share-wrapper {
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+
+ %icon-size {
+ font-size: 1.125rem;
+ }
+
+ .share-icons {
+ display: flex;
+
+ i {
+ color: var(--btn-share-color);
+
+ @extend %icon-size;
+ }
+
+ > * {
+ @extend %icon-size;
+
+ margin-left: 0.5rem;
+
+ &:hover {
+ i {
+ @extend %btn-share-hover;
+ }
+ }
+ }
+
+ button {
+ padding: 0;
+ border: none;
+ line-height: inherit;
+
+ @extend %cursor-pointer;
+ }
+ } /* .share-icons */
+ } /* .share-wrapper */
+}
+
+.post-tail-bottom {
+ @include bp.lte(bp.get(sm)) {
+ flex-wrap: wrap-reverse !important;
+
+ > div:first-child {
+ width: 100%;
+ margin-top: 1rem;
+ }
+ }
+}
+
+.share-mastodon {
+ /* See: https://github.com/justinribeiro/share-to-mastodon#properties */
+ --wc-stm-font-family: #{v.$font-family-base};
+ --wc-stm-dialog-background-color: var(--card-bg);
+ --wc-stm-form-button-border: 1px solid var(--btn-border-color);
+ --wc-stm-form-submit-background-color: var(--sidebar-btn-bg);
+ --wc-stm-form-cancel-background-color: var(--sidebar-btn-bg);
+ --wc-stm-form-button-background-color-hover: #007bff;
+ --wc-stm-form-button-color-hover: white;
+
+ font-size: 1rem;
+}
+
+.post-tags {
+ line-height: 2rem;
+
+ .post-tag {
+ &:hover {
+ @extend %tag-hover;
+ }
+ }
+}
+
+.post-edit {
+ line-height: 1.2rem;
+
+ > a {
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+}
+
+.post-navigation {
+ @include bp.lt(bp.get(lg)) {
+ @include mx.pl-pr(0);
+ @include mx.ml-mr(-0.5rem);
+ }
+
+ .btn {
+ @extend %-btn-post-nav;
+
+ &:not(:hover) {
+ color: var(--link-color);
+ }
+
+ &:hover {
+ &:not(.disabled)::before {
+ color: whitesmoke;
+ }
+ }
+
+ &.disabled {
+ @extend %-btn-post-nav;
+
+ pointer-events: auto;
+ cursor: not-allowed;
+ background: none;
+ color: gray;
+ }
+
+ &.btn-outline-primary.disabled:focus {
+ box-shadow: none;
+ }
+
+ &::before {
+ color: var(--text-muted-color);
+ font-size: 0.65rem;
+ text-transform: uppercase;
+ content: attr(aria-label);
+ }
+
+ &:first-child {
+ border-radius: v.$radius-lg 0 0 v.$radius-lg;
+ left: 0.5px;
+ }
+
+ &:last-child {
+ border-radius: 0 v.$radius-lg v.$radius-lg 0;
+ right: 0.5px;
+ }
+ }
+
+ p {
+ font-size: 1.1rem;
+ line-height: 1.5rem;
+ margin-top: 0.3rem;
+ white-space: normal;
+ }
+} /* .post-navigation */
+
+@media (hover: hover) {
+ .post-navigation {
+ .btn,
+ .btn::before {
+ transition: all 0.35s ease-in-out;
+ }
+ }
+}
+
+@-webkit-keyframes fade-up {
+ from {
+ opacity: 0;
+ margin-top: 4rem;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes fade-up {
+ from {
+ opacity: 0;
+ margin-top: 4rem;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+/* TOC panel */
+
+%top-cover {
+ content: '';
+ display: block;
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ width: 100%;
+ height: 3rem;
+ background: linear-gradient(var(--main-bg) 50%, transparent);
+}
+
+#toc-wrapper {
+ top: 0;
+ transition: top 0.2s ease-in-out;
+ overflow-y: auto;
+ max-height: 100vh;
+ scrollbar-width: none;
+ margin-top: 2rem;
+
+ &:not(.invisible) {
+ -webkit-animation: fade-up 0.8s;
+ animation: fade-up 0.8s;
+ }
+
+ ul {
+ list-style: none;
+ font-size: 0.85rem;
+ line-height: 1.25;
+ padding-left: 0;
+
+ li {
+ a {
+ padding: 0.4rem 0 0.4rem 1.25rem;
+ }
+ }
+
+ /* Overwrite TOC plugin style */
+
+ .toc-link {
+ display: block;
+
+ @extend %text-ellipsis;
+
+ &:hover {
+ color: var(--toc-highlight);
+ text-decoration: none;
+ }
+
+ &::before {
+ display: none;
+ }
+ }
+
+ .is-active-link {
+ color: var(--toc-highlight) !important;
+ font-weight: 600;
+
+ &::before {
+ display: inline-block;
+ width: 1px;
+ height: 1.25rem;
+ background-color: var(--toc-highlight) !important;
+ }
+ }
+
+ ul {
+ padding-left: 0.75rem;
+ }
+ }
+
+ @at-root .toc-border-cover {
+ @extend %top-cover;
+
+ margin-bottom: -4rem;
+ }
+
+ &::before {
+ @extend %top-cover;
+ }
+
+ &::after {
+ content: '';
+ position: fixed;
+ bottom: 0;
+ width: 15%;
+ height: 2.25rem;
+ margin-left: -1px;
+ background: linear-gradient(transparent, var(--main-bg) 70%);
+ }
+
+ > * {
+ @extend %panel-border;
+ }
+}
+
+/* --- TOC button, bar and popup in mobile/tablet --- */
+
+#toc-bar {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ margin: 0 -1rem;
+ height: v.$topbar-height;
+ background: var(--main-bg);
+ border-bottom: 1px solid var(--main-border-color);
+ transition: all 0.2s ease-in-out;
+
+ @extend %btn-color;
+
+ @include bp.xl {
+ display: none !important;
+ }
+
+ .label {
+ @extend %heading;
+
+ margin-left: 0.375rem;
+ padding: 0 0.75rem;
+ color: inherit;
+ }
+
+ &.invisible {
+ top: -#{v.$topbar-height};
+ transition: none;
+ }
+}
+
+#toc-solo-trigger {
+ color: var(--text-muted-color);
+ border-color: var(--btn-border-color);
+ border-radius: v.$radius-lg;
+
+ @include bp.xl {
+ display: none !important;
+ }
+
+ .label {
+ font-size: 1rem;
+ font-family: v.$font-family-heading;
+ }
+
+ &:hover {
+ box-shadow: none;
+ background: none;
+ }
+}
+
+@mixin slide-in {
+ from {
+ opacity: 0.7;
+ transform: translateY(-#{v.$topbar-height});
+ }
+
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@mixin slide-out {
+ 0% {
+ transform: translateY(0);
+ opacity: 1;
+ }
+
+ 100% {
+ transform: translateY(-#{v.$topbar-height});
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes slide-in {
+ @include slide-in;
+}
+
+@keyframes slide-in {
+ @include slide-in;
+}
+
+@-webkit-keyframes slide-out {
+ @include slide-out;
+}
+
+@keyframes slide-out {
+ @include slide-out;
+}
+
+/* --- Related Posts --- */
+
+#related-posts {
+ > h3 {
+ @include mx.label(1.1rem, 600);
+ }
+
+ time {
+ @extend %normal-font-style;
+ @extend %text-xs;
+
+ color: var(--text-muted-color);
+ }
+
+ p {
+ @extend %text-ellipsis;
+
+ font-size: 0.9rem;
+ margin-bottom: 0.5rem;
+ white-space: break-spaces;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ }
+
+ .card {
+ h4 {
+ @extend %text-clip;
+ }
+ }
+}
+
+/* stylelint-disable-next-line selector-id-pattern */
+#disqus_thread {
+ min-height: 8.5rem;
+}
+
+.utterances {
+ max-width: 100%;
+ min-height: 269px;
+}
+
+%btn-share-hover {
+ color: var(--btn-share-hover-color) !important;
+}
+
+.share-label {
+ @include mx.label(inherit, 400, inherit);
+
+ &::after {
+ content: ':';
+ }
+}
+
+.content > p > img {
+ @include bp.lte(bp.get(md)) {
+ max-width: calc(100% + 1rem);
+ }
+}
+
+h2,
+h3,
+h4 {
+ @include bp.xl {
+ scroll-margin-top: 2rem;
+ }
+}
diff --git a/_sass/pages/_search.scss b/_sass/pages/_search.scss
new file mode 100644
index 00000000..dfb044ed
--- /dev/null
+++ b/_sass/pages/_search.scss
@@ -0,0 +1,184 @@
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/variables' as v;
+@use '../abstracts/placeholders';
+
+search {
+ display: flex;
+ width: 100%;
+ border-radius: 1rem;
+ border: 1px solid var(--search-border-color);
+ background: var(--main-bg);
+ padding: 0 0.5rem;
+
+ i {
+ z-index: 2;
+ font-size: 0.9rem;
+ color: var(--search-icon-color);
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ display: none;
+ }
+
+ @include bp.lg {
+ max-width: v.$search-max-width;
+ }
+
+ @include bp.xl {
+ margin-right: 4rem;
+ }
+
+ @include bp.xxxl {
+ margin-right: calc(
+ v.$main-content-max-width / 4 - v.$search-max-width - 0.75rem
+ );
+ }
+}
+
+#search-result-wrapper {
+ display: none;
+ height: 100%;
+ width: 100%;
+ overflow: auto;
+
+ .content {
+ margin-top: 2rem;
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ width: 100%;
+
+ .content {
+ letter-spacing: 0;
+ }
+ }
+
+ @include bp.lg {
+ max-width: v.$main-content-max-width;
+ justify-content: start !important;
+ }
+}
+
+#search-results {
+ padding-bottom: 3rem;
+
+ @include bp.between(bp.get(lg), calc(#{bp.get(xl)} - 1px)) {
+ > div {
+ max-width: 700px;
+ }
+ }
+
+ a {
+ font-size: 1.4rem;
+ line-height: 1.5rem;
+
+ &:hover {
+ @extend %link-hover;
+ }
+
+ @extend %link-color;
+ @extend %no-bottom-border;
+ @extend %heading;
+ }
+
+ > article {
+ width: 100%;
+
+ &:not(:last-child) {
+ margin-bottom: 1rem;
+ }
+
+ @include bp.xl {
+ width: 45%;
+
+ &:nth-child(odd) {
+ margin-right: 1.5rem;
+ }
+
+ &:nth-child(even) {
+ margin-left: 1.5rem;
+ }
+
+ &:last-child:nth-child(odd) {
+ position: relative;
+ right: 24.3%;
+ }
+ }
+
+ h2 {
+ line-height: 2.5rem;
+ }
+
+ /* icons */
+ i {
+ color: #818182;
+ margin-right: 0.15rem;
+ font-size: 80%;
+ }
+
+ > p {
+ @extend %text-ellipsis;
+
+ white-space: break-spaces;
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ }
+ }
+}
+
+/* 'Cancel' link */
+#search-cancel {
+ color: var(--link-color);
+ display: none;
+ white-space: nowrap;
+
+ @extend %cursor-pointer;
+}
+
+#search-input {
+ background: center;
+ border: 0;
+ border-radius: 0;
+ padding: 0.18rem 0.3rem;
+ color: var(--text-color);
+ height: auto;
+
+ &:focus {
+ box-shadow: none;
+ }
+
+ @include bp.xl {
+ transition: all 0.3s ease-in-out;
+ }
+}
+
+#search-hints {
+ padding: 0 1rem;
+
+ @include bp.lg {
+ display: none;
+ }
+
+ h4 {
+ margin-bottom: 1.5rem;
+ }
+
+ .post-tag {
+ display: inline-block;
+ line-height: 1rem;
+ font-size: 1rem;
+ background: var(--search-tag-bg);
+ border: none;
+ padding: 0.5rem;
+ margin: 0 1.25rem 1rem 0;
+
+ &::before {
+ content: '#';
+ color: var(--text-muted-color);
+ padding-right: 0.2rem;
+ }
+
+ @extend %link-color;
+ }
+}
diff --git a/_sass/layout/tags.scss b/_sass/pages/_tags.scss
similarity index 71%
rename from _sass/layout/tags.scss
rename to _sass/pages/_tags.scss
index 4cf5d3b7..d22f20d6 100644
--- a/_sass/layout/tags.scss
+++ b/_sass/pages/_tags.scss
@@ -1,6 +1,4 @@
-/*
- Styles for Tab Tags
-*/
+@use '../abstracts/breakpoints' as bp;
.tag {
border-radius: 0.7em;
@@ -17,3 +15,9 @@
font-family: Oswald, sans-serif;
}
}
+
+#tags {
+ @include bp.lt(bp.get(lg)) {
+ justify-content: center !important;
+ }
+}
diff --git a/_sass/themes/_dark.scss b/_sass/themes/_dark.scss
new file mode 100644
index 00000000..be2a3aae
--- /dev/null
+++ b/_sass/themes/_dark.scss
@@ -0,0 +1,308 @@
+@mixin styles {
+ color-scheme: dark;
+
+ /* Framework color */
+ --main-bg: rgb(27 27 30);
+ --mask-bg: rgb(68 69 70);
+ --main-border-color: rgb(44 45 45);
+
+ /* Common color */
+ --text-color: rgb(175 176 177);
+ --text-muted-color: #868686;
+ --text-muted-highlight-color: #aeaeae;
+ --heading-color: #cccccc;
+ --label-color: #a7a7a7;
+ --blockquote-border-color: rgb(66 66 66);
+ --blockquote-text-color: #868686;
+ --link-color: rgb(138 180 248);
+ --link-underline-color: rgb(82 108 150);
+ --button-bg: #1e1e1e;
+ --btn-border-color: #2e2f31;
+ --btn-backtotop-color: var(--text-color);
+ --btn-backtotop-border-color: #212122;
+ --card-header-bg: #292929;
+ --checkbox-color: rgb(118 120 121);
+ --checkbox-checked-color: var(--link-color);
+ --img-bg: radial-gradient(circle, rgb(22 22 24) 0%, rgb(32 32 32) 100%);
+ --shimmer-bg: linear-gradient(
+ 90deg,
+ rgb(255 255 255 / 0%) 0%,
+ rgb(58 55 55 / 40%) 50%,
+ rgb(255 255 255 / 0%) 100%
+ );
+ --menu-bg: rgb(30 30 30);
+ --menu-border-color: rgb(77 77 77 / 60%);
+ --menu-shadow-color: rgb(4 4 4 / 42%);
+ --menu-active-color: rgb(240 248 255 / 63%);
+ --menu-highlight-bg: rgb(90 91 92 / 12%);
+
+ /* Sidebar */
+ --site-title-color: #717070;
+ --site-subtitle-color: #868686;
+ --sidebar-bg: #1e1e1e;
+ --sidebar-border-color: #292929;
+ --sidebar-muted-color: #868686;
+ --sidebar-active-color: rgb(255 255 255 / 95%);
+ --sidebar-hover-bg: #262626;
+ --sidebar-btn-bg: #232328;
+ --sidebar-btn-color: #787878;
+ --avatar-border-color: rgb(206 206 206 / 90%);
+
+ /* Topbar */
+ --topbar-bg: rgb(27 27 30 / 64%);
+ --topbar-text-color: var(--text-color);
+ --search-border-color: rgb(55 55 55);
+ --search-icon-color: rgb(100 102 105);
+ --input-focus-border-color: rgb(112 114 115);
+
+ /* Home page */
+ --post-list-text-color: rgb(175 176 177);
+ --btn-patinator-text-color: var(--text-color);
+ --btn-paginator-hover-color: #2e2e2e;
+
+ /* Posts */
+ --toc-highlight: rgb(116 178 243);
+ --toc-popup-border-color: #373737;
+ --tag-hover: rgb(43 56 62);
+ --tb-odd-bg: #252526; /* odd rows of the posts' table */
+ --tb-even-bg: rgb(31 31 34); /* even rows of the posts' table */
+ --tb-border-color: var(--tb-odd-bg);
+ --footnote-target-bg: rgb(63 81 181);
+ --btn-share-color: #6c757d;
+ --btn-share-hover-color: #bfc1ca;
+ --card-bg: #1e1e1e;
+ --card-hover-bg: #464d51;
+ --card-shadow:
+ rgb(21 21 21 / 72%) 0 6px 18px 0, rgb(137 135 135 / 24%) 0 0 0 1px;
+ --kbd-wrap-color: #6a6a6a;
+ --kbd-text-color: #d3d3d3;
+ --kbd-bg-color: #242424;
+ --prompt-text-color: rgb(216 212 212 / 75%);
+ --prompt-tip-bg: rgb(22 60 36 / 64%);
+ --prompt-tip-icon-color: rgb(15 164 15 / 81%);
+ --prompt-info-bg: rgb(7 59 104 / 80%);
+ --prompt-info-icon-color: #0075d1;
+ --prompt-warning-bg: rgb(90 69 3 / 88%);
+ --prompt-warning-icon-color: rgb(255 165 0 / 80%);
+ --prompt-danger-bg: rgb(86 28 8 / 80%);
+ --prompt-danger-icon-color: #cd0202;
+
+ /* Tags */
+ --tag-border: rgb(59 79 88);
+ --tag-shadow: rgb(32 33 33);
+ --dash-color: rgb(63 65 68);
+ --search-tag-bg: #292828;
+
+ /* Categories */
+ --categories-border: rgb(64 66 69 / 50%);
+ --categories-hover-bg: rgb(73 75 76);
+ --categories-icon-hover-color: white;
+
+ /* Archive */
+ --timeline-node-bg: rgb(150 152 156);
+ --timeline-color: rgb(63 65 68);
+ --timeline-year-dot-color: var(--timeline-color);
+
+ /* Code highlight colors */
+ --language-border-color: #2d2d2d;
+ --highlight-bg-color: #151515;
+ --highlighter-rouge-color: #c9def1;
+ --highlight-lineno-color: #808080;
+ --inline-code-bg: rgb(255 255 255 / 5%);
+ --code-color: #b0b0b0;
+ --code-header-text-color: #6a6a6a;
+ --code-header-muted-color: #353535;
+ --code-header-icon-color: #565656;
+ --clipboard-checked-color: #2bcc2b;
+ --filepath-text-color: #cacaca;
+
+ .light {
+ display: none;
+ }
+
+ /* Categories */
+ .categories.card,
+ .list-group-item {
+ background-color: var(--card-bg);
+ }
+
+ .categories {
+ .card-header {
+ background-color: var(--card-header-bg);
+ }
+
+ .list-group-item {
+ border-left: none;
+ border-right: none;
+ padding-left: 2rem;
+ border-color: var(--categories-border);
+
+ &:last-child {
+ border-bottom-color: var(--card-bg);
+ }
+ }
+ }
+
+ #archives li:nth-child(odd) {
+ background-image: linear-gradient(
+ to left,
+ rgb(26 26 30),
+ rgb(39 39 45),
+ rgb(39 39 45),
+ rgb(39 39 45),
+ rgb(26 26 30)
+ );
+ }
+
+ /* stylelint-disable-next-line selector-id-pattern */
+ #disqus_thread {
+ color-scheme: none;
+ }
+
+ /* --- Syntax highlight theme from `rougify style base16.dark` --- */
+
+ .highlight .gp {
+ color: #87939d;
+ }
+
+ .highlight table td {
+ padding: 5px;
+ }
+
+ .highlight table pre {
+ margin: 0;
+ }
+
+ .highlight,
+ .highlight .w {
+ color: #d0d0d0;
+ background-color: #151515;
+ }
+
+ .highlight .err {
+ color: #151515;
+ background-color: #ac4142;
+ }
+
+ .highlight .c,
+ .highlight .ch,
+ .highlight .cd,
+ .highlight .cm,
+ .highlight .cpf,
+ .highlight .c1,
+ .highlight .cs {
+ color: #848484;
+ }
+
+ .highlight .cp {
+ color: #f4bf75;
+ }
+
+ .highlight .nt {
+ color: #f4bf75;
+ }
+
+ .highlight .o,
+ .highlight .ow {
+ color: #d0d0d0;
+ }
+
+ .highlight .p,
+ .highlight .pi {
+ color: #d0d0d0;
+ }
+
+ .highlight .gi {
+ color: #90a959;
+ }
+
+ .highlight .gd {
+ color: #f08a8b;
+ background-color: #320000;
+ }
+
+ .highlight .gh {
+ color: #6a9fb5;
+ background-color: #151515;
+ font-weight: bold;
+ }
+
+ .highlight .k,
+ .highlight .kn,
+ .highlight .kp,
+ .highlight .kr,
+ .highlight .kv {
+ color: #aa759f;
+ }
+
+ .highlight .kc {
+ color: #d28445;
+ }
+
+ .highlight .kt {
+ color: #d28445;
+ }
+
+ .highlight .kd {
+ color: #d28445;
+ }
+
+ .highlight .s,
+ .highlight .sb,
+ .highlight .sc,
+ .highlight .dl,
+ .highlight .sd,
+ .highlight .s2,
+ .highlight .sh,
+ .highlight .sx,
+ .highlight .s1 {
+ color: #90a959;
+ }
+
+ .highlight .sa {
+ color: #aa759f;
+ }
+
+ .highlight .sr {
+ color: #75b5aa;
+ }
+
+ .highlight .si {
+ color: #b76d45;
+ }
+
+ .highlight .se {
+ color: #b76d45;
+ }
+
+ .highlight .nn {
+ color: #f4bf75;
+ }
+
+ .highlight .nc {
+ color: #f4bf75;
+ }
+
+ .highlight .no {
+ color: #f4bf75;
+ }
+
+ .highlight .na {
+ color: #6a9fb5;
+ }
+
+ .highlight .m,
+ .highlight .mb,
+ .highlight .mf,
+ .highlight .mh,
+ .highlight .mi,
+ .highlight .il,
+ .highlight .mo,
+ .highlight .mx {
+ color: #90a959;
+ }
+
+ .highlight .ss {
+ color: #90a959;
+ }
+}
diff --git a/_sass/themes/_light.scss b/_sass/themes/_light.scss
new file mode 100644
index 00000000..19e8e01a
--- /dev/null
+++ b/_sass/themes/_light.scss
@@ -0,0 +1,314 @@
+@mixin styles {
+ /* Framework color */
+ --main-bg: white;
+ --mask-bg: #c1c3c5;
+ --main-border-color: #f3f3f3;
+
+ /* Common color */
+ --text-color: #34343c;
+ --text-muted-color: #757575;
+ --text-muted-highlight-color: inherit;
+ --heading-color: #2a2a2a;
+ --label-color: #585858;
+ --blockquote-border-color: #eeeeee;
+ --blockquote-text-color: #757575;
+ --link-color: #0056b2;
+ --link-underline-color: #dee2e6;
+ --button-bg: #ffffff;
+ --btn-border-color: #e9ecef;
+ --btn-backtotop-color: #686868;
+ --btn-backtotop-border-color: #f1f1f1;
+ --checkbox-color: #c5c5c5;
+ --checkbox-checked-color: #07a8f7;
+ --img-bg: radial-gradient(circle, rgb(255 255 255) 0%, rgb(239 239 239) 100%);
+ --shimmer-bg: linear-gradient(
+ 90deg,
+ rgb(250 250 250 / 0%) 0%,
+ rgb(232 230 230 / 100%) 50%,
+ rgb(250 250 250 / 0%) 100%
+ );
+ --menu-bg: white;
+ --menu-border-color: white;
+ --menu-shadow-color: rgb(0 0 0 / 16%);
+ --menu-active-color: rgb(91 91 91);
+ --menu-highlight-bg: rgb(243 244 245 / 50%);
+
+ /* Sidebar */
+ --site-title-color: rgb(113 113 113);
+ --site-subtitle-color: #717171;
+ --sidebar-bg: #f6f8fa;
+ --sidebar-border-color: #efefef;
+ --sidebar-muted-color: #545454;
+ --sidebar-active-color: #1d1d1d;
+ --sidebar-hover-bg: rgb(223 233 241 / 64%);
+ --sidebar-btn-bg: white;
+ --sidebar-btn-color: #8e8e8e;
+ --avatar-border-color: white;
+
+ /* Topbar */
+ --topbar-bg: rgb(255 255 255 / 70%);
+ --topbar-text-color: rgb(78 78 78);
+ --search-border-color: rgb(240 240 240);
+ --search-icon-color: #c2c6cc;
+ --input-focus-border-color: #b8b8b8;
+
+ /* Home page */
+ --post-list-text-color: dimgray;
+ --btn-patinator-text-color: #555555;
+ --btn-paginator-hover-color: var(--sidebar-bg);
+
+ /* Posts */
+ --toc-highlight: #0550ae;
+ --toc-popup-border-color: lightgray;
+ --btn-share-color: gray;
+ --btn-share-hover-color: #0d6efd;
+ --card-bg: white;
+ --card-hover-bg: #e2e2e2;
+ --card-shadow:
+ rgb(104 104 104 / 5%) 0 2px 6px 0, rgb(211 209 209 / 15%) 0 0 0 1px;
+ --footnote-target-bg: lightcyan;
+ --tb-odd-bg: #fbfcfd;
+ --tb-border-color: #eaeaea;
+ --dash-color: silver;
+ --kbd-wrap-color: #bdbdbd;
+ --kbd-text-color: var(--text-color);
+ --kbd-bg-color: white;
+ --prompt-text-color: rgb(46 46 46 / 77%);
+ --prompt-tip-bg: rgb(123 247 144 / 20%);
+ --prompt-tip-icon-color: #03b303;
+ --prompt-info-bg: #e1f5fe;
+ --prompt-info-icon-color: #0070cb;
+ --prompt-warning-bg: rgb(255 243 205);
+ --prompt-warning-icon-color: #ef9c03;
+ --prompt-danger-bg: rgb(248 215 218 / 56%);
+ --prompt-danger-icon-color: #df3c30;
+
+ /* Tags */
+ --tag-border: #dee2e6;
+ --tag-shadow: var(--btn-border-color);
+ --tag-hover: rgb(222 226 230);
+ --search-tag-bg: #f8f9fa;
+
+ /* Categories */
+ --categories-border: rgb(0 0 0 / 12.5%);
+ --categories-hover-bg: var(--btn-border-color);
+ --categories-icon-hover-color: darkslategray;
+
+ /* Archive */
+ --timeline-color: rgb(0 0 0 / 7.5%);
+ --timeline-node-bg: #c2c6cc;
+ --timeline-year-dot-color: #ffffff;
+
+ /* --- Custom code light mode colors --- */
+ --language-border-color: #ececec;
+ --highlight-bg-color: #f6f8fa;
+ --highlighter-rouge-color: #3f596f;
+ --highlight-lineno-color: #9e9e9e;
+ --inline-code-bg: rgb(25 25 28 / 5%);
+ --code-color: #3a3a3a;
+ --code-header-text-color: #a3a3a3;
+ --code-header-muted-color: #e5e5e5;
+ --code-header-icon-color: #c9c8c8;
+ --clipboard-checked-color: #43c743;
+
+ [class^='prompt-'] {
+ --link-underline-color: rgb(219 216 216);
+ }
+
+ .dark {
+ display: none;
+ }
+
+ /* --- Syntax highlight theme from `rougify style github` --- */
+
+ .highlight table td {
+ padding: 5px;
+ }
+
+ .highlight table pre {
+ margin: 0;
+ }
+
+ .highlight,
+ .highlight .w {
+ color: #24292f;
+ background-color: #f6f8fa;
+ }
+
+ .highlight .k,
+ .highlight .kd,
+ .highlight .kn,
+ .highlight .kp,
+ .highlight .kr,
+ .highlight .kt,
+ .highlight .kv {
+ color: #cf222e;
+ }
+
+ .highlight .gr {
+ color: #f6f8fa;
+ }
+
+ .highlight .gd {
+ color: #82071e;
+ background-color: #ffebe9;
+ }
+
+ .highlight .nb {
+ color: #953800;
+ }
+
+ .highlight .nc {
+ color: #953800;
+ }
+
+ .highlight .no {
+ color: #953800;
+ }
+
+ .highlight .nn {
+ color: #953800;
+ }
+
+ .highlight .sr {
+ color: #116329;
+ }
+
+ .highlight .na {
+ color: #116329;
+ }
+
+ .highlight .nt {
+ color: #116329;
+ }
+
+ .highlight .gi {
+ color: #116329;
+ background-color: #dafbe1;
+ }
+
+ .highlight .kc {
+ color: #0550ae;
+ }
+
+ .highlight .l,
+ .highlight .ld,
+ .highlight .m,
+ .highlight .mb,
+ .highlight .mf,
+ .highlight .mh,
+ .highlight .mi,
+ .highlight .il,
+ .highlight .mo,
+ .highlight .mx {
+ color: #0550ae;
+ }
+
+ .highlight .sb {
+ color: #0550ae;
+ }
+
+ .highlight .bp {
+ color: #0550ae;
+ }
+
+ .highlight .ne {
+ color: #0550ae;
+ }
+
+ .highlight .nl {
+ color: #0550ae;
+ }
+
+ .highlight .py {
+ color: #0550ae;
+ }
+
+ .highlight .nv,
+ .highlight .vc,
+ .highlight .vg,
+ .highlight .vi,
+ .highlight .vm {
+ color: #0550ae;
+ }
+
+ .highlight .o,
+ .highlight .ow {
+ color: #0550ae;
+ }
+
+ .highlight .gh {
+ color: #0550ae;
+ font-weight: bold;
+ }
+
+ .highlight .gu {
+ color: #0550ae;
+ font-weight: bold;
+ }
+
+ .highlight .s,
+ .highlight .sa,
+ .highlight .sc,
+ .highlight .dl,
+ .highlight .sd,
+ .highlight .s2,
+ .highlight .se,
+ .highlight .sh,
+ .highlight .sx,
+ .highlight .s1,
+ .highlight .ss {
+ color: #0a3069;
+ }
+
+ .highlight .nd {
+ color: #8250df;
+ }
+
+ .highlight .nf,
+ .highlight .fm {
+ color: #8250df;
+ }
+
+ .highlight .err {
+ color: #f6f8fa;
+ background-color: #82071e;
+ }
+
+ .highlight .c,
+ .highlight .ch,
+ .highlight .cd,
+ .highlight .cm,
+ .highlight .cp,
+ .highlight .cpf,
+ .highlight .c1,
+ .highlight .cs {
+ color: #68717a;
+ }
+
+ .highlight .gl {
+ color: #68717a;
+ }
+
+ .highlight .gt {
+ color: #68717a;
+ }
+
+ .highlight .ni {
+ color: #24292f;
+ }
+
+ .highlight .si {
+ color: #24292f;
+ }
+
+ .highlight .ge {
+ color: #24292f;
+ font-style: italic;
+ }
+
+ .highlight .gs {
+ color: #24292f;
+ font-weight: bold;
+ }
+}
diff --git a/_sass/variables-hook.scss b/_sass/variables-hook.scss
deleted file mode 100644
index f27e0eb8..00000000
--- a/_sass/variables-hook.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-/*
- Appending custom SCSS variables will override the default ones in `_sass/addon/variables.scsss`
-*/
diff --git a/_sass/vendors/_bootstrap.scss b/_sass/vendors/_bootstrap.scss
new file mode 100644
index 00000000..c47d0942
--- /dev/null
+++ b/_sass/vendors/_bootstrap.scss
@@ -0,0 +1,5 @@
+@charset "UTF-8";/*!
+ * Bootstrap v5.3.8 (https://getbootstrap.com/)
+ * Copyright 2011-2025 The Bootstrap Authors
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */:root,[data-bs-theme=light]{--bs-success:#198754;--bs-danger:#dc3545;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,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-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-bg:#e9ecef;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-bg:#f8f9fa;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xxl:2rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-bg:#343a40;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-bg:#2b3035;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.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 + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .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}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}.small,small{font-size:.875em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button{text-transform:none}[role=button]{cursor:pointer}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}iframe{border:0}summary{display:list-item;cursor:pointer}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.list-unstyled{padding-left:0;list-style:none}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.figure{display:inline-block}.container{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}@media (min-width:1400px){.container{max-width:1320px}}:root{}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.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-1>*{flex:0 0 auto;width:100%}.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%}.g-0{--bs-gutter-x:0}.g-0{--bs-gutter-y:0}.g-4{--bs-gutter-x:1.5rem}.g-4{--bs-gutter-y:1.5rem}@media (min-width:576px){.col-sm{flex:1 0 0}.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%}}@media (min-width:768px){.col-md{flex:1 0 0}.row-cols-md-2>*{flex:0 0 auto;width:50%}.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%}}@media (min-width:992px){.col-lg{flex:1 0 0}.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%}}@media (min-width:1200px){.col-xl{flex:1 0 0}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.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%}}@media (min-width:1400px){.col-xxl{flex:1 0 0}.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%}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .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:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-tooltip,.was-validated :valid~.valid-tooltip{display:block}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-tooltip{display:block}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropup{position:relative}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.btn-group{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(-1 * var(--bs-border-width))}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.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:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-text:last-child{margin-bottom:0}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1 * var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.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:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg: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 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-padding-x:0.75rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast:not(.show){display:none}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);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;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}:root,[data-bs-theme=light]{}[data-bs-theme=dark]{}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-middle{vertical-align:middle!important}.overflow-hidden{overflow:hidden!important}.d-block{display:block!important}.d-flex{display:flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!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}.h-100{height:100%!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-wrap{flex-wrap:wrap!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.pt-0{padding-top:0!important}.pt-2{padding-top:.5rem!important}.pe-1{padding-right:.25rem!important}.pe-4{padding-right:1.5rem!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-4{padding-bottom:1.5rem!important}.ps-0{padding-left:0!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.gap-3{gap:1rem!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}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-nowrap{white-space:nowrap!important}.text-muted{color:var(--bs-secondary-color)!important}.pe-none{pointer-events:none!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.invisible{visibility:hidden!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.me-sm-4{margin-right:1.5rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}}@media (min-width:768px){.flex-md-row-reverse{flex-direction:row-reverse!important}.mt-md-0{margin-top:0!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}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.justify-content-lg-between{justify-content:space-between!important}.align-items-lg-center{align-items:center!important}.ms-lg-0{margin-left:0!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}.pb-lg-3{padding-bottom:1rem!important}.ps-lg-2{padding-left:.5rem!important}}@media (min-width:1200px){.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}}@media (min-width:1400px){.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}}
\ No newline at end of file
diff --git a/_tabs/about.md b/_tabs/about.md
index d88d7887..17ac0a2a 100644
--- a/_tabs/about.md
+++ b/_tabs/about.md
@@ -1,5 +1,7 @@
---
title: About Me
+icon: fas fa-info-circle
+order: 4
title2: Quantumly Confused - About Me
summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Innovation, Quantum Technology and related adventures
keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering,innovation
diff --git a/_tabs/archives.md b/_tabs/archives.md
index a0090a12..c3abc594 100644
--- a/_tabs/archives.md
+++ b/_tabs/archives.md
@@ -1,40 +1,5 @@
---
-title: Archives
-title2: Padraignix's InfoSec Blog - Archives
-type: archives
-summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
-keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
-thumbnail: https://github.com/padraignix.png
-canon: https://blog.quantumlyconfused.com/tabs/archives/
+layout: archives
+icon: fas fa-archive
+order: 3
---
-
-
-{% for post in site.posts %}
- {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
- {% capture pre_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %}
- {% if forloop.first %}
- {% assign last_day = "" %}
- {% assign last_month = "" %}
- {{this_year}}
-
- {% endif %}
- -
-
- {% capture this_day %}{{ post.date | date: "%d" }}{% endcapture %}
- {% capture this_month %}{{ post.date | date: "%b" }}{% endcapture %}
- {{ this_day }}
- {{ this_month }}
- {{ post.title }}
-
-
- {% if forloop.last %}
-
- {% elsif this_year != pre_year %}
-
- {{pre_year}}
-
- {% assign last_day = "" %}
- {% assign last_month = "" %}
- {% endif %}
-{% endfor %}
-
\ No newline at end of file
diff --git a/_tabs/categories.md b/_tabs/categories.md
index a366bb1a..2d241be9 100644
--- a/_tabs/categories.md
+++ b/_tabs/categories.md
@@ -1,98 +1,5 @@
---
-title: Categories
-title2: Padraignix's InfoSec Blog - Categories
-type: categories
-summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
-keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
-thumbnail: https://github.com/padraignix.png
-canon: https://blog.quantumlyconfused.com/tabs/categories/
+layout: categories
+icon: fas fa-stream
+order: 1
---
-
-{% assign HEAD_PREFIX = "h_" %}
-{% assign LIST_PREFIX = "l_" %}
-
-{% assign group_index = 0 %}
-
-{% assign sort_categories = site.categories | sort %}
-
-
-
-{% for category in sort_categories %}
- {% assign category_name = category | first %}
- {% assign posts_of_category = category | last %}
- {% assign first_post = posts_of_category | first %}
-
- {% if category_name == first_post.categories[0] %}
- {% assign sub_categories = "" | split: "" %}
- {% for post in posts_of_category %}
- {% assign second_category = post.categories[1] %}
- {% if second_category %}
- {% unless sub_categories contains second_category %}
- {% assign sub_categories = sub_categories | push: second_category %}
- {% endunless %}
- {% endif %}
- {% endfor %}
- {% assign sub_categories = sub_categories | sort %}
- {% assign sub_categories_size = sub_categories | size %}
-
-
-
-
-
- {% if sub_categories_size > 0 %}
-
- {% else %}
-
- {% endif %}
-
- {{ category_name }}
-
-
- {% assign top_posts_size = site.categories[category_name] | size %}
-
- {% if sub_categories_size > 0 %}
- {{ sub_categories_size }}
- {% if sub_categories_size > 1 %}categories{% else %}category{% endif %},
- {% endif %}
- {{ top_posts_size }}
- post{% if top_posts_size > 1 %}s{% endif %}
-
-
-
- {% if sub_categories_size > 0%}
-
-
-
- {% else %}
-
-
-
- {% endif %}
-
-
- {% if sub_categories_size > 0 %}
-
-
- {% for sub_category in sub_categories %}
- -
-
- {{ sub_category }}
- {% assign posts_size = site.categories[sub_category] | size %}
- {{ posts_size }}
- post{% if posts_size > 1 %}s{% endif %}
-
-
- {% endfor %}
-
-
- {% endif %}
-
-
- {% assign group_index = group_index | plus: 1 %}
- {% endif %}
-{% endfor %}
diff --git a/_tabs/disclaimer.md b/_tabs/disclaimer.md
index 8b866f79..7a409270 100644
--- a/_tabs/disclaimer.md
+++ b/_tabs/disclaimer.md
@@ -1,5 +1,7 @@
---
title: Disclaimer
+icon: fas fa-shield-alt
+order: 6
title2: Quantumly Confused - Disclaimer
summary: Legal disclaimer, Cookie policy, and Privacy policy for Padraignix's InfoSec Blog.
keywords: hacking, blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
diff --git a/_tabs/projects.md b/_tabs/projects.md
index d72591c9..4533cdd1 100644
--- a/_tabs/projects.md
+++ b/_tabs/projects.md
@@ -1,5 +1,7 @@
---
title: Projects
+icon: fas fa-code
+order: 5
title2: Padraignix's InfoSec Blog - Projects
summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
diff --git a/_tabs/tags.md b/_tabs/tags.md
index 5ed84d8a..ded3adc1 100644
--- a/_tabs/tags.md
+++ b/_tabs/tags.md
@@ -1,29 +1,5 @@
---
-title: Tags
-title2: Padraignix's InfoSec Blog - Tags
-type: tags
-summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
-keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
-thumbnail: https://github.com/padraignix.png
-canon: https://blog.quantumlyconfused.com/tabs/tags/
+layout: tags
+icon: fas fa-tags
+order: 2
---
-
-{% comment %}
- 'site.tags' looks like a Map, e.g. site.tags.MyTag.[ Post0, Post1, ... ]
- Print the {{ site.tags }} will help you to understand it.
-{% endcomment %}
-
-{% assign tags = "" | split: "" %}
-{% for t in site.tags %}
- {% assign tags = tags | push: t[0] %}
-{% endfor %}
-
-{% assign sorted_tags = tags | sort_natural %}
-
-{% for t in sorted_tags %}
-
-{% endfor %}
-
-
diff --git a/assets/404.html b/assets/404.html
index 4490ea5f..cb129c06 100644
--- a/assets/404.html
+++ b/assets/404.html
@@ -2,13 +2,8 @@
layout: page
title: "404: Page not found"
permalink: /404.html
-
-redirect_from:
- - /norobots/
- - /assets/
- - /posts/
---
-
- {{site.data.locales[site.lang].not_found.statment }}
-
+{% include lang.html %}
+
+{{ site.data.locales[lang].not_found.statement }}
\ No newline at end of file
diff --git a/assets/css/jekyll-theme-chirpy.scss b/assets/css/jekyll-theme-chirpy.scss
new file mode 100644
index 00000000..58d6ce7e
--- /dev/null
+++ b/assets/css/jekyll-theme-chirpy.scss
@@ -0,0 +1,68 @@
+---
+---
+
+@use 'abstracts/variables' with (
+ $theme: '{{ site.theme_mode }}'
+);
+
+/* prettier-ignore */
+@use 'main
+{%- if jekyll.environment == 'production' -%}
+ .bundle
+{%- endif -%}
+';
+
+/* append your custom style below */
+
+.page__comments {
+ margin-top: 3rem;
+
+ .page__comments-title {
+ margin-bottom: 0.75rem;
+ padding-top: 2rem;
+ border-top: 1px solid var(--main-border-color);
+ font-size: 1.25rem;
+ text-transform: uppercase;
+ }
+
+ .card {
+ padding: 0.5rem 1rem;
+ border-color: var(--card-border-color);
+ background-color: var(--card-bg);
+ color: var(--text-color);
+ box-shadow: 0 0 5px var(--card-box-shadow);
+ }
+
+ .comment {
+ display: flow-root;
+ margin: 1rem 0;
+ padding-bottom: 1rem;
+ border-bottom: 1px solid var(--main-border-color);
+ }
+
+ .comment__avatar-wrapper {
+ float: left;
+ width: 60px;
+ margin-top: 0.25rem;
+ }
+
+ .comment__avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ }
+
+ .comment__content-wrapper {
+ float: right;
+ width: calc(100% - 60px);
+ }
+
+ .comment__author,
+ .comment__date {
+ margin: 0;
+ }
+
+ .status {
+ margin-top: 0.5rem;
+ }
+}
diff --git a/assets/css/lightbox.css b/assets/css/lightbox.css
deleted file mode 100644
index e81a309d..00000000
--- a/assets/css/lightbox.css
+++ /dev/null
@@ -1,94 +0,0 @@
-#lightbox {width: 100%; height: 100%; position: fixed; top: 0; left: 0; background: rgba(0,0,0,0.85); z-index: 9999999; line-height: 0; cursor: pointer; display: none;}
-#lightbox .img {
- position: relative;
- top: 50%;
- left: 50%;
- -ms-transform: translateX(-50%) translateY(-50%);
- -webkit-transform: translate(-50%,-50%);
- transform: translate(-50%,-50%);
- max-width: 100%;
- max-height: 100%;
-}
-#lightbox .img img {opacity: 0; pointer-events: none; width: auto;}
-@media screen and (min-width: 1200px) {
- #lightbox .img {
- max-width: 1200px;
- }
-}
-@media screen and (min-height: 1200px) {
- #lightbox .img {
- max-height: 1200px;
- }
-}
-#lightbox span {display: block; position: fixed; bottom: 13px; height: 1.5em; line-height: 1.4em; width: 100%; text-align: center; color: white; text-shadow:
- -1px -1px 0 #000,
- 1px -1px 0 #000,
- -1px 1px 0 #000,
- 1px 1px 0 #000;
-}
-
-#lightbox span {display: none;}
-
-#lightbox .videoWrapperContainer {
- position: relative;
- top: 50%;
- left: 50%;
- -ms-transform: translateX(-50%) translateY(-50%);
- -webkit-transform: translate(-50%,-50%);
- transform: translate(-50%,-50%);
- max-width: 900px;
- max-height: 100%;
-}
-#lightbox .videoWrapperContainer .videoWrapper {
- height: 0;
- line-height: 0;
- margin: 0;
- padding: 0;
- position: relative;
- padding-bottom: 56.333%; /* custom */
- background: black;
-}
-#lightbox .videoWrapper iframe {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
- display: block;
-}
-#lightbox #prev, #lightbox #next {height: 50px; line-height: 36px; display: none; margin-top: -25px; position: fixed; top: 50%; padding: 0 15px; cursor: pointer; text-decoration: none; z-index: 99; color: white; font-size: 60px;}
-#lightbox.gallery #prev, #lightbox.gallery #next {display: block;}
-#lightbox #prev {left: 0;}
-#lightbox #next {right: 0;}
-#lightbox #close {height: 50px; width: 50px; position: fixed; cursor: pointer; text-decoration: none; z-index: 99; right: 0; top: 0;}
-#lightbox #close:after, #lightbox #close:before {position: absolute; margin-top: 22px; margin-left: 14px; content: ""; height: 3px; background: white; width: 23px;
--webkit-transform-origin: 50% 50%;
--moz-transform-origin: 50% 50%;
--o-transform-origin: 50% 50%;
-transform-origin: 50% 50%;
-/* Safari */
--webkit-transform: rotate(-45deg);
-/* Firefox */
--moz-transform: rotate(-45deg);
-/* IE */
--ms-transform: rotate(-45deg);
-/* Opera */
--o-transform: rotate(-45deg);
-}
-#lightbox #close:after {
-/* Safari */
--webkit-transform: rotate(45deg);
-/* Firefox */
--moz-transform: rotate(45deg);
-/* IE */
--ms-transform: rotate(45deg);
-/* Opera */
--o-transform: rotate(45deg);
-}
-#lightbox, #lightbox * {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
\ No newline at end of file
diff --git a/assets/css/style.scss b/assets/css/style.scss
deleted file mode 100644
index 6ff7046e..00000000
--- a/assets/css/style.scss
+++ /dev/null
@@ -1,12 +0,0 @@
----
----
-
-/*
- If the number of TAB files has changed, the following variable is required.
- And it must be defined before `@import`.
-*/
-$tab-count: {{ site.tabs | size | plus: 1 }}; // plus 1 for home tab
-
-@import "{{ site.theme }}";
-
-/* append your custom style below */
diff --git a/assets/feed.xml b/assets/feed.xml
index 358d44fd..99373377 100644
--- a/assets/feed.xml
+++ b/assets/feed.xml
@@ -26,7 +26,7 @@ permalink: /feed.xml
{% assign post_absolute_url = post.url | absolute_url %}
{{ post.title }}
-
+
{{ post.date | date_to_xmlschema }}
{% if post.last_modified_at %}
{{ post.last_modified_at | date_to_xmlschema }}
@@ -34,7 +34,7 @@ permalink: /feed.xml
{{ post.date | date_to_xmlschema }}
{% endif %}
{{ post_absolute_url }}
-
+
{{ post.author | default: site.social.name }}
@@ -45,14 +45,7 @@ permalink: /feed.xml
{% endfor %}
{% endif %}
- {% if post.summary %}
- {{ post.summary | strip }}
- {% else %}
-
- {% include no-linenos.html content=post.content %}
- {{ content | strip_html | truncate: 400 }}
-
- {% endif %}
+ {% include post-summary.html max_length=400 %}
{% endfor %}
diff --git a/assets/js/data/mathjax.js b/assets/js/data/mathjax.js
new file mode 100644
index 00000000..ca3d0de5
--- /dev/null
+++ b/assets/js/data/mathjax.js
@@ -0,0 +1,25 @@
+---
+layout: compress
+# WARNING: Don't use '//' to comment out code, use '{% comment %}' and '{% endcomment %}' instead.
+---
+
+{%- comment -%}
+ See:
+{%- endcomment -%}
+
+MathJax = {
+ tex: {
+ {%- comment -%} start/end delimiter pairs for in-line math {%- endcomment -%}
+ inlineMath: [
+ ['$', '$'],
+ ['\\(', '\\)']
+ ],
+ {%- comment -%} start/end delimiter pairs for display math {%- endcomment -%}
+ displayMath: [
+ ['$$', '$$'],
+ ['\\[', '\\]']
+ ],
+ {%- comment -%} equation numbering {%- endcomment -%}
+ tags: 'ams'
+ }
+};
diff --git a/assets/js/data/search.json b/assets/js/data/search.json
index 2601ed07..1c35ec18 100644
--- a/assets/js/data/search.json
+++ b/assets/js/data/search.json
@@ -10,11 +10,9 @@ swcache: true
"url": {{ post.url | relative_url | jsonify }},
"categories": {{ post.categories | join: ', ' | jsonify }},
"tags": {{ post.tags | join: ', ' | jsonify }},
- "date": "{{ post.date }}",
- {% include no-linenos.html content=post.content %}
- {% assign _content = content | strip_html | strip_newlines %}
- "snippet": {{ _content | truncate: 200 | jsonify }},
- "content": {{ _content | jsonify }}
+ "date": {{ post.date | jsonify }},
+ {% capture content -%}{% include post-summary.html full_text=true %}{%- endcapture -%}
+ "content": {{ content | jsonify }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
diff --git a/assets/js/data/swcache.js b/assets/js/data/swcache.js
deleted file mode 100644
index 14a9f56e..00000000
--- a/assets/js/data/swcache.js
+++ /dev/null
@@ -1,54 +0,0 @@
----
-layout: compress
-
-# The list to be cached by PWA
----
-
-const resource = [
- /* --- CSS --- */
- '{{ "/assets/css/style.css" | relative_url }}',
-
- /* --- PWA --- */
- '{{ "/app.js" | relative_url }}',
- '{{ "/sw.js" | relative_url }}',
-
- /* --- HTML --- */
- '{{ "/index.html" | relative_url }}',
- '{{ "/404.html" | relative_url }}',
-
- {% for tab in site.tabs %}
- '{{ tab.url | relative_url }}',
- {% endfor %}
-
- /* --- Favicons & compressed JS --- */
- {% assign cache_list = site.static_files | where: 'swcache', true %}
- {% for file in cache_list %}
- '{{ file.path | relative_url }}'{%- unless forloop.last -%},{%- endunless -%}
- {% endfor %}
-];
-
-/* The request url with below domain will be cached */
-const allowedDomains = [
- {% if site.google_analytics.id != empty and site.google_analytics.id %}
- 'www.googletagmanager.com',
- 'www.google-analytics.com',
- {% endif %}
-
- '{{ site.url | split: "//" | last }}',
-
- {% if site.img_cdn contains '//' and site.img_cdn %}
- '{{ site.img_cdn | split: '//' | last | split: '/' | first }}',
- {% endif %}
-
- 'fonts.gstatic.com',
- 'fonts.googleapis.com',
- 'cdn.jsdelivr.net',
- 'polyfill.io'
-];
-
-/* Requests that include the following path will be banned */
-const denyUrls = [
- {% if site.google_analytics.pv.cache_path %}
- '{{ site.google_analytics.pv.cache_path | absolute_url }}'
- {% endif %}
-];
diff --git a/assets/js/data/swconf.js b/assets/js/data/swconf.js
new file mode 100644
index 00000000..798888a9
--- /dev/null
+++ b/assets/js/data/swconf.js
@@ -0,0 +1,47 @@
+---
+layout: compress
+permalink: '/:path/swconf.js'
+# Note that this file will be fetched by the ServiceWorker, so it will not be cached.
+---
+
+const swconf = {
+ {% if site.pwa.cache.enabled %}
+ cacheName: 'chirpy-{{ "now" | date: "%s" }}',
+
+ {%- comment -%} Resources added to the cache during PWA installation. {%- endcomment -%}
+ resources: [
+ '{{ "/assets/css/:THEME.css" | replace: ':THEME', site.theme | relative_url }}',
+ '{{ "/" | relative_url }}',
+ {% for tab in site.tabs %}
+ '{{- tab.url | relative_url -}}',
+ {% endfor %}
+
+ {% assign cache_list = site.static_files | where: 'swcache', true %}
+ {% for file in cache_list %}
+ '{{ file.path | relative_url }}'{%- unless forloop.last -%},{%- endunless -%}
+ {% endfor %}
+ ],
+
+ interceptor: {
+ {%- comment -%} URLs containing the following paths will not be cached. {%- endcomment -%}
+ paths: [
+ {% for path in site.pwa.cache.deny_paths %}
+ {% unless path == empty %}
+ '{{ path | relative_url }}'{%- unless forloop.last -%},{%- endunless -%}
+ {% endunless %}
+ {% endfor %}
+ ],
+
+ {%- comment -%} URLs containing the following prefixes will not be cached. {%- endcomment -%}
+ urlPrefixes: [
+ {% if site.analytics.goatcounter.id != nil and site.pageviews.provider == 'goatcounter' %}
+ 'https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/'
+ {% endif %}
+ ]
+ },
+
+ purge: false
+ {% else %}
+ purge: true
+ {% endif %}
+};
diff --git a/assets/js/dist/app.min.js b/assets/js/dist/app.min.js
new file mode 100644
index 00000000..48ba5c48
--- /dev/null
+++ b/assets/js/dist/app.min.js
@@ -0,0 +1,7 @@
+---
+permalink: /:basename
+---
+/*!
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
+ */
+!function(){"use strict";const e=new Map;var t={set(t,n,r){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,r):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const r=e.get(t);r.delete(n),0===r.size&&e.delete(t)}};const n="transitionend",r=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),i=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>i(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(r(e)):null,a=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,c=[],u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},d=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void u(e);const r=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const r=Number.parseFloat(t),o=Number.parseFloat(n);return r||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const i=r=>{let{target:s}=r;s===t&&(o=!0,t.removeEventListener(n,i),u(e))};t.addEventListener(n,i),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},r)},f=/[^.]*(?=\..*)\.|.*/,h=/\..*/,g=/::\d+$/,m={};let p=1;const b={mouseenter:"mouseover",mouseleave:"mouseout"},v=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function _(e,t){return t&&`${t}::${p++}`||e.uidEvent||p++}function y(e){const t=_(e);return e.uidEvent=t,m[t]=m[t]||{},m[t]}function E(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function w(e,t,n){const r="string"==typeof t,o=r?n:t||n;let i=O(e);return v.has(i)||(i=e),[r,o,i]}function A(e,t,n,r,o){if("string"!=typeof t||!e)return;let[i,s,a]=w(t,n,r);if(t in b){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const l=y(e),c=l[a]||(l[a]={}),u=E(c,s,i?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const d=_(s,t.replace(f,"")),h=i?function(e,t,n){return function r(o){const i=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of i)if(a===s)return $(o,{delegateTarget:s}),r.oneOff&&T.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(r){return $(r,{delegateTarget:e}),n.oneOff&&T.off(e,r.type,t),t.apply(e,[r])}}(e,s);h.delegationSelector=i?n:null,h.callable=s,h.oneOff=o,h.uidEvent=d,c[d]=h,e.addEventListener(a,h,i)}function S(e,t,n,r,o){const i=E(t[n],r,o);i&&(e.removeEventListener(n,i,Boolean(o)),delete t[n][i.uidEvent])}function C(e,t,n,r){const o=t[n]||{};for(const[i,s]of Object.entries(o))i.includes(r)&&S(e,t,n,s.callable,s.delegationSelector)}function O(e){return e=e.replace(h,""),b[e]||e}const T={on(e,t,n,r){A(e,t,n,r,!1)},one(e,t,n,r){A(e,t,n,r,!0)},off(e,t,n,r){if("string"!=typeof t||!e)return;const[o,i,s]=w(t,n,r),a=s!==t,l=y(e),c=l[s]||{},u=t.startsWith(".");if(void 0===i){if(u)for(const n of Object.keys(l))C(e,l,n,t.slice(1));for(const[n,r]of Object.entries(c)){const o=n.replace(g,"");a&&!t.includes(o)||S(e,l,s,r.callable,r.delegationSelector)}}else{if(!Object.keys(c).length)return;S(e,l,s,i,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const r=l();let o=null,i=!0,s=!0,a=!1;t!==O(t)&&r&&(o=r.Event(t,n),r(e).trigger(o),i=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=$(new Event(t,{bubbles:i,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function $(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,r]of Object.entries(t))try{e[n]=r}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>r})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function j(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const L={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${j(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${j(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const r of n){let n=r.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[r])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${j(t)}`))};class D{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=i(t)?L.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...i(t)?L.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,r]of Object.entries(t)){const t=e[n],s=i(t)?"element":o(t);if(!new RegExp(r).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${r}".`)}}}class I extends D{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),T.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){d(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const k=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>r(e)).join(","):null},M={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let r=e.parentNode.closest(t);for(;r;)n.push(r),r=r.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!a(e)&&(e=>{if(!i(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t})(e))},getSelectorFromElement(e){const t=k(e);return t&&M.findOne(t)?t:null},getElementFromSelector(e){const t=k(e);return t?M.findOne(t):null},getMultipleElementsFromSelector(e){const t=k(e);return t?M.find(t):[]}},K=".bs.toast",P=`mouseover${K}`,q=`mouseout${K}`,x=`focusin${K}`,W=`focusout${K}`,Y=`hide${K}`,F=`hidden${K}`,R=`show${K}`,V=`shown${K}`,Q="hide",z="show",B="showing",H={animation:"boolean",autohide:"boolean",delay:"number"},U={animation:!0,autohide:!0,delay:5e3};class G extends I{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return U}static get DefaultType(){return H}static get NAME(){return"toast"}show(){if(T.trigger(this._element,R).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");this._element.classList.remove(Q),this._element.offsetHeight,this._element.classList.add(z,B),this._queueCallback(()=>{this._element.classList.remove(B),T.trigger(this._element,V),this._maybeScheduleHide()},this._element,this._config.animation)}hide(){if(!this.isShown())return;if(T.trigger(this._element,Y).defaultPrevented)return;this._element.classList.add(B),this._queueCallback(()=>{this._element.classList.add(Q),this._element.classList.remove(B,z),T.trigger(this._element,F)},this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(z),super.dispose()}isShown(){return this._element.classList.contains(z)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){T.on(this._element,P,e=>this._onInteraction(e,!0)),T.on(this._element,q,e=>this._onInteraction(e,!1)),T.on(this._element,x,e=>this._onInteraction(e,!0)),T.on(this._element,W,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){const t=G.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}})}}var J,Z;if(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"hide";const n=`click.dismiss${e.EVENT_KEY}`,r=e.NAME;T.on(document,n,`[data-bs-dismiss="${r}"]`,function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),a(this))return;const o=M.getElementFromSelector(this)||this.closest(`.${r}`);e.getOrCreateInstance(o)[t]()})}(G),J=G,Z=()=>{const e=l();if(e){const t=J.NAME,n=e.fn[t];e.fn[t]=J.jQueryInterface,e.fn[t].Constructor=J,e.fn[t].noConflict=()=>(e.fn[t]=n,J.jQueryInterface)}},"loading"===document.readyState?(c.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of c)e()}),c.push(Z)):Z(),"serviceWorker"in navigator){const e=new URL(document.currentScript.src),t=e.searchParams.get("register"),n=e.searchParams.get("baseurl");if(t){const e=`${n}/sw.min.js`,t=document.getElementById("notification"),r=t.querySelector('[aria-label="Update"]'),o=G.getOrCreateInstance(t);navigator.serviceWorker.register(e).then(e=>{e.waiting&&o.show(),e.addEventListener("updatefound",()=>{e.installing.addEventListener("statechange",()=>{e.waiting&&navigator.serviceWorker.controller&&o.show()})}),r.addEventListener("click",()=>{e.waiting&&e.waiting.postMessage("SKIP_WAITING"),o.hide()})});let i=!1;navigator.serviceWorker.addEventListener("controllerchange",()=>{i||(window.location.reload(),i=!0)})}else navigator.serviceWorker.getRegistrations().then(function(e){for(let t of e)t.unregister()})}}();
diff --git a/assets/js/dist/categories.min.js b/assets/js/dist/categories.min.js
index b9a7ded4..49eaacfb 100644
--- a/assets/js/dist/categories.min.js
+++ b/assets/js/dist/categories.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(o=>{o=$(o.target);(o.prop("tagName")==="button".toUpperCase()?o:o.parent()).blur(),flipMode()})});const ScrollHelper=function(){const o=$("body"),e="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let a=0,r=!1,l=!1;return{hideTopbar:()=>o.attr(e,!1),showTopbar:()=>o.attr(e,!0),addScrollUpTask:()=>{a+=1,r=r||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===r,unlockTopbar:()=>r=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===l,lockOrientation:()=>l=!0,unLockOrientation:()=>l=!1}}();$(function(){const o=$("#sidebar-trigger"),e=$("#search-trigger"),t=$("#search-cancel"),a=$("#main"),r=$("#topbar-title"),l=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let o=0;return{block(){o=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(o)},getOffset(){return o}}}(),p={on(){o.addClass("unloaded"),r.addClass("unloaded"),e.addClass("unloaded"),l.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),l.removeClass("d-flex"),o.removeClass("unloaded"),r.removeClass("unloaded"),e.removeClass("unloaded")}},f=function(){let o=!1;return{on(){o||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),o=!0)},off(){o&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),i.val(""),o=!1)},isVisible(){return o}}}();function u(){return t.hasClass("loaded")}e.click(function(){p.on(),f.on(),i.focus()}),t.click(function(){p.off(),f.off()}),i.focus(function(){l.addClass("input-focus")}),i.focusout(function(){l.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?u()?c.removeClass("unloaded"):f.off():(f.on(),u()&&c.addClass("unloaded"))})}),$(function(){var o=function(){const o="sidebar-display";let e=!1;const t=$("body");return{toggle(){!1===e?t.attr(o,""):t.removeAttr(o),e=!e}}}();$("#sidebar-trigger").click(o.toggle),$("#mask").click(o.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),t=ScrollHelper.getTopbarHeight();let o,a=0;function r(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var o=screen.orientation.type;"landscape-primary"!==o&&"landscape-secondary"!==o||r()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&r()}),$(window).scroll(()=>{o=o||!0}),setInterval(()=>{o&&(!function(){var o=$(this).scrollTop();if(!(Math.abs(a-o)<=t)){if(o>a)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(o+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=o}}(),o=!1)},250)}),$(function(){var o="div.post>h1:first-of-type",e=$(o);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=e.text().trim(),r=!1,l=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(o=>{var e,t;r?(t=$(window).scrollTop(),e=le.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=f();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of d)e()}),d.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,b=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function C(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function A(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function L(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return O.has(r)||(r=e),[i,o,r]}function T(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=L(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=C(e),l=c[a]||(c[a]={}),u=A(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=x(s,t.replace(v,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return D(o,{delegateTarget:s}),i.oneOff&&P.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return D(i,{delegateTarget:e}),n.oneOff&&P.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,e.addEventListener(a,d,r)}function S(e,t,n,i,o){const r=A(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(b,""),E[e]||e}const P={on(e,t,n,i){T(e,t,n,i,!1)},one(e,t,n,i){T(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=L(t,n,i),a=s!==t,c=C(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=f();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=D(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function D(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const B={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?B.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?B.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const H=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},F={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=H(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){const t=H(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){const t=H(e);return t?F.find(t):[]}},q=".bs.collapse",z=`show${q}`,W=`shown${q}`,R=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,K="show",U="collapse",Q="collapsing",X=`:scope .${U} .${U}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=F.find(G);for(const e of n){const t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(P.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(U),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U,K),this._element.style[t]="",P.trigger(this._element,W)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,R).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(U,K);for(const e of this._triggerArray){const t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U),P.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(K)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(G);for(const t of e){const e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=F.find(X,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}P.on(document,Y,G,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of F.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee);const te=document.getElementsByClassName("collapse");var ne="top",ie="bottom",oe="right",re="left",se="auto",ae=[ne,ie,oe,re],ce="start",le="end",ue="clippingParents",fe="viewport",de="popper",pe="reference",he=ae.reduce(function(e,t){return e.concat([t+"-"+ce,t+"-"+le])},[]),me=[].concat(ae,[se]).reduce(function(e,t){return e.concat([t,t+"-"+ce,t+"-"+le])},[]),ge="beforeRead",ve="read",be="afterRead",_e="beforeMain",ye="main",we="afterMain",Ee="beforeWrite",Oe="write",xe="afterWrite",Ce=[ge,ve,be,_e,ye,we,Ee,Oe,xe];function Ae(e){return e?(e.nodeName||"").toLowerCase():null}function Le(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Le(e).Element||e instanceof Element}function Se(e){return e instanceof Le(e).HTMLElement||e instanceof HTMLElement}function ke(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Le(e).ShadowRoot||e instanceof ShadowRoot)}var je={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Se(o)&&Ae(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Se(i)&&Ae(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function Pe(e){return e.split("-")[0]}var De=Math.max,Ne=Math.min,Me=Math.round;function Be(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Ie(){return!/^((?!chrome|android).)*safari/i.test(Be())}function $e(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Se(e)&&(o=e.offsetWidth>0&&Me(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Me(i.height)/e.offsetHeight||1);var s=(Te(e)?Le(e):window).visualViewport,a=!Ie()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function He(e){var t=$e(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function Fe(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&ke(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function qe(e){return Le(e).getComputedStyle(e)}function ze(e){return["table","td","th"].indexOf(Ae(e))>=0}function We(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function Re(e){return"html"===Ae(e)?e:e.assignedSlot||e.parentNode||(ke(e)?e.host:null)||We(e)}function Ve(e){return Se(e)&&"fixed"!==qe(e).position?e.offsetParent:null}function Ye(e){for(var t=Le(e),n=Ve(e);n&&ze(n)&&"static"===qe(n).position;)n=Ve(n);return n&&("html"===Ae(n)||"body"===Ae(n)&&"static"===qe(n).position)?t:n||function(e){var t=/firefox/i.test(Be());if(/Trident/i.test(Be())&&Se(e)&&"fixed"===qe(e).position)return null;var n=Re(e);for(ke(n)&&(n=n.host);Se(n)&&["html","body"].indexOf(Ae(n))<0;){var i=qe(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ke(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ue(e,t,n){return De(e,Ne(t,n))}function Qe(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Xe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Ge={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=Pe(n.placement),c=Ke(a),l=[re,oe].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Qe("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Xe(e,ae))}(o.padding,n),f=He(r),d="y"===c?ne:re,p="y"===c?ie:oe,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ye(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,_=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+b,E=Ue(_,w,y),O=c;n.modifiersData[i]=((t={})[O]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&Fe(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Je(e){return e.split("-")[1]}var Ze={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),_=re,y=ne,w=window;if(l){var E=Ye(n),O="clientHeight",x="clientWidth";if(E===Le(n)&&"static"!==qe(E=We(n)).position&&"absolute"===a&&(O="scrollHeight",x="scrollWidth"),o===ne||(o===re||o===oe)&&r===le)y=ie,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===re||(o===ne||o===ie)&&r===le)_=oe,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var C,A=Object.assign({position:a},l&&Ze),L=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Me(n*o)/o||0,y:Me(i*o)/o||0}}({x:p,y:m},Le(n)):{x:p,y:m};return p=L.x,m=L.y,c?Object.assign({},A,((C={})[y]=b?"0":"",C[_]=v?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",C)):Object.assign({},A,((t={})[y]=b?m+"px":"",t[_]=v?p+"px":"",t.transform="",t))}var tt={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:Pe(t.placement),variation:Je(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,et(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,et(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},nt={passive:!0};var it={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Le(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,nt)}),a&&c.addEventListener("resize",n.update,nt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,nt)}),a&&c.removeEventListener("resize",n.update,nt)}},data:{}},ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(e){return e.replace(/left|right|bottom|top/g,function(e){return ot[e]})}var st={start:"end",end:"start"};function at(e){return e.replace(/start|end/g,function(e){return st[e]})}function ct(e){var t=Le(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function lt(e){return $e(We(e)).left+ct(e).scrollLeft}function ut(e){var t=qe(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ft(e){return["html","body","#document"].indexOf(Ae(e))>=0?e.ownerDocument.body:Se(e)&&ut(e)?e:ft(Re(e))}function dt(e,t){var n;void 0===t&&(t=[]);var i=ft(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Le(i),s=o?[r].concat(r.visualViewport||[],ut(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(dt(Re(s)))}function pt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function ht(e,t,n){return t===fe?pt(function(e,t){var n=Le(e),i=We(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Ie();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+lt(e),y:c}}(e,n)):Te(t)?function(e,t){var n=$e(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):pt(function(e){var t,n=We(e),i=ct(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+lt(e),c=-i.scrollTop;return"rtl"===qe(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(We(e)))}function mt(e,t,n,i){var o="clippingParents"===t?function(e){var t=dt(Re(e)),n=["absolute","fixed"].indexOf(qe(e).position)>=0&&Se(e)?Ye(e):e;return Te(n)?t.filter(function(e){return Te(e)&&Fe(e,n)&&"body"!==Ae(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=ht(e,n,i);return t.top=De(o.top,t.top),t.right=Ne(o.right,t.right),t.bottom=Ne(o.bottom,t.bottom),t.left=De(o.left,t.left),t},ht(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function gt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?Pe(o):null,s=o?Je(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case ne:t={x:a,y:n.y-i.height};break;case ie:t={x:a,y:n.y+n.height};break;case oe:t={x:n.x+n.width,y:c};break;case re:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ke(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ce:t[l]=t[l]-(n[u]/2-i[u]/2);break;case le:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function vt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?ue:a,l=n.rootBoundary,u=void 0===l?fe:l,f=n.elementContext,d=void 0===f?de:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Qe("number"!=typeof g?g:Xe(g,ae)),b=d===de?pe:de,_=e.rects.popper,y=e.elements[h?b:d],w=mt(Te(y)?y:y.contextElement||We(e.elements.popper),c,u,s),E=$e(e.elements.reference),O=gt({reference:E,element:_,placement:o}),x=pt(Object.assign({},_,O)),C=d===de?x:E,A={top:w.top-C.top+v.top,bottom:C.bottom-w.bottom+v.bottom,left:w.left-C.left+v.left,right:C.right-w.right+v.right},L=e.modifiersData.offset;if(d===de&&L){var T=L[o];Object.keys(A).forEach(function(e){var t=[oe,ie].indexOf(e)>=0?1:-1,n=[ne,ie].indexOf(e)>=0?"y":"x";A[e]+=T[n]*t})}return A}function bt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?me:c,u=Je(i),f=u?a?he:he.filter(function(e){return Je(e)===u}):ae,d=f.filter(function(e){return l.indexOf(e)>=0});0===d.length&&(d=f);var p=d.reduce(function(t,n){return t[n]=vt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[Pe(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var _t={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,v=Pe(g),b=c||(v===g||!h?[rt(g)]:function(e){if(Pe(e)===se)return[];var t=rt(e);return[at(e),t,at(t)]}(g)),_=[g].concat(b).reduce(function(e,n){return e.concat(Pe(n)===se?bt(t,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,O=!0,x=_[0],C=0;C<_.length;C++){var A=_[C],L=Pe(A),T=Je(A)===ce,S=[ne,ie].indexOf(L)>=0,k=S?"width":"height",j=vt(t,{placement:A,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),P=S?T?oe:re:T?ie:ne;y[k]>w[k]&&(P=rt(P));var D=rt(P),N=[];if(r&&N.push(j[L]<=0),a&&N.push(j[P]<=0,j[D]<=0),N.every(function(e){return e})){x=A,O=!1;break}E.set(A,N)}if(O)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function yt(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function wt(e){return[ne,oe,ie,re].some(function(t){return e[t]>=0})}var Et={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=vt(t,{elementContext:"reference"}),a=vt(t,{altBoundary:!0}),c=yt(s,i),l=yt(a,o,r),u=wt(c),f=wt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Ot={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=me.reduce(function(e,n){return e[n]=function(e,t,n){var i=Pe(e),o=[re,ne].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[re,oe].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var xt={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=gt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var Ct={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=vt(t,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=Pe(t.placement),b=Je(t.placement),_=!b,y=Ke(v),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,O=t.rects.reference,x=t.rects.popper,C="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,A="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),L=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,T={x:0,y:0};if(E){if(r){var S,k="y"===y?ne:re,j="y"===y?ie:oe,P="y"===y?"height":"width",D=E[y],N=D+g[k],M=D-g[j],B=p?-x[P]/2:0,I=b===ce?O[P]:x[P],$=b===ce?-x[P]:-O[P],H=t.elements.arrow,F=p&&H?He(H):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],W=q[j],R=Ue(0,O[P],F[P]),V=_?O[P]/2-B-R-z-A.mainAxis:I-R-z-A.mainAxis,Y=_?-O[P]/2+B+R+W+A.mainAxis:$+R+W+A.mainAxis,K=t.elements.arrow&&Ye(t.elements.arrow),U=K?"y"===y?K.clientTop||0:K.clientLeft||0:0,Q=null!=(S=null==L?void 0:L[y])?S:0,X=D+Y-Q,G=Ue(p?Ne(N,D+V-Q-U):N,D,p?De(M,X):M);E[y]=G,T[y]=G-D}if(a){var J,Z="x"===y?ne:re,ee="x"===y?ie:oe,te=E[w],se="y"===w?"height":"width",ae=te+g[Z],le=te-g[ee],ue=-1!==[ne,re].indexOf(v),fe=null!=(J=null==L?void 0:L[w])?J:0,de=ue?ae:te-O[se]-x[se]-fe+A.altAxis,pe=ue?te+O[se]+x[se]-fe-A.altAxis:le,he=p&&ue?function(e,t,n){var i=Ue(e,t,n);return i>n?n:i}(de,te,pe):Ue(p?de:ae,te,p?pe:le);E[w]=he,T[w]=he-te}t.modifiersData[i]=T}},requiresIfExists:["offset"]};function At(e,t,n){void 0===n&&(n=!1);var i,o,r=Se(t),s=Se(t)&&function(e){var t=e.getBoundingClientRect(),n=Me(t.width)/e.offsetWidth||1,i=Me(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=We(t),c=$e(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Ae(t)||ut(a))&&(l=(i=t)!==Le(i)&&Se(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:ct(i)),Se(t)?((u=$e(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=lt(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Lt(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function St(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Nt.has(n)||Boolean(Mt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const It={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},$t={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Ht={entry:"(string|element|function|null)",selector:"(string|element)"};class Ft extends I{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return It}static get DefaultType(){return $t}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},Ht)}_setContent(e,t,n){const i=F.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Bt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const qt=new Set(["sanitize","allowList","sanitizeFn"]),zt="fade",Wt="show",Rt=".tooltip-inner",Vt=".modal",Yt="hide.bs.modal",Kt="hover",Ut="focus",Qt="click",Xt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Gt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Jt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Zt extends ${constructor(e,t){if(void 0===Pt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Gt}static get DefaultType(){return Jt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(Vt),Yt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=P.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Wt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._queueCallback(()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Wt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._activeTrigger[Qt]=!1,this._activeTrigger[Ut]=!1,this._activeTrigger[Kt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(zt,Wt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(zt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ft({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Rt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(zt)}_isShown(){return this.tip&&this.tip.classList.contains(Wt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Xt[t.toUpperCase()];return jt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)P.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Qt]=!(t._isShown()&&t._activeTrigger[Qt]),t.toggle()});else if("manual"!==t){const e=t===Kt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Kt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Ut:Kt]=!0,t._enter()}),P.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Ut:Kt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(Vt),Yt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=B.getDataAttributes(this._element);for(const e of Object.keys(t))qt.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Zt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}function en(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function tn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var nn;h(Zt);const on=document.getElementById("toc-bar"),rn=document.getElementById("toc-solo-trigger"),sn=document.getElementsByClassName("toc-trigger"),an=document.getElementById("toc-popup"),cn=document.getElementById("toc-popup-close"),ln="overflow-hidden",un="closing";class fn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{on.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${en(fn,this,pn)._}px 0px 0px 0px`}).observe(rn),dn._=en(fn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){en(fn,this,dn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return an.open}static showPopup(){this.lockScroll(!0),an.showModal(),cn.blur();an.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){an.toggleAttribute(un),an.addEventListener("animationend",()=>{an.toggleAttribute(un),an.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(ln,e),document.body.classList.toggle(ln,e)}static clickBackdrop(e){if(an.hasAttribute(un))return;const t=e.target.getBoundingClientRect();(e.clientXt.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...sn].forEach(e=>{e.onclick=()=>this.showPopup()}),an.onclick=e=>this.clickBackdrop(e),cn.onclick=()=>this.hidePopup(),an.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var dn={_:!0},pn={_:48};tn(fn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:en(nn=fn,nn,pn)._});tn(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const hn="dropdown",mn=".bs.dropdown",gn=".data-api",vn="ArrowUp",bn="ArrowDown",_n=`hide${mn}`,yn=`hidden${mn}`,wn=`show${mn}`,En=`shown${mn}`,On=`click${mn}${gn}`,xn=`keydown${mn}${gn}`,Cn=`keyup${mn}${gn}`,An="show",Ln='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Tn=`${Ln}.${An}`,Sn=".dropdown-menu",kn=p()?"top-end":"top-start",jn=p()?"top-start":"top-end",Pn=p()?"bottom-end":"bottom-start",Dn=p()?"bottom-start":"bottom-end",Nn=p()?"left-start":"right-start",Mn=p()?"right-start":"left-start",Bn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},In={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class $n extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=F.next(this._element,Sn)[0]||F.prev(this._element,Sn)[0]||F.findOne(Sn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Bn}static get DefaultType(){return In}static get NAME(){return hn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!P.trigger(this._element,wn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(An),this._element.classList.add(An),P.trigger(this._element,En,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!P.trigger(this._element,_n,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(An),this._element.classList.remove(An),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),P.trigger(this._element,yn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${hn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===Pt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=jt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(An)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Nn;if(e.classList.contains("dropstart"))return Mn;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?jn:kn:t?Dn:Pn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=F.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===bn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=$n.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=F.find(Tn);for(const n of t){const t=$n.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[vn,bn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Ln)?this:F.prev(this,Ln)[0]||F.next(this,Ln)[0]||F.findOne(Ln,e.delegateTarget.parentNode),r=$n.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}P.on(document,xn,Ln,$n.dataApiKeydownHandler),P.on(document,xn,Sn,$n.dataApiKeydownHandler),P.on(document,On,$n.clearMenus),P.on(document,Cn,$n.clearMenus),P.on(document,On,Ln,function(e){e.preventDefault(),$n.getOrCreateInstance(this).toggle()}),h($n);const Hn="active",Fn=document.querySelector("#mode-toggle + .dropdown-menu"),qn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const zn=document.getElementById("sidebar"),Wn=document.getElementById("sidebar-trigger"),Rn=document.getElementById("mask");class Vn{static toggle(){Yn._=en(Vn,this,!en(Vn,this,Yn)._),document.body.toggleAttribute("sidebar-display",en(Vn,this,Yn)._),zn.classList.toggle("z-2",en(Vn,this,Yn)._),Rn.classList.toggle("d-none",!en(Vn,this,Yn)._)}}var Yn={_:!1};const Kn=document.getElementById("sidebar-trigger"),Un=document.getElementById("search-trigger"),Qn=document.getElementById("search-cancel"),Xn=document.querySelectorAll("#main-wrapper>.container>.row"),Gn=document.getElementById("topbar-title"),Jn=document.getElementById("search"),Zn=document.getElementById("search-result-wrapper"),ei=document.getElementById("search-results"),ti=document.getElementById("search-input"),ni=document.getElementById("search-hints"),ii="d-block",oi="d-none",ri="input-focus",si="d-flex";class ai{static on(){Kn.classList.add(oi),Gn.classList.add(oi),Un.classList.add(oi),Jn.classList.add(si),Qn.classList.add(ii)}static off(){Qn.classList.remove(ii),Jn.classList.remove(si),Kn.classList.remove(oi),Gn.classList.remove(oi),Un.classList.remove(oi)}}class ci{static on(){this.resultVisible||(Zn.classList.remove(oi),Xn.forEach(e=>{e.classList.add(oi)}),this.resultVisible=!0)}static off(){this.resultVisible&&(ei.innerHTML="",ni.classList.contains(oi)&&ni.classList.remove(oi),Zn.classList.add(oi),Xn.forEach(e=>{e.classList.remove(oi)}),ti.textContent="",this.resultVisible=!1)}}function li(){return Qn.classList.contains(ii)}tn(ci,"resultVisible",!1),Theme.isToggleable&&(Fn.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==qn||e.classList.add(Hn)}),Fn.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=Fn.querySelector(`.${Hn}`);n!==t&&(n.classList.remove(Hn),t.classList.add(Hn),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Zt(e)),Wn.onclick=Rn.onclick=()=>Vn.toggle(),Un.addEventListener("click",()=>{ai.on(),ci.on(),ti.focus()}),Qn.addEventListener("click",()=>{ai.off(),ci.off()}),ti.addEventListener("focus",()=>{Jn.classList.add(ri)}),ti.addEventListener("focusout",()=>{Jn.classList.remove(ri)}),ti.addEventListener("input",()=>{""===ti.value?li()?ni.classList.remove(oi):ci.off():(ci.on(),li()&&ni.classList.add(oi))}),[...te].forEach(e=>{const t="h_"+e.id.substring(2),n=document.getElementById(t);e.addEventListener("hide.bs.collapse",()=>{n&&(n.querySelector(".far.fa-folder-open").className="far fa-folder fa-fw",n.querySelector(".fas.fa-angle-down").classList.add("rotate"),n.classList.remove("hide-border-bottom"))}),e.addEventListener("show.bs.collapse",()=>{n&&(n.querySelector(".far.fa-folder").className="far fa-folder-open fa-fw",n.querySelector(".fas.fa-angle-down").classList.remove("rotate"),n.classList.add("hide-border-bottom"))})})}();
diff --git a/assets/js/dist/commons.min.js b/assets/js/dist/commons.min.js
index 177faf01..1e0e65a5 100644
--- a/assets/js/dist/commons.min.js
+++ b/assets/js/dist/commons.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(o=>{o=$(o.target);(o.prop("tagName")==="button".toUpperCase()?o:o.parent()).blur(),flipMode()})});const ScrollHelper=function(){const o=$("body"),e="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let l=0,r=!1,a=!1;return{hideTopbar:()=>o.attr(e,!1),showTopbar:()=>o.attr(e,!0),addScrollUpTask:()=>{l+=1,r=r||!0},popScrollUpTask:()=>--l,hasScrollUpTask:()=>0!0===r,unlockTopbar:()=>r=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===a,lockOrientation:()=>a=!0,unLockOrientation:()=>a=!1}}();$(function(){const o=$("#sidebar-trigger"),e=$("#search-trigger"),t=$("#search-cancel"),l=$("#main"),r=$("#topbar-title"),a=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let o=0;return{block(){o=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(o)},getOffset(){return o}}}(),p={on(){o.addClass("unloaded"),r.addClass("unloaded"),e.addClass("unloaded"),a.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),a.removeClass("d-flex"),o.removeClass("unloaded"),r.removeClass("unloaded"),e.removeClass("unloaded")}},u=function(){let o=!1;return{on(){o||(d.block(),n.removeClass("unloaded"),l.addClass("unloaded"),o=!0)},off(){o&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),l.removeClass("unloaded"),d.release(),i.val(""),o=!1)},isVisible(){return o}}}();function f(){return t.hasClass("loaded")}e.click(function(){p.on(),u.on(),i.focus()}),t.click(function(){p.off(),u.off()}),i.focus(function(){a.addClass("input-focus")}),i.focusout(function(){a.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?f()?c.removeClass("unloaded"):u.off():(u.on(),f()&&c.addClass("unloaded"))})}),$(function(){var o=function(){const o="sidebar-display";let e=!1;const t=$("body");return{toggle(){!1===e?t.attr(o,""):t.removeAttr(o),e=!e}}}();$("#sidebar-trigger").click(o.toggle),$("#mask").click(o.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),t=ScrollHelper.getTopbarHeight();let o,l=0;function r(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var o=screen.orientation.type;"landscape-primary"!==o&&"landscape-secondary"!==o||r()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&r()}),$(window).scroll(()=>{o=o||!0}),setInterval(()=>{o&&(!function(){var o=$(this).scrollTop();if(!(Math.abs(l-o)<=t)){if(o>l)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(o+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}l=o}}(),o=!1)},250)}),$(function(){var o="div.post>h1:first-of-type",e=$(o);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let l=e.text().trim(),r=!1,a=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(l)&&(l=l.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(l);new IntersectionObserver(o=>{var e,t;r?(t=$(window).scrollTop(),e=ae.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=f();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of d)e()}),d.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,_=/\..*/,b=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function C(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function A(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return O.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=C(e),l=c[a]||(c[a]={}),u=A(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=x(s,t.replace(v,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return D(o,{delegateTarget:s}),i.oneOff&&P.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return D(i,{delegateTarget:e}),n.oneOff&&P.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,e.addEventListener(a,d,r)}function S(e,t,n,i,o){const r=A(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(_,""),E[e]||e}const P={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=C(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(b,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=f();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=D(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function D(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const B={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?B.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?B.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const H=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},F={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=H(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){const t=H(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){const t=H(e);return t?F.find(t):[]}},q=".bs.collapse",z=`show${q}`,W=`shown${q}`,R=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,K="show",U="collapse",Q="collapsing",X=`:scope .${U} .${U}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=F.find(G);for(const e of n){const t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(P.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(U),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U,K),this._element.style[t]="",P.trigger(this._element,W)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,R).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(U,K);for(const e of this._triggerArray){const t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U),P.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(K)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(G);for(const t of e){const e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=F.find(X,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}P.on(document,Y,G,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of F.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",fe="popper",de="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",ve="afterRead",_e="beforeMain",be="main",ye="afterMain",we="beforeWrite",Ee="write",Oe="afterWrite",xe=[me,ge,ve,_e,be,ye,we,Ee,Oe];function Ce(e){return e?(e.nodeName||"").toLowerCase():null}function Ae(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ae(e).Element||e instanceof Element}function Le(e){return e instanceof Ae(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ae(e).ShadowRoot||e instanceof ShadowRoot)}var ke={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Ce(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Ce(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function je(e){return e.split("-")[0]}var Pe=Math.max,De=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Be(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Ie(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ae(e):window).visualViewport,a=!Be()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function $e(e){var t=Ie(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function He(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Fe(e){return Ae(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Ce(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function We(e){return"html"===Ce(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function Re(e){return Le(e)&&"fixed"!==Fe(e).position?e.offsetParent:null}function Ve(e){for(var t=Ae(e),n=Re(e);n&&qe(n)&&"static"===Fe(n).position;)n=Re(n);return n&&("html"===Ce(n)||"body"===Ce(n)&&"static"===Fe(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===Fe(e).position)return null;var n=We(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Ce(n))<0;){var i=Fe(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ke(e,t,n){return Pe(e,De(t,n))}function Ue(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Xe={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=je(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ue("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),f=$e(r),d="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,_=h/2-m/2,b=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+_,E=Ke(b,w,y),O=c;n.modifiersData[i]=((t={})[O]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&He(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ge(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),_=s.hasOwnProperty("y"),b=oe,y=te,w=window;if(l){var E=Ve(n),O="clientHeight",x="clientWidth";if(E===Ae(n)&&"static"!==Fe(E=ze(n)).position&&"absolute"===a&&(O="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)b=ie,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var C,A=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ae(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},A,((C={})[y]=_?"0":"",C[b]=v?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",C)):Object.assign({},A,((t={})[y]=_?m+"px":"",t[b]=v?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:je(t.placement),variation:Ge(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ae(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ae(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Ie(ze(e)).left+at(e).scrollLeft}function lt(e){var t=Fe(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Ce(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(We(e))}function ft(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ae(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(ft(We(s)))}function dt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?dt(function(e,t){var n=Ae(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Be();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Ie(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):dt(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=Pe(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=Pe(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===Fe(o||n).direction&&(a+=Pe(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=ft(We(e)),n=["absolute","fixed"].indexOf(Fe(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&He(e,n)&&"body"!==Ce(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=Pe(o.top,t.top),t.right=De(o.right,t.right),t.bottom=De(o.bottom,t.bottom),t.left=Pe(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?je(o):null,s=o?Ge(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,f=n.elementContext,d=void 0===f?fe:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Ue("number"!=typeof g?g:Qe(g,se)),_=d===fe?de:fe,b=e.rects.popper,y=e.elements[h?_:d],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Ie(e.elements.reference),O=mt({reference:E,element:b,placement:o}),x=dt(Object.assign({},b,O)),C=d===fe?x:E,A={top:w.top-C.top+v.top,bottom:C.bottom-w.bottom+v.bottom,left:w.left-C.left+v.left,right:C.right-w.right+v.right},T=e.modifiersData.offset;if(d===fe&&T){var L=T[o];Object.keys(A).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";A[e]+=L[n]*t})}return A}function vt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Ge(i),f=u?a?pe:pe.filter(function(e){return Ge(e)===u}):se,d=f.filter(function(e){return l.indexOf(e)>=0});0===d.length&&(d=f);var p=d.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[je(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var _t={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,v=je(g),_=c||(v===g||!h?[ot(g)]:function(e){if(je(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),b=[g].concat(_).reduce(function(e,n){return e.concat(je(n)===re?vt(t,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,O=!0,x=b[0],C=0;C=0,k=S?"width":"height",j=gt(t,{placement:A,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),P=S?L?ie:oe:L?ne:te;y[k]>w[k]&&(P=ot(P));var D=ot(P),N=[];if(r&&N.push(j[T]<=0),a&&N.push(j[P]<=0,j[D]<=0),N.every(function(e){return e})){x=A,O=!1;break}E.set(A,N)}if(O)for(var M=function(e){var t=b.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function bt(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=bt(s,i),l=bt(a,o,r),u=yt(c),f=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=je(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var Ot={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=je(t.placement),_=Ge(t.placement),b=!_,y=Ye(v),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,O=t.rects.reference,x=t.rects.popper,C="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,A="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,k="y"===y?te:oe,j="y"===y?ne:ie,P="y"===y?"height":"width",D=E[y],N=D+g[k],M=D-g[j],B=p?-x[P]/2:0,I=_===ae?O[P]:x[P],$=_===ae?-x[P]:-O[P],H=t.elements.arrow,F=p&&H?$e(H):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],W=q[j],R=Ke(0,O[P],F[P]),V=b?O[P]/2-B-R-z-A.mainAxis:I-R-z-A.mainAxis,Y=b?-O[P]/2+B+R+W+A.mainAxis:$+R+W+A.mainAxis,K=t.elements.arrow&&Ve(t.elements.arrow),U=K?"y"===y?K.clientTop||0:K.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,X=D+Y-Q,G=Ke(p?De(N,D+V-Q-U):N,D,p?Pe(M,X):M);E[y]=G,L[y]=G-D}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(v),fe=null!=(J=null==T?void 0:T[w])?J:0,de=ue?ce:re-O[se]-x[se]-fe+A.altAxis,pe=ue?re+O[se]+x[se]-fe-A.altAxis:le,he=p&&ue?function(e,t,n){var i=Ke(e,t,n);return i>n?n:i}(de,re,pe):Ke(p?de:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function Ct(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Ie(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Ce(t)||lt(a))&&(l=(i=t)!==Ae(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Ie(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function At(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Dt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const Bt={allowList:Pt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},It={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ht extends I{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Bt}static get DefaultType(){return It}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=F.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ft=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Wt=".tooltip-inner",Rt=".modal",Vt="hide.bs.modal",Yt="hover",Kt="focus",Ut="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Xt={allowList:Pt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Gt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===jt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Xt}static get DefaultType(){return Gt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(Rt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=P.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._queueCallback(()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._activeTrigger[Ut]=!1,this._activeTrigger[Kt]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ht({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Wt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return kt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)P.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Ut]=!(t._isShown()&&t._activeTrigger[Ut]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Kt:Yt]=!0,t._enter()}),P.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Kt:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(Rt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=B.getDataAttributes(this._element);for(const e of Object.keys(t))Ft.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}function Zt(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function en(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var tn;h(Jt);const nn=document.getElementById("toc-bar"),on=document.getElementById("toc-solo-trigger"),rn=document.getElementsByClassName("toc-trigger"),sn=document.getElementById("toc-popup"),an=document.getElementById("toc-popup-close"),cn="overflow-hidden",ln="closing";class un{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{nn.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${Zt(un,this,dn)._}px 0px 0px 0px`}).observe(on),fn._=Zt(un,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){Zt(un,this,fn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return sn.open}static showPopup(){this.lockScroll(!0),sn.showModal(),an.blur();sn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){sn.toggleAttribute(ln),sn.addEventListener("animationend",()=>{sn.toggleAttribute(ln),sn.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(cn,e),document.body.classList.toggle(cn,e)}static clickBackdrop(e){if(sn.hasAttribute(ln))return;const t=e.target.getBoundingClientRect();(e.clientXt.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...rn].forEach(e=>{e.onclick=()=>this.showPopup()}),sn.onclick=e=>this.clickBackdrop(e),an.onclick=()=>this.hidePopup(),sn.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var fn={_:!0},dn={_:48};en(un,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:Zt(tn=un,tn,dn)._});en(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const pn="dropdown",hn=".bs.dropdown",mn=".data-api",gn="ArrowUp",vn="ArrowDown",_n=`hide${hn}`,bn=`hidden${hn}`,yn=`show${hn}`,wn=`shown${hn}`,En=`click${hn}${mn}`,On=`keydown${hn}${mn}`,xn=`keyup${hn}${mn}`,Cn="show",An='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Tn=`${An}.${Cn}`,Ln=".dropdown-menu",Sn=p()?"top-end":"top-start",kn=p()?"top-start":"top-end",jn=p()?"bottom-end":"bottom-start",Pn=p()?"bottom-start":"bottom-end",Dn=p()?"left-start":"right-start",Nn=p()?"right-start":"left-start",Mn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Bn={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class In extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=F.next(this._element,Ln)[0]||F.prev(this._element,Ln)[0]||F.findOne(Ln,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Mn}static get DefaultType(){return Bn}static get NAME(){return pn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!P.trigger(this._element,yn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Cn),this._element.classList.add(Cn),P.trigger(this._element,wn,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!P.trigger(this._element,_n,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Cn),this._element.classList.remove(Cn),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),P.trigger(this._element,bn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${pn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===jt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=kt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Cn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Dn;if(e.classList.contains("dropstart"))return Nn;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?kn:Sn:t?Pn:jn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=F.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===vn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=In.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=F.find(Tn);for(const n of t){const t=In.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[gn,vn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(An)?this:F.prev(this,An)[0]||F.next(this,An)[0]||F.findOne(An,e.delegateTarget.parentNode),r=In.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}P.on(document,On,An,In.dataApiKeydownHandler),P.on(document,On,Ln,In.dataApiKeydownHandler),P.on(document,En,In.clearMenus),P.on(document,xn,In.clearMenus),P.on(document,En,An,function(e){e.preventDefault(),In.getOrCreateInstance(this).toggle()}),h(In);const $n="active",Hn=document.querySelector("#mode-toggle + .dropdown-menu"),Fn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const qn=document.getElementById("sidebar"),zn=document.getElementById("sidebar-trigger"),Wn=document.getElementById("mask");class Rn{static toggle(){Vn._=Zt(Rn,this,!Zt(Rn,this,Vn)._),document.body.toggleAttribute("sidebar-display",Zt(Rn,this,Vn)._),qn.classList.toggle("z-2",Zt(Rn,this,Vn)._),Wn.classList.toggle("d-none",!Zt(Rn,this,Vn)._)}}var Vn={_:!1};const Yn=document.getElementById("sidebar-trigger"),Kn=document.getElementById("search-trigger"),Un=document.getElementById("search-cancel"),Qn=document.querySelectorAll("#main-wrapper>.container>.row"),Xn=document.getElementById("topbar-title"),Gn=document.getElementById("search"),Jn=document.getElementById("search-result-wrapper"),Zn=document.getElementById("search-results"),ei=document.getElementById("search-input"),ti=document.getElementById("search-hints"),ni="d-block",ii="d-none",oi="input-focus",ri="d-flex";class si{static on(){Yn.classList.add(ii),Xn.classList.add(ii),Kn.classList.add(ii),Gn.classList.add(ri),Un.classList.add(ni)}static off(){Un.classList.remove(ni),Gn.classList.remove(ri),Yn.classList.remove(ii),Xn.classList.remove(ii),Kn.classList.remove(ii)}}class ai{static on(){this.resultVisible||(Jn.classList.remove(ii),Qn.forEach(e=>{e.classList.add(ii)}),this.resultVisible=!0)}static off(){this.resultVisible&&(Zn.innerHTML="",ti.classList.contains(ii)&&ti.classList.remove(ii),Jn.classList.add(ii),Qn.forEach(e=>{e.classList.remove(ii)}),ei.textContent="",this.resultVisible=!1)}}function ci(){return Un.classList.contains(ni)}en(ai,"resultVisible",!1),zn.onclick=Wn.onclick=()=>Rn.toggle(),Kn.addEventListener("click",()=>{si.on(),ai.on(),ei.focus()}),Un.addEventListener("click",()=>{si.off(),ai.off()}),ei.addEventListener("focus",()=>{Gn.classList.add(oi)}),ei.addEventListener("focusout",()=>{Gn.classList.remove(oi)}),ei.addEventListener("input",()=>{""===ei.value?ci()?ti.classList.remove(ii):ai.off():(ai.on(),ci()&&ti.classList.add(ii))}),Theme.isToggleable&&(Hn.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==Fn||e.classList.add($n)}),Hn.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=Hn.querySelector(`.${$n}`);n!==t&&(n.classList.remove($n),t.classList.add($n),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/home.min.js b/assets/js/dist/home.min.js
index 7640e035..0c1bf6b8 100644
--- a/assets/js/dist/home.min.js
+++ b/assets/js/dist/home.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(e=>{e=$(e.target);(e.prop("tagName")==="button".toUpperCase()?e:e.parent()).blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),t="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let a=0,l=!1,r=!1;return{hideTopbar:()=>e.attr(t,!1),showTopbar:()=>e.attr(t,!0),addScrollUpTask:()=>{a+=1,l=l||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===l,unlockTopbar:()=>l=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}(),LocaleHelper=($(function(){const e=$("#sidebar-trigger"),t=$("#search-trigger"),o=$("#search-cancel"),a=$("#main"),l=$("#topbar-title"),r=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),p={on(){e.addClass("unloaded"),l.addClass("unloaded"),t.addClass("unloaded"),r.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),r.removeClass("d-flex"),e.removeClass("unloaded"),l.removeClass("unloaded"),t.removeClass("unloaded")}},u=function(){let e=!1;return{on(){e||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),e=!0)},off(){e&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),i.val(""),e=!1)},isVisible(){return e}}}();function f(){return o.hasClass("loaded")}t.click(function(){p.on(),u.on(),i.focus()}),o.click(function(){p.off(),u.off()}),i.focus(function(){r.addClass("input-focus")}),i.focusout(function(){r.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?f()?c.removeClass("unloaded"):u.off():(u.on(),f()&&c.addClass("unloaded"))})}),$(function(){var e=function(){const e="sidebar-display";let t=!1;const o=$("body");return{toggle(){!1===t?o.attr(e,""):o.removeAttr(e),t=!t}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const t=$("#search-input"),o=ScrollHelper.getTopbarHeight();let e,a=0;function l(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||l()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&l()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(!function(){var e=$(this).scrollTop();if(!(Math.abs(a-e)<=o)){if(e>a)ScrollHelper.hideTopbar(),t.is(":focus")&&t.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=e}}(),e=!1)},250)}),$(function(){var e="div.post>h1:first-of-type",t=$(e);const n=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=t.text().trim(),l=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(e=>{var t,o;l?(o=$(window).scrollTop(),t=re,attrTimestamp:()=>t,attrDateFormat:()=>o,getTimestamp:e=>Number(e.attr(t)),getDateFormat:e=>e.attr(o)}}());$(function(){dayjs.locale(LocaleHelper.locale()),dayjs.extend(window.dayjs_plugin_localizedFormat),$(`[${LocaleHelper.attrTimestamp()}]`).each(function(){var e=dayjs.unix(LocaleHelper.getTimestamp($(this))),t=e.format(LocaleHelper.getDateFormat($(this))),t=($(this).text(t),$(this).removeAttr(LocaleHelper.attrTimestamp()),$(this).removeAttr(LocaleHelper.attrDateFormat()),$(this).attr("data-toggle"));void 0!==t&&"tooltip"===t&&(t=e.format("llll"),$(this).attr("data-original-title",t))})});
+!function(){"use strict";const t=new Map;var e={set(e,n,i){t.has(e)||t.set(e,new Map);const o=t.get(e);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(e,n)=>t.has(e)&&t.get(e).get(n)||null,remove(e,n){if(!t.has(e))return;const i=t.get(e);i.delete(n),0===i.size&&t.delete(e)}};const n="transitionend",i=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),t),o=t=>null==t?`${t}`:Object.prototype.toString.call(t).match(/\s([a-z]+)/i)[1].toLowerCase(),r=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),s=t=>r(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(i(t)):null,a=t=>{if(!r(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),n=t.closest("details:not([open])");if(!n)return e;if(n!==t){const e=t.closest("summary");if(e&&e.parentNode!==n)return!1;if(null===e)return!1}return e},c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||(!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled"))),l=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?l(t.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=t=>{var e;e=()=>{const e=f();if(e){const n=t.NAME,i=e.fn[n];e.fn[n]=t.jQueryInterface,e.fn[n].Constructor=t,e.fn[n].noConflict=()=>(e.fn[n]=i,t.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of d)t()}),d.push(e)):e()},m=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;return"function"==typeof t?t.call(...e):n},g=function(t,e){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(t);const i=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:n}=window.getComputedStyle(t);const i=Number.parseFloat(e),o=Number.parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(n))):0})(e)+5;let o=!1;const r=i=>{let{target:s}=i;s===e&&(o=!0,e.removeEventListener(n,r),m(t))};e.addEventListener(n,r),setTimeout(()=>{o||e.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,b=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function A(t,e){return e&&`${e}::${w++}`||t.uidEvent||w++}function x(t){const e=A(t);return t.uidEvent=e,y[e]=y[e]||{},y[e]}function C(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(t).find(t=>t.callable===e&&t.delegationSelector===n)}function T(t,e,n){const i="string"==typeof e,o=i?n:e||n;let r=k(t);return O.has(r)||(r=t),[i,o,r]}function L(t,e,n,i,o){if("string"!=typeof e||!t)return;let[r,s,a]=T(e,n,i);if(e in E){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};s=t(s)}const c=x(t),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=A(s,e.replace(v,"")),d=r?function(t,e,n){return function i(o){const r=t.querySelectorAll(e);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(t,o.type,e,n),n.apply(s,[o])}}(t,n,s):function(t,e){return function n(i){return P(i,{delegateTarget:t}),n.oneOff&&D.off(t,i.type,e),e.apply(t,[i])}}(t,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,t.addEventListener(a,d,r)}function S(t,e,n,i,o){const r=C(e[n],i,o);r&&(t.removeEventListener(n,r,Boolean(o)),delete e[n][r.uidEvent])}function j(t,e,n,i){const o=e[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(t,e,n,s.callable,s.delegationSelector)}function k(t){return t=t.replace(b,""),E[t]||t}const D={on(t,e,n,i){L(t,e,n,i,!1)},one(t,e,n,i){L(t,e,n,i,!0)},off(t,e,n,i){if("string"!=typeof e||!t)return;const[o,r,s]=T(e,n,i),a=s!==e,c=x(t),l=c[s]||{},u=e.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))j(t,c,n,e.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!e.includes(o)||S(t,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(t,c,s,r,o?n:null)}},trigger(t,e,n){if("string"!=typeof e||!t)return null;const i=f();let o=null,r=!0,s=!0,a=!1;e!==k(e)&&i&&(o=i.Event(e,n),i(t).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(e,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&t.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(e))try{t[n]=i}catch{Object.defineProperty(t,n,{configurable:!0,get:()=>i})}return t}function N(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch{return t}}function M(t){return t.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const B={setDataAttribute(t,e,n){t.setAttribute(`data-bs-${M(e)}`,n)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${M(e)}`)},getDataAttributes(t){if(!t)return{};const e={},n=Object.keys(t.dataset).filter(t=>t.startsWith("bs")&&!t.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),e[n]=N(t.dataset[i])}return e},getDataAttribute:(t,e)=>N(t.getAttribute(`data-bs-${M(e)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const n=r(e)?B.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(e)?B.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(e)){const e=t[n],s=r(e)?"element":o(e);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(t,n){super(),(t=s(t))&&(this._element=t,this._config=this._getConfig(n),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e){g(t,e,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(s(t),this.DATA_KEY)}static getOrCreateInstance(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const F=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let n=t.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),e=n&&"#"!==n?n.trim():null}return e?e.split(",").map(t=>i(t)).join(","):null},H={find(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(e,t)},children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const n=[];let i=t.parentNode.closest(e);for(;i;)n.push(i),i=i.parentNode.closest(e);return n},prev(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return[n];n=n.previousElementSibling}return[]},next(t,e){let n=t.nextElementSibling;for(;n;){if(n.matches(e))return[n];n=n.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,t).filter(t=>!c(t)&&a(t))},getSelectorFromElement(t){const e=F(t);return e&&H.findOne(e)?e:null},getElementFromSelector(t){const e=F(t);return e?H.findOne(e):null},getMultipleElementsFromSelector(t){const e=F(t);return e?H.find(e):[]}},q=".bs.collapse",z=`show${q}`,R=`shown${q}`,W=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,U="show",K="collapse",Q="collapsing",X=`:scope .${K} .${K}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class tt extends ${constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=H.find(G);for(const t of n){const e=H.getSelectorFromElement(t),n=H.find(e).filter(t=>t===this._element);null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(t=>t!==this._element).map(t=>tt.getOrCreateInstance(t,{toggle:!1}))),t.length&&t[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(K),this._element.classList.add(Q),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K,U),this._element.style[e]="",D.trigger(this._element,R)},this._element,!0),this._element.style[e]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,W).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(K,U);for(const t of this._triggerArray){const e=H.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0;this._element.style[t]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(U)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=s(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(G);for(const e of t){const t=H.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=H.find(X,this._config.parent);return H.find(t,this._config.parent).filter(t=>!e.includes(t))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const n of t)n.classList.toggle("collapsed",!e),n.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each(function(){const n=tt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===n[t])throw new TypeError(`No method named "${t}"`);n[t]()}})}}D.on(document,Y,G,function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of H.getMultipleElementsFromSelector(this))tt.getOrCreateInstance(t,{toggle:!1}).toggle()}),h(tt),document.getElementsByClassName("collapse");var et="top",nt="bottom",it="right",ot="left",rt="auto",st=[et,nt,it,ot],at="start",ct="end",lt="clippingParents",ut="viewport",ft="popper",dt="reference",pt=st.reduce(function(t,e){return t.concat([e+"-"+at,e+"-"+ct])},[]),ht=[].concat(st,[rt]).reduce(function(t,e){return t.concat([e,e+"-"+at,e+"-"+ct])},[]),mt="beforeRead",gt="read",vt="afterRead",bt="beforeMain",_t="main",yt="afterMain",wt="beforeWrite",Et="write",Ot="afterWrite",At=[mt,gt,vt,bt,_t,yt,wt,Et,Ot];function xt(t){return t?(t.nodeName||"").toLowerCase():null}function Ct(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Tt(t){return t instanceof Ct(t).Element||t instanceof Element}function Lt(t){return t instanceof Ct(t).HTMLElement||t instanceof HTMLElement}function St(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Ct(t).ShadowRoot||t instanceof ShadowRoot)}var jt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach(function(t){var n=e.styles[t]||{},i=e.attributes[t]||{},o=e.elements[t];Lt(o)&&xt(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(t){var e=i[t];!1===e?o.removeAttribute(t):o.setAttribute(t,!0===e?"":e)}))})},effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach(function(t){var i=e.elements[t],o=e.attributes[t]||{},r=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]).reduce(function(t,e){return t[e]="",t},{});Lt(i)&&xt(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(t){i.removeAttribute(t)}))})}},requires:["computeStyles"]};function kt(t){return t.split("-")[0]}var Dt=Math.max,Pt=Math.min,Nt=Math.round;function Mt(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function Bt(){return!/^((?!chrome|android).)*safari/i.test(Mt())}function It(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var i=t.getBoundingClientRect(),o=1,r=1;e&&Lt(t)&&(o=t.offsetWidth>0&&Nt(i.width)/t.offsetWidth||1,r=t.offsetHeight>0&&Nt(i.height)/t.offsetHeight||1);var s=(Tt(t)?Ct(t):window).visualViewport,a=!Bt()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function $t(t){var e=It(t),n=t.offsetWidth,i=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-i)<=1&&(i=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:i}}function Ft(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&St(n)){var i=e;do{if(i&&t.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ht(t){return Ct(t).getComputedStyle(t)}function qt(t){return["table","td","th"].indexOf(xt(t))>=0}function zt(t){return((Tt(t)?t.ownerDocument:t.document)||window.document).documentElement}function Rt(t){return"html"===xt(t)?t:t.assignedSlot||t.parentNode||(St(t)?t.host:null)||zt(t)}function Wt(t){return Lt(t)&&"fixed"!==Ht(t).position?t.offsetParent:null}function Vt(t){for(var e=Ct(t),n=Wt(t);n&&qt(n)&&"static"===Ht(n).position;)n=Wt(n);return n&&("html"===xt(n)||"body"===xt(n)&&"static"===Ht(n).position)?e:n||function(t){var e=/firefox/i.test(Mt());if(/Trident/i.test(Mt())&&Lt(t)&&"fixed"===Ht(t).position)return null;var n=Rt(t);for(St(n)&&(n=n.host);Lt(n)&&["html","body"].indexOf(xt(n))<0;){var i=Ht(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||e&&"filter"===i.willChange||e&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(t)||e}function Yt(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ut(t,e,n){return Dt(t,Pt(e,n))}function Kt(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Qt(t,e){return e.reduce(function(e,n){return e[n]=t,e},{})}var Xt={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,n=t.state,i=t.name,o=t.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=kt(n.placement),c=Yt(a),l=[ot,it].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(t,e){return Kt("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Qt(t,st))}(o.padding,n),f=$t(r),d="y"===c?et:ot,p="y"===c?nt:it,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Vt(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,_=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+b,E=Ut(_,w,y),O=c;n.modifiersData[i]=((e={})[O]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,n=t.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=e.elements.popper.querySelector(i)))&&Ft(e.elements.popper,i)&&(e.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Gt(t){return t.split("-")[1]}var Jt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Zt(t){var e,n=t.popper,i=t.popperRect,o=t.placement,r=t.variation,s=t.offsets,a=t.position,c=t.gpuAcceleration,l=t.adaptive,u=t.roundOffsets,f=t.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),_=ot,y=et,w=window;if(l){var E=Vt(n),O="clientHeight",A="clientWidth";if(E===Ct(n)&&"static"!==Ht(E=zt(n)).position&&"absolute"===a&&(O="scrollHeight",A="scrollWidth"),o===et||(o===ot||o===it)&&r===ct)y=nt,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===ot||(o===et||o===nt)&&r===ct)_=it,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[A])-i.width,p*=c?1:-1}var x,C=Object.assign({position:a},l&&Jt),T=!0===u?function(t,e){var n=t.x,i=t.y,o=e.devicePixelRatio||1;return{x:Nt(n*o)/o||0,y:Nt(i*o)/o||0}}({x:p,y:m},Ct(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((x={})[y]=b?"0":"",x[_]=v?"0":"",x.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",x)):Object.assign({},C,((e={})[y]=b?m+"px":"",e[_]=v?p+"px":"",e.transform="",e))}var te={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,n=t.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:kt(e.placement),variation:Gt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,Zt(Object.assign({},l,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:c})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,Zt(Object.assign({},l,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},ee={passive:!0};var ne={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,n=t.instance,i=t.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ct(e.elements.popper),l=[].concat(e.scrollParents.reference,e.scrollParents.popper);return r&&l.forEach(function(t){t.addEventListener("scroll",n.update,ee)}),a&&c.addEventListener("resize",n.update,ee),function(){r&&l.forEach(function(t){t.removeEventListener("scroll",n.update,ee)}),a&&c.removeEventListener("resize",n.update,ee)}},data:{}},ie={left:"right",right:"left",bottom:"top",top:"bottom"};function oe(t){return t.replace(/left|right|bottom|top/g,function(t){return ie[t]})}var re={start:"end",end:"start"};function se(t){return t.replace(/start|end/g,function(t){return re[t]})}function ae(t){var e=Ct(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ce(t){return It(zt(t)).left+ae(t).scrollLeft}function le(t){var e=Ht(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ue(t){return["html","body","#document"].indexOf(xt(t))>=0?t.ownerDocument.body:Lt(t)&&le(t)?t:ue(Rt(t))}function fe(t,e){var n;void 0===e&&(e=[]);var i=ue(t),o=i===(null==(n=t.ownerDocument)?void 0:n.body),r=Ct(i),s=o?[r].concat(r.visualViewport||[],le(i)?i:[]):i,a=e.concat(s);return o?a:a.concat(fe(Rt(s)))}function de(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function pe(t,e,n){return e===ut?de(function(t,e){var n=Ct(t),i=zt(t),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Bt();(l||!l&&"fixed"===e)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ce(t),y:c}}(t,n)):Tt(e)?function(t,e){var n=It(t,!1,"fixed"===e);return n.top=n.top+t.clientTop,n.left=n.left+t.clientLeft,n.bottom=n.top+t.clientHeight,n.right=n.left+t.clientWidth,n.width=t.clientWidth,n.height=t.clientHeight,n.x=n.left,n.y=n.top,n}(e,n):de(function(t){var e,n=zt(t),i=ae(t),o=null==(e=t.ownerDocument)?void 0:e.body,r=Dt(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=Dt(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ce(t),c=-i.scrollTop;return"rtl"===Ht(o||n).direction&&(a+=Dt(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(zt(t)))}function he(t,e,n,i){var o="clippingParents"===e?function(t){var e=fe(Rt(t)),n=["absolute","fixed"].indexOf(Ht(t).position)>=0&&Lt(t)?Vt(t):t;return Tt(n)?e.filter(function(t){return Tt(t)&&Ft(t,n)&&"body"!==xt(t)}):[]}(t):[].concat(e),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(e,n){var o=pe(t,n,i);return e.top=Dt(o.top,e.top),e.right=Pt(o.right,e.right),e.bottom=Pt(o.bottom,e.bottom),e.left=Dt(o.left,e.left),e},pe(t,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function me(t){var e,n=t.reference,i=t.element,o=t.placement,r=o?kt(o):null,s=o?Gt(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case et:e={x:a,y:n.y-i.height};break;case nt:e={x:a,y:n.y+n.height};break;case it:e={x:n.x+n.width,y:c};break;case ot:e={x:n.x-i.width,y:c};break;default:e={x:n.x,y:n.y}}var l=r?Yt(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case at:e[l]=e[l]-(n[u]/2-i[u]/2);break;case ct:e[l]=e[l]+(n[u]/2-i[u]/2)}}return e}function ge(t,e){void 0===e&&(e={});var n=e,i=n.placement,o=void 0===i?t.placement:i,r=n.strategy,s=void 0===r?t.strategy:r,a=n.boundary,c=void 0===a?lt:a,l=n.rootBoundary,u=void 0===l?ut:l,f=n.elementContext,d=void 0===f?ft:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Kt("number"!=typeof g?g:Qt(g,st)),b=d===ft?dt:ft,_=t.rects.popper,y=t.elements[h?b:d],w=he(Tt(y)?y:y.contextElement||zt(t.elements.popper),c,u,s),E=It(t.elements.reference),O=me({reference:E,element:_,placement:o}),A=de(Object.assign({},_,O)),x=d===ft?A:E,C={top:w.top-x.top+v.top,bottom:x.bottom-w.bottom+v.bottom,left:w.left-x.left+v.left,right:x.right-w.right+v.right},T=t.modifiersData.offset;if(d===ft&&T){var L=T[o];Object.keys(C).forEach(function(t){var e=[it,nt].indexOf(t)>=0?1:-1,n=[et,nt].indexOf(t)>=0?"y":"x";C[t]+=L[n]*e})}return C}function ve(t,e){void 0===e&&(e={});var n=e,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?ht:c,u=Gt(i),f=u?a?pt:pt.filter(function(t){return Gt(t)===u}):st,d=f.filter(function(t){return l.indexOf(t)>=0});0===d.length&&(d=f);var p=d.reduce(function(e,n){return e[n]=ge(t,{placement:n,boundary:o,rootBoundary:r,padding:s})[kt(n)],e},{});return Object.keys(p).sort(function(t,e){return p[t]-p[e]})}var be={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,i=t.name;if(!e.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=e.options.placement,v=kt(g),b=c||(v===g||!h?[oe(g)]:function(t){if(kt(t)===rt)return[];var e=oe(t);return[se(t),e,se(e)]}(g)),_=[g].concat(b).reduce(function(t,n){return t.concat(kt(n)===rt?ve(e,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=e.rects.reference,w=e.rects.popper,E=new Map,O=!0,A=_[0],x=0;x<_.length;x++){var C=_[x],T=kt(C),L=Gt(C)===at,S=[et,nt].indexOf(T)>=0,j=S?"width":"height",k=ge(e,{placement:C,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),D=S?L?it:ot:L?nt:et;y[j]>w[j]&&(D=oe(D));var P=oe(D),N=[];if(r&&N.push(k[T]<=0),a&&N.push(k[D]<=0,k[P]<=0),N.every(function(t){return t})){A=C,O=!1;break}E.set(C,N)}if(O)for(var M=function(t){var e=_.find(function(e){var n=E.get(e);if(n)return n.slice(0,t).every(function(t){return t})});if(e)return A=e,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}e.placement!==A&&(e.modifiersData[i]._skip=!0,e.placement=A,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _e(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function ye(t){return[et,it,nt,ot].some(function(e){return t[e]>=0})}var we={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,n=t.name,i=e.rects.reference,o=e.rects.popper,r=e.modifiersData.preventOverflow,s=ge(e,{elementContext:"reference"}),a=ge(e,{altBoundary:!0}),c=_e(s,i),l=_e(a,o,r),u=ye(c),f=ye(l);e.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Ee={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,n=t.options,i=t.name,o=n.offset,r=void 0===o?[0,0]:o,s=ht.reduce(function(t,n){return t[n]=function(t,e,n){var i=kt(t),o=[ot,et].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},e,{placement:t})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[ot,it].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,e.rects,r),t},{}),a=s[e.placement],c=a.x,l=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=c,e.modifiersData.popperOffsets.y+=l),e.modifiersData[i]=s}};var Oe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,n=t.name;e.modifiersData[n]=me({reference:e.rects.reference,element:e.rects.popper,placement:e.placement})},data:{}};var Ae={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,i=t.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=ge(e,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=kt(e.placement),b=Gt(e.placement),_=!b,y=Yt(v),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,O=e.rects.reference,A=e.rects.popper,x="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C="number"==typeof x?{mainAxis:x,altAxis:x}:Object.assign({mainAxis:0,altAxis:0},x),T=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,L={x:0,y:0};if(E){if(r){var S,j="y"===y?et:ot,k="y"===y?nt:it,D="y"===y?"height":"width",P=E[y],N=P+g[j],M=P-g[k],B=p?-A[D]/2:0,I=b===at?O[D]:A[D],$=b===at?-A[D]:-O[D],F=e.elements.arrow,H=p&&F?$t(F):{width:0,height:0},q=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[j],R=q[k],W=Ut(0,O[D],H[D]),V=_?O[D]/2-B-W-z-C.mainAxis:I-W-z-C.mainAxis,Y=_?-O[D]/2+B+W+R+C.mainAxis:$+W+R+C.mainAxis,U=e.elements.arrow&&Vt(e.elements.arrow),K=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,X=P+Y-Q,G=Ut(p?Pt(N,P+V-Q-K):N,P,p?Dt(M,X):M);E[y]=G,L[y]=G-P}if(a){var J,Z="x"===y?et:ot,tt="x"===y?nt:it,rt=E[w],st="y"===w?"height":"width",ct=rt+g[Z],lt=rt-g[tt],ut=-1!==[et,ot].indexOf(v),ft=null!=(J=null==T?void 0:T[w])?J:0,dt=ut?ct:rt-O[st]-A[st]-ft+C.altAxis,pt=ut?rt+O[st]+A[st]-ft-C.altAxis:lt,ht=p&&ut?function(t,e,n){var i=Ut(t,e,n);return i>n?n:i}(dt,rt,pt):Ut(p?dt:ct,rt,p?pt:lt);E[w]=ht,L[w]=ht-rt}e.modifiersData[i]=L}},requiresIfExists:["offset"]};function xe(t,e,n){void 0===n&&(n=!1);var i,o,r=Lt(e),s=Lt(e)&&function(t){var e=t.getBoundingClientRect(),n=Nt(e.width)/t.offsetWidth||1,i=Nt(e.height)/t.offsetHeight||1;return 1!==n||1!==i}(e),a=zt(e),c=It(t,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==xt(e)||le(a))&&(l=(i=e)!==Ct(i)&&Lt(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:ae(i)),Lt(e)?((u=It(e,!0)).x+=e.clientLeft,u.y+=e.clientTop):a&&(u.x=ce(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ce(t){var e=new Map,n=new Set,i=[];function o(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(t){if(!n.has(t)){var i=e.get(t);i&&o(i)}}),i.push(t)}return t.forEach(function(t){e.set(t.name,t)}),t.forEach(function(t){n.has(t.name)||o(t)}),i}var Te={placement:"bottom",modifiers:[],strategy:"absolute"};function Le(){for(var t=arguments.length,e=new Array(t),n=0;n{const n=t.nodeName.toLowerCase();return e.includes(n)?!Pe.has(n)||Boolean(Ne.test(t.nodeValue)):e.filter(t=>t instanceof RegExp).some(t=>t.test(n))};const Be={allowList:De,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Ie={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$e={entry:"(string|element|function|null)",selector:"(string|element)"};class Fe extends I{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Be}static get DefaultType(){return Ie}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,n]of Object.entries(this._config.content))this._setContent(t,n,e);const e=t.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&e.classList.add(...n.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,n]of Object.entries(t))super._typeCheckConfig({selector:e,entry:n},$e)}_setContent(t,e,n){const i=H.findOne(n,t);i&&((e=this._resolvePossibleFunction(e))?r(e)?this._putElementInTemplate(s(e),i):this._config.html?i.innerHTML=this._maybeSanitize(e):i.textContent=e:i.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,n){if(!t.length)return t;if(n&&"function"==typeof n)return n(t);const i=(new window.DOMParser).parseFromString(t,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const t of o){const n=t.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){t.remove();continue}const i=[].concat(...t.attributes),o=[].concat(e["*"]||[],e[n]||[]);for(const e of i)Me(e,o)||t.removeAttribute(e.nodeName)}return i.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return m(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const He=new Set(["sanitize","allowList","sanitizeFn"]),qe="fade",ze="show",Re=".tooltip-inner",We=".modal",Ve="hide.bs.modal",Ye="hover",Ue="focus",Ke="click",Qe={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Xe={allowList:De,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Ge={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Je extends ${constructor(t,e){if(void 0===ke)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Xe}static get DefaultType(){return Ge}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(We),Ve,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=D.trigger(this._element,this.constructor.eventName("show")),e=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(ze),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))D.on(t,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(ze),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))D.off(t,"mouseover",u);this._activeTrigger[Ke]=!1,this._activeTrigger[Ue]=!1,this._activeTrigger[Ye]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(qe,ze),e.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",n),this._isAnimated()&&e.classList.add(qe),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Fe({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Re]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qe)}_isShown(){return this.tip&&this.tip.classList.contains(ze)}_createPopper(t){const e=m(this._config.placement,[this,t,this._element]),n=Qe[e.toUpperCase()];return je(this._element,t,this._getPopperConfig(n))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return m(t,[this._element,this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...m(this._config.popperConfig,[void 0,e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)D.on(this._element,this.constructor.eventName("click"),this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[Ke]=!(e._isShown()&&e._activeTrigger[Ke]),e.toggle()});else if("manual"!==e){const t=e===Ye?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=e===Ye?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,t,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?Ue:Ye]=!0,e._enter()}),D.on(this._element,n,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?Ue:Ye]=e._element.contains(t.relatedTarget),e._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(We),Ve,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=B.getDataAttributes(this._element);for(const t of Object.keys(e))He.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:s(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,n]of Object.entries(this._config))this.constructor.Default[e]!==n&&(t[e]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const e=Je.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}})}}h(Je);const Ze="data-src",tn="data-lqip",en="shimmer",nn="blur";function on(t){this.parentElement.classList.remove(t)}function rn(){this.complete&&(this.hasAttribute(tn)?on.call(this,nn):on.call(this,en))}function sn(){const t=this.getAttribute(Ze);this.setAttribute("src",encodeURI(t)),this.removeAttribute(Ze)}class an{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(t){return Number(t.getAttribute(this.attrTimestamp))}static getDateFormat(t){return t.getAttribute(this.attrDateFormat)}}function cn(t,e,n){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:n;throw new TypeError("Private element is not present on this object")}function ln(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var un;const fn=document.getElementById("toc-bar"),dn=document.getElementById("toc-solo-trigger"),pn=document.getElementsByClassName("toc-trigger"),hn=document.getElementById("toc-popup"),mn=document.getElementById("toc-popup-close"),gn="overflow-hidden",vn="closing";class bn{static initBar(){new IntersectionObserver(t=>{t.forEach(t=>{fn.classList.toggle("invisible",t.isIntersecting)})},{rootMargin:`-${cn(bn,this,yn)._}px 0px 0px 0px`}).observe(dn),_n._=cn(bn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(t=>{t.onclick=()=>this.hidePopup()})}static refresh(){cn(bn,this,_n)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return hn.open}static showPopup(){this.lockScroll(!0),hn.showModal(),mn.blur();hn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){hn.toggleAttribute(vn),hn.addEventListener("animationend",()=>{hn.toggleAttribute(vn),hn.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(t){document.documentElement.classList.toggle(gn,t),document.body.classList.toggle(gn,t)}static clickBackdrop(t){if(hn.hasAttribute(vn))return;const e=t.target.getBoundingClientRect();(t.clientXe.right||t.clientYe.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...pn].forEach(t=>{t.onclick=()=>this.showPopup()}),hn.onclick=t=>this.clickBackdrop(t),mn.onclick=()=>this.hidePopup(),hn.oncancel=t=>{t.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var _n={_:!0},yn={_:48};ln(bn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:cn(un=bn,un,yn)._});ln(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const wn="dropdown",En=".bs.dropdown",On=".data-api",An="ArrowUp",xn="ArrowDown",Cn=`hide${En}`,Tn=`hidden${En}`,Ln=`show${En}`,Sn=`shown${En}`,jn=`click${En}${On}`,kn=`keydown${En}${On}`,Dn=`keyup${En}${On}`,Pn="show",Nn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Mn=`${Nn}.${Pn}`,Bn=".dropdown-menu",In=p()?"top-end":"top-start",$n=p()?"top-start":"top-end",Fn=p()?"bottom-end":"bottom-start",Hn=p()?"bottom-start":"bottom-end",qn=p()?"left-start":"right-start",zn=p()?"right-start":"left-start",Rn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Wn={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Vn extends ${constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=H.next(this._element,Bn)[0]||H.prev(this._element,Bn)[0]||H.findOne(Bn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Rn}static get DefaultType(){return Wn}static get NAME(){return wn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!D.trigger(this._element,Ln,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))D.on(t,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pn),this._element.classList.add(Pn),D.trigger(this._element,Sn,t)}}hide(){if(c(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!D.trigger(this._element,Cn,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))D.off(t,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pn),this._element.classList.remove(Pn),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,Tn,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!r(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${wn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===ke)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let t=this._element;"parent"===this._config.reference?t=this._parent:r(this._config.reference)?t=s(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=je(t,this._menu,e)}_isShown(){return this._menu.classList.contains(Pn)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return qn;if(t.classList.contains("dropstart"))return zn;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?$n:In:e?Hn:Fn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...m(this._config.popperConfig,[void 0,t])}}_selectMenuItem(t){let{key:e,target:n}=t;const i=H.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(t=>a(t));i.length&&((t,e,n,i)=>{const o=t.length;let r=t.indexOf(e);return-1===r?!n&&i?t[o-1]:t[0]:(r+=n?1:-1,i&&(r=(r+o)%o),t[Math.max(0,Math.min(r,o-1))])})(i,n,e===xn,!i.includes(n)).focus()}static jQueryInterface(t){return this.each(function(){const e=Vn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}})}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=H.find(Mn);for(const n of e){const e=Vn.getInstance(n);if(!e||!1===e._config.autoClose)continue;const i=t.composedPath(),o=i.includes(e._menu);if(i.includes(e._element)||"inside"===e._config.autoClose&&!o||"outside"===e._config.autoClose&&o)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const r={relatedTarget:e._element};"click"===t.type&&(r.clickEvent=t),e._completeHide(r)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),n="Escape"===t.key,i=[An,xn].includes(t.key);if(!i&&!n)return;if(e&&!n)return;t.preventDefault();const o=this.matches(Nn)?this:H.prev(this,Nn)[0]||H.next(this,Nn)[0]||H.findOne(Nn,t.delegateTarget.parentNode),r=Vn.getOrCreateInstance(o);if(i)return t.stopPropagation(),r.show(),void r._selectMenuItem(t);r._isShown()&&(t.stopPropagation(),r.hide(),o.focus())}}D.on(document,kn,Nn,Vn.dataApiKeydownHandler),D.on(document,kn,Bn,Vn.dataApiKeydownHandler),D.on(document,jn,Vn.clearMenus),D.on(document,Dn,Vn.clearMenus),D.on(document,jn,Nn,function(t){t.preventDefault(),Vn.getOrCreateInstance(this).toggle()}),h(Vn);const Yn="active",Un=document.querySelector("#mode-toggle + .dropdown-menu"),Kn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const Qn=document.getElementById("sidebar"),Xn=document.getElementById("sidebar-trigger"),Gn=document.getElementById("mask");class Jn{static toggle(){Zn._=cn(Jn,this,!cn(Jn,this,Zn)._),document.body.toggleAttribute("sidebar-display",cn(Jn,this,Zn)._),Qn.classList.toggle("z-2",cn(Jn,this,Zn)._),Gn.classList.toggle("d-none",!cn(Jn,this,Zn)._)}}var Zn={_:!1};const ti=document.getElementById("sidebar-trigger"),ei=document.getElementById("search-trigger"),ni=document.getElementById("search-cancel"),ii=document.querySelectorAll("#main-wrapper>.container>.row"),oi=document.getElementById("topbar-title"),ri=document.getElementById("search"),si=document.getElementById("search-result-wrapper"),ai=document.getElementById("search-results"),ci=document.getElementById("search-input"),li=document.getElementById("search-hints"),ui="d-block",fi="d-none",di="input-focus",pi="d-flex";class hi{static on(){ti.classList.add(fi),oi.classList.add(fi),ei.classList.add(fi),ri.classList.add(pi),ni.classList.add(ui)}static off(){ni.classList.remove(ui),ri.classList.remove(pi),ti.classList.remove(fi),oi.classList.remove(fi),ei.classList.remove(fi)}}class mi{static on(){this.resultVisible||(si.classList.remove(fi),ii.forEach(t=>{t.classList.add(fi)}),this.resultVisible=!0)}static off(){this.resultVisible&&(ai.innerHTML="",li.classList.contains(fi)&&li.classList.remove(fi),si.classList.add(fi),ii.forEach(t=>{t.classList.remove(fi)}),ci.textContent="",this.resultVisible=!1)}}function gi(){return ni.classList.contains(ui)}ln(mi,"resultVisible",!1),function(){const t=document.querySelectorAll("article img");if(0===t.length)return;t.forEach(t=>{t.addEventListener("load",rn)}),document.querySelectorAll('article img[loading="lazy"]').forEach(t=>{t.complete&&on.call(t,en)});const e=document.querySelectorAll(`article img[${tn}="true"]`);e.length&&e.forEach(t=>{sn.call(t)})}(),dayjs.locale(an.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${an.attrTimestamp}]`).forEach(t=>{const e=dayjs.unix(an.getTimestamp(t)),n=e.format(an.getDateFormat(t));if(t.textContent=n,t.removeAttribute(an.attrTimestamp),t.removeAttribute(an.attrDateFormat),t.hasAttribute("data-bs-toggle")&&"tooltip"===t.getAttribute("data-bs-toggle")){const n=e.format("llll");t.setAttribute("data-bs-title",n)}}),Xn.onclick=Gn.onclick=()=>Jn.toggle(),ei.addEventListener("click",()=>{hi.on(),mi.on(),ci.focus()}),ni.addEventListener("click",()=>{hi.off(),mi.off()}),ci.addEventListener("focus",()=>{ri.classList.add(di)}),ci.addEventListener("focusout",()=>{ri.classList.remove(di)}),ci.addEventListener("input",()=>{""===ci.value?gi()?li.classList.remove(fi):mi.off():(mi.on(),gi()&&li.classList.add(fi))}),Theme.isToggleable&&(Un.querySelectorAll(".dropdown-item").forEach(t=>{t.dataset.themeMode!==Kn||t.classList.add(Yn)}),Un.addEventListener("click",t=>{const e=t.target.closest(".dropdown-item");if(!e)return;const n=Un.querySelector(`.${Yn}`);n!==e&&(n.classList.remove(Yn),e.classList.add(Yn),Theme.update(e.dataset.themeMode))})),function(){const t=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?t.classList.add("show"):t.classList.remove("show")}),t.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(t=>new Je(t))}();
diff --git a/assets/js/dist/misc.min.js b/assets/js/dist/misc.min.js
index 7640e035..a3e87ba2 100644
--- a/assets/js/dist/misc.min.js
+++ b/assets/js/dist/misc.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(e=>{e=$(e.target);(e.prop("tagName")==="button".toUpperCase()?e:e.parent()).blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),t="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let a=0,l=!1,r=!1;return{hideTopbar:()=>e.attr(t,!1),showTopbar:()=>e.attr(t,!0),addScrollUpTask:()=>{a+=1,l=l||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===l,unlockTopbar:()=>l=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}(),LocaleHelper=($(function(){const e=$("#sidebar-trigger"),t=$("#search-trigger"),o=$("#search-cancel"),a=$("#main"),l=$("#topbar-title"),r=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),p={on(){e.addClass("unloaded"),l.addClass("unloaded"),t.addClass("unloaded"),r.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),r.removeClass("d-flex"),e.removeClass("unloaded"),l.removeClass("unloaded"),t.removeClass("unloaded")}},u=function(){let e=!1;return{on(){e||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),e=!0)},off(){e&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),i.val(""),e=!1)},isVisible(){return e}}}();function f(){return o.hasClass("loaded")}t.click(function(){p.on(),u.on(),i.focus()}),o.click(function(){p.off(),u.off()}),i.focus(function(){r.addClass("input-focus")}),i.focusout(function(){r.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?f()?c.removeClass("unloaded"):u.off():(u.on(),f()&&c.addClass("unloaded"))})}),$(function(){var e=function(){const e="sidebar-display";let t=!1;const o=$("body");return{toggle(){!1===t?o.attr(e,""):o.removeAttr(e),t=!t}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const t=$("#search-input"),o=ScrollHelper.getTopbarHeight();let e,a=0;function l(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||l()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&l()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(!function(){var e=$(this).scrollTop();if(!(Math.abs(a-e)<=o)){if(e>a)ScrollHelper.hideTopbar(),t.is(":focus")&&t.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=e}}(),e=!1)},250)}),$(function(){var e="div.post>h1:first-of-type",t=$(e);const n=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=t.text().trim(),l=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(e=>{var t,o;l?(o=$(window).scrollTop(),t=re,attrTimestamp:()=>t,attrDateFormat:()=>o,getTimestamp:e=>Number(e.attr(t)),getDateFormat:e=>e.attr(o)}}());$(function(){dayjs.locale(LocaleHelper.locale()),dayjs.extend(window.dayjs_plugin_localizedFormat),$(`[${LocaleHelper.attrTimestamp()}]`).each(function(){var e=dayjs.unix(LocaleHelper.getTimestamp($(this))),t=e.format(LocaleHelper.getDateFormat($(this))),t=($(this).text(t),$(this).removeAttr(LocaleHelper.attrTimestamp()),$(this).removeAttr(LocaleHelper.attrDateFormat()),$(this).attr("data-toggle"));void 0!==t&&"tooltip"===t&&(t=e.format("llll"),$(this).attr("data-original-title",t))})});
+!function(){"use strict";const e=new Map;var t={set(t,n,i){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=f();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of d)e()}),d.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,b=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function A(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=k(e);return O.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=A(e),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=x(s,t.replace(v,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return P(i,{delegateTarget:e}),n.oneOff&&D.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,e.addEventListener(a,d,r)}function S(e,t,n,i,o){const r=C(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function j(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function k(e){return e=e.replace(b,""),E[e]||e}const D={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=A(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))j(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=f();let o=null,r=!0,s=!0,a=!1;t!==k(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const B={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?B.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?B.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const F=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},H={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=F(e);return t&&H.findOne(t)?t:null},getElementFromSelector(e){const t=F(e);return t?H.findOne(t):null},getMultipleElementsFromSelector(e){const t=F(e);return t?H.find(t):[]}},q=".bs.collapse",z=`show${q}`,W=`shown${q}`,R=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,K="show",U="collapse",Q="collapsing",X=`:scope .${U} .${U}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=H.find(G);for(const e of n){const t=H.getSelectorFromElement(e),n=H.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(U),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U,K),this._element.style[t]="",D.trigger(this._element,W)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,R).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(U,K);for(const e of this._triggerArray){const t=H.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(K)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(G);for(const t of e){const e=H.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=H.find(X,this._config.parent);return H.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}D.on(document,Y,G,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of H.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",fe="popper",de="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",ve="afterRead",be="beforeMain",_e="main",ye="afterMain",we="beforeWrite",Ee="write",Oe="afterWrite",xe=[me,ge,ve,be,_e,ye,we,Ee,Oe];function Ae(e){return e?(e.nodeName||"").toLowerCase():null}function Ce(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ce(e).Element||e instanceof Element}function Le(e){return e instanceof Ce(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ce(e).ShadowRoot||e instanceof ShadowRoot)}var je={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Ae(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Ae(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function ke(e){return e.split("-")[0]}var De=Math.max,Pe=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Be(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Ie(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ce(e):window).visualViewport,a=!Be()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function $e(e){var t=Ie(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function Fe(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function He(e){return Ce(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Ae(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function We(e){return"html"===Ae(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function Re(e){return Le(e)&&"fixed"!==He(e).position?e.offsetParent:null}function Ve(e){for(var t=Ce(e),n=Re(e);n&&qe(n)&&"static"===He(n).position;)n=Re(n);return n&&("html"===Ae(n)||"body"===Ae(n)&&"static"===He(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===He(e).position)return null;var n=We(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Ae(n))<0;){var i=He(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ke(e,t,n){return De(e,Pe(t,n))}function Ue(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Xe={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=ke(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ue("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),f=$e(r),d="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,_=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+b,E=Ke(_,w,y),O=c;n.modifiersData[i]=((t={})[O]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&Fe(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ge(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),_=oe,y=te,w=window;if(l){var E=Ve(n),O="clientHeight",x="clientWidth";if(E===Ce(n)&&"static"!==He(E=ze(n)).position&&"absolute"===a&&(O="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)_=ie,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var A,C=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ce(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((A={})[y]=b?"0":"",A[_]=v?"0":"",A.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",A)):Object.assign({},C,((t={})[y]=b?m+"px":"",t[_]=v?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:ke(t.placement),variation:Ge(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ce(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ce(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Ie(ze(e)).left+at(e).scrollLeft}function lt(e){var t=He(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Ae(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(We(e))}function ft(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ce(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(ft(We(s)))}function dt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?dt(function(e,t){var n=Ce(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Be();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Ie(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):dt(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===He(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=ft(We(e)),n=["absolute","fixed"].indexOf(He(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&Fe(e,n)&&"body"!==Ae(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=De(o.top,t.top),t.right=Pe(o.right,t.right),t.bottom=Pe(o.bottom,t.bottom),t.left=De(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?ke(o):null,s=o?Ge(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,f=n.elementContext,d=void 0===f?fe:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Ue("number"!=typeof g?g:Qe(g,se)),b=d===fe?de:fe,_=e.rects.popper,y=e.elements[h?b:d],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Ie(e.elements.reference),O=mt({reference:E,element:_,placement:o}),x=dt(Object.assign({},_,O)),A=d===fe?x:E,C={top:w.top-A.top+v.top,bottom:A.bottom-w.bottom+v.bottom,left:w.left-A.left+v.left,right:A.right-w.right+v.right},T=e.modifiersData.offset;if(d===fe&&T){var L=T[o];Object.keys(C).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";C[e]+=L[n]*t})}return C}function vt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Ge(i),f=u?a?pe:pe.filter(function(e){return Ge(e)===u}):se,d=f.filter(function(e){return l.indexOf(e)>=0});0===d.length&&(d=f);var p=d.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[ke(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var bt={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,v=ke(g),b=c||(v===g||!h?[ot(g)]:function(e){if(ke(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),_=[g].concat(b).reduce(function(e,n){return e.concat(ke(n)===re?vt(t,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,O=!0,x=_[0],A=0;A<_.length;A++){var C=_[A],T=ke(C),L=Ge(C)===ae,S=[te,ne].indexOf(T)>=0,j=S?"width":"height",k=gt(t,{placement:C,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),D=S?L?ie:oe:L?ne:te;y[j]>w[j]&&(D=ot(D));var P=ot(D),N=[];if(r&&N.push(k[T]<=0),a&&N.push(k[D]<=0,k[P]<=0),N.every(function(e){return e})){x=C,O=!1;break}E.set(C,N)}if(O)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _t(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=_t(s,i),l=_t(a,o,r),u=yt(c),f=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=ke(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var Ot={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=ke(t.placement),b=Ge(t.placement),_=!b,y=Ye(v),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,O=t.rects.reference,x=t.rects.popper,A="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,C="number"==typeof A?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,j="y"===y?te:oe,k="y"===y?ne:ie,D="y"===y?"height":"width",P=E[y],N=P+g[j],M=P-g[k],B=p?-x[D]/2:0,I=b===ae?O[D]:x[D],$=b===ae?-x[D]:-O[D],F=t.elements.arrow,H=p&&F?$e(F):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[j],W=q[k],R=Ke(0,O[D],H[D]),V=_?O[D]/2-B-R-z-C.mainAxis:I-R-z-C.mainAxis,Y=_?-O[D]/2+B+R+W+C.mainAxis:$+R+W+C.mainAxis,K=t.elements.arrow&&Ve(t.elements.arrow),U=K?"y"===y?K.clientTop||0:K.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,X=P+Y-Q,G=Ke(p?Pe(N,P+V-Q-U):N,P,p?De(M,X):M);E[y]=G,L[y]=G-P}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(v),fe=null!=(J=null==T?void 0:T[w])?J:0,de=ue?ce:re-O[se]-x[se]-fe+C.altAxis,pe=ue?re+O[se]+x[se]-fe-C.altAxis:le,he=p&&ue?function(e,t,n){var i=Ke(e,t,n);return i>n?n:i}(de,re,pe):Ke(p?de:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function At(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Ie(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Ae(t)||lt(a))&&(l=(i=t)!==Ce(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Ie(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ct(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Pt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const Bt={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},It={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ft extends I{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Bt}static get DefaultType(){return It}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=H.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ht=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Wt=".tooltip-inner",Rt=".modal",Vt="hide.bs.modal",Yt="hover",Kt="focus",Ut="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Xt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Gt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===kt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Xt}static get DefaultType(){return Gt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(Rt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=D.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._activeTrigger[Ut]=!1,this._activeTrigger[Kt]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ft({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Wt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return jt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)D.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Ut]=!(t._isShown()&&t._activeTrigger[Ut]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Kt:Yt]=!0,t._enter()}),D.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Kt:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(Rt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=B.getDataAttributes(this._element);for(const e of Object.keys(t))Ht.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}h(Jt);class Zt{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(e){return Number(e.getAttribute(this.attrTimestamp))}static getDateFormat(e){return e.getAttribute(this.attrDateFormat)}}function en(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function tn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var nn;const on=document.getElementById("toc-bar"),rn=document.getElementById("toc-solo-trigger"),sn=document.getElementsByClassName("toc-trigger"),an=document.getElementById("toc-popup"),cn=document.getElementById("toc-popup-close"),ln="overflow-hidden",un="closing";class fn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{on.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${en(fn,this,pn)._}px 0px 0px 0px`}).observe(rn),dn._=en(fn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){en(fn,this,dn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return an.open}static showPopup(){this.lockScroll(!0),an.showModal(),cn.blur();an.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){an.toggleAttribute(un),an.addEventListener("animationend",()=>{an.toggleAttribute(un),an.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(ln,e),document.body.classList.toggle(ln,e)}static clickBackdrop(e){if(an.hasAttribute(un))return;const t=e.target.getBoundingClientRect();(e.clientXt.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...sn].forEach(e=>{e.onclick=()=>this.showPopup()}),an.onclick=e=>this.clickBackdrop(e),cn.onclick=()=>this.hidePopup(),an.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var dn={_:!0},pn={_:48};tn(fn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:en(nn=fn,nn,pn)._});tn(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const hn="dropdown",mn=".bs.dropdown",gn=".data-api",vn="ArrowUp",bn="ArrowDown",_n=`hide${mn}`,yn=`hidden${mn}`,wn=`show${mn}`,En=`shown${mn}`,On=`click${mn}${gn}`,xn=`keydown${mn}${gn}`,An=`keyup${mn}${gn}`,Cn="show",Tn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Ln=`${Tn}.${Cn}`,Sn=".dropdown-menu",jn=p()?"top-end":"top-start",kn=p()?"top-start":"top-end",Dn=p()?"bottom-end":"bottom-start",Pn=p()?"bottom-start":"bottom-end",Nn=p()?"left-start":"right-start",Mn=p()?"right-start":"left-start",Bn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},In={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class $n extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=H.next(this._element,Sn)[0]||H.prev(this._element,Sn)[0]||H.findOne(Sn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Bn}static get DefaultType(){return In}static get NAME(){return hn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!D.trigger(this._element,wn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Cn),this._element.classList.add(Cn),D.trigger(this._element,En,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!D.trigger(this._element,_n,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Cn),this._element.classList.remove(Cn),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,yn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${hn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===kt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=jt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Cn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Nn;if(e.classList.contains("dropstart"))return Mn;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?kn:jn:t?Pn:Dn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=H.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===bn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=$n.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=H.find(Ln);for(const n of t){const t=$n.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[vn,bn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Tn)?this:H.prev(this,Tn)[0]||H.next(this,Tn)[0]||H.findOne(Tn,e.delegateTarget.parentNode),r=$n.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}D.on(document,xn,Tn,$n.dataApiKeydownHandler),D.on(document,xn,Sn,$n.dataApiKeydownHandler),D.on(document,On,$n.clearMenus),D.on(document,An,$n.clearMenus),D.on(document,On,Tn,function(e){e.preventDefault(),$n.getOrCreateInstance(this).toggle()}),h($n);const Fn="active",Hn=document.querySelector("#mode-toggle + .dropdown-menu"),qn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const zn=document.getElementById("sidebar"),Wn=document.getElementById("sidebar-trigger"),Rn=document.getElementById("mask");class Vn{static toggle(){Yn._=en(Vn,this,!en(Vn,this,Yn)._),document.body.toggleAttribute("sidebar-display",en(Vn,this,Yn)._),zn.classList.toggle("z-2",en(Vn,this,Yn)._),Rn.classList.toggle("d-none",!en(Vn,this,Yn)._)}}var Yn={_:!1};const Kn=document.getElementById("sidebar-trigger"),Un=document.getElementById("search-trigger"),Qn=document.getElementById("search-cancel"),Xn=document.querySelectorAll("#main-wrapper>.container>.row"),Gn=document.getElementById("topbar-title"),Jn=document.getElementById("search"),Zn=document.getElementById("search-result-wrapper"),ei=document.getElementById("search-results"),ti=document.getElementById("search-input"),ni=document.getElementById("search-hints"),ii="d-block",oi="d-none",ri="input-focus",si="d-flex";class ai{static on(){Kn.classList.add(oi),Gn.classList.add(oi),Un.classList.add(oi),Jn.classList.add(si),Qn.classList.add(ii)}static off(){Qn.classList.remove(ii),Jn.classList.remove(si),Kn.classList.remove(oi),Gn.classList.remove(oi),Un.classList.remove(oi)}}class ci{static on(){this.resultVisible||(Zn.classList.remove(oi),Xn.forEach(e=>{e.classList.add(oi)}),this.resultVisible=!0)}static off(){this.resultVisible&&(ei.innerHTML="",ni.classList.contains(oi)&&ni.classList.remove(oi),Zn.classList.add(oi),Xn.forEach(e=>{e.classList.remove(oi)}),ti.textContent="",this.resultVisible=!1)}}function li(){return Qn.classList.contains(ii)}tn(ci,"resultVisible",!1),Wn.onclick=Rn.onclick=()=>Vn.toggle(),Un.addEventListener("click",()=>{ai.on(),ci.on(),ti.focus()}),Qn.addEventListener("click",()=>{ai.off(),ci.off()}),ti.addEventListener("focus",()=>{Jn.classList.add(ri)}),ti.addEventListener("focusout",()=>{Jn.classList.remove(ri)}),ti.addEventListener("input",()=>{""===ti.value?li()?ni.classList.remove(oi):ci.off():(ci.on(),li()&&ni.classList.add(oi))}),dayjs.locale(Zt.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${Zt.attrTimestamp}]`).forEach(e=>{const t=dayjs.unix(Zt.getTimestamp(e)),n=t.format(Zt.getDateFormat(e));if(e.textContent=n,e.removeAttribute(Zt.attrTimestamp),e.removeAttribute(Zt.attrDateFormat),e.hasAttribute("data-bs-toggle")&&"tooltip"===e.getAttribute("data-bs-toggle")){const n=t.format("llll");e.setAttribute("data-bs-title",n)}}),Theme.isToggleable&&(Hn.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==qn||e.classList.add(Fn)}),Hn.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=Hn.querySelector(`.${Fn}`);n!==t&&(n.classList.remove(Fn),t.classList.add(Fn),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/page.min.js b/assets/js/dist/page.min.js
index cd907220..6cfbd5c3 100644
--- a/assets/js/dist/page.min.js
+++ b/assets/js/dist/page.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(t=>{t=$(t.target);(t.prop("tagName")==="button".toUpperCase()?t:t.parent()).blur(),flipMode()})});const ScrollHelper=function(){const t=$("body"),e="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let r=0,a=!1,l=!1;return{hideTopbar:()=>t.attr(e,!1),showTopbar:()=>t.attr(e,!0),addScrollUpTask:()=>{r+=1,a=a||!0},popScrollUpTask:()=>--r,hasScrollUpTask:()=>0!0===a,unlockTopbar:()=>a=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===l,lockOrientation:()=>l=!0,unLockOrientation:()=>l=!1}}();$(function(){const t=$("#sidebar-trigger"),e=$("#search-trigger"),o=$("#search-cancel"),r=$("#main"),a=$("#topbar-title"),l=$("#search-wrapper"),n=$("#search-result-wrapper"),i=$("#search-results"),s=$("#search-input"),c=$("#search-hints"),d=function(){let t=0;return{block(){t=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(t)},getOffset(){return t}}}(),p={on(){t.addClass("unloaded"),a.addClass("unloaded"),e.addClass("unloaded"),l.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),l.removeClass("d-flex"),t.removeClass("unloaded"),a.removeClass("unloaded"),e.removeClass("unloaded")}},u=function(){let t=!1;return{on(){t||(d.block(),n.removeClass("unloaded"),r.addClass("unloaded"),t=!0)},off(){t&&(i.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),r.removeClass("unloaded"),d.release(),s.val(""),t=!1)},isVisible(){return t}}}();function h(){return o.hasClass("loaded")}e.click(function(){p.on(),u.on(),s.focus()}),o.click(function(){p.off(),u.off()}),s.focus(function(){l.addClass("input-focus")}),s.focusout(function(){l.removeClass("input-focus")}),s.on("input",()=>{""===s.val()?h()?c.removeClass("unloaded"):u.off():(u.on(),h()&&c.addClass("unloaded"))})}),$(function(){var t=function(){const t="sidebar-display";let e=!1;const o=$("body");return{toggle(){!1===e?o.attr(t,""):o.removeAttr(t),e=!e}}}();$("#sidebar-trigger").click(t.toggle),$("#mask").click(t.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),o=ScrollHelper.getTopbarHeight();let t,r=0;function a(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var t=screen.orientation.type;"landscape-primary"!==t&&"landscape-secondary"!==t||a()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&a()}),$(window).scroll(()=>{t=t||!0}),setInterval(()=>{t&&(!function(){var t=$(this).scrollTop();if(!(Math.abs(r-t)<=o)){if(t>r)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(t+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}r=t}}(),t=!1)},250)}),$(function(){var t="div.post>h1:first-of-type",e=$(t);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const i=n.text().trim();let r=e.text().trim(),a=!1,l=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(r)&&(r=r.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(r);new IntersectionObserver(t=>{var e,o;a?(o=$(window).scrollTop(),e=l img[data-src], ${t} img[data-src].preview-img`).each(function(){var t=$(this).next(),t="EM"===t.prop("tagName")?t.text():"",e=$(this).attr("data-src");$(this).wrap(``)}),$(".popup").magnificPopup({type:"image",closeOnContentClick:!0,showCloseBtn:!1,zoom:{enabled:!0,duration:300,easing:"ease-in-out"}}),$(t+" a").has("img").addClass("img-link"))}),$(function(){var t=".code-header>button";const e="timeout",a="data-title-succeed",l="data-original-title";function n(t){if($(t)[0].hasAttribute(e)){t=$(t).attr(e);if(Number(t)>Date.now())return 1}}function i(t){$(t).attr(e,Date.now()+2e3)}function s(t){$(t).removeAttr(e)}var o=new ClipboardJS(t,{target(t){return t.parentNode.nextElementSibling.querySelector("code .rouge-code")}});$(t).tooltip({trigger:"hover",placement:"left"});const r=$(t).children().attr("class");o.on("success",t=>{t.clearSelection();const e=t.trigger;var o;n(e)||(t=e,$(t).children().attr("class","fas fa-check"),t=e,o=$(t).attr(a),$(t).attr(l,o).tooltip("show"),i(e),setTimeout(()=>{var t;t=e,$(t).tooltip("hide").removeAttr(l),t=e,$(t).children().attr("class",r),s(e)},2e3))}),$("#copy-link").click(t=>{let e=$(t.target);if(!n(e)){var t=window.location.href,o=$("");$("body").append(o),o.val(t).select(),document.execCommand("copy"),o.remove();const r=e.attr(l);t=e.attr(a);e.attr(l,t).tooltip("show"),i(e),setTimeout(()=>{e.attr(l,r),s(e)},2e3)}})}),$(function(){const t=$("#topbar-title"),s="scroll-focus";$("a[href*='#']").not("[href='#']").not("[href='#0']").click(function(a){if(this.pathname.replace(/^\//,"")===location.pathname.replace(/^\//,"")&&location.hostname===this.hostname){var l=decodeURI(this.hash);let e=RegExp(/^#fnref:/).test(l),o=!e&&RegExp(/^#fn:/).test(l);var n=l.includes(":")?l.replace(/:/g,"\\:"):l;let r=$(n);var n=t.is(":visible"),i=$(window).width()<$(window).height();if(void 0!==r){a.preventDefault(),history.pushState&&history.pushState(null,null,l);a=$(window).scrollTop();let t=r.offset().top-=8;t{if(r.focus(),$(`[${s}=true]`).length&&$(`[${s}=true]`).attr(s,!1),$(":target").length&&$(":target").attr(s,!1),(o||e)&&r.attr(s,!0),r.is(":focus"))return!1;r.attr("tabindex","-1"),r.focus(),ScrollHelper.hasScrollUpTask()&&ScrollHelper.popScrollUpTask()})}}})});
+!function(){"use strict";const e=new Map;var t={set(t,n,i){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},d=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=d();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of f)e()}),f.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},b=/[^.]*(?=\..*)\.|.*/,v=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},A=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function O(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return A.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=O(e),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const d=x(s,t.replace(b,"")),f=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return P(i,{delegateTarget:e}),n.oneOff&&D.off(e,i.type,t),t.apply(e,[i])}}(e,s);f.delegationSelector=r?n:null,f.callable=s,f.oneOff=o,f.uidEvent=d,l[d]=f,e.addEventListener(a,f,r)}function S(e,t,n,i,o){const r=C(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(v,""),E[e]||e}const D={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=O(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=d();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const I={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class B{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?I.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?I.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends B{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const H=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},F={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=H(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){const t=H(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){const t=H(e);return t?F.find(t):[]}},q=".bs.collapse",z=`show${q}`,R=`shown${q}`,W=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,U="show",K="collapse",Q="collapsing",G=`:scope .${K} .${K}`,X='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=F.find(X);for(const e of n){const t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(K),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K,U),this._element.style[t]="",D.trigger(this._element,R)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,W).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(K,U);for(const e of this._triggerArray){const t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(U)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(X);for(const t of e){const e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=F.find(G,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}D.on(document,Y,X,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of F.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",de="popper",fe="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",be="afterRead",ve="beforeMain",_e="main",ye="afterMain",we="beforeWrite",Ee="write",Ae="afterWrite",xe=[me,ge,be,ve,_e,ye,we,Ee,Ae];function Oe(e){return e?(e.nodeName||"").toLowerCase():null}function Ce(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ce(e).Element||e instanceof Element}function Le(e){return e instanceof Ce(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ce(e).ShadowRoot||e instanceof ShadowRoot)}var ke={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Oe(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Oe(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function je(e){return e.split("-")[0]}var De=Math.max,Pe=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Ie(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Be(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ce(e):window).visualViewport,a=!Ie()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,d=i.height/r;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c,x:c,y:l}}function $e(e){var t=Be(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function He(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Fe(e){return Ce(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Oe(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function Re(e){return"html"===Oe(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function We(e){return Le(e)&&"fixed"!==Fe(e).position?e.offsetParent:null}function Ve(e){for(var t=Ce(e),n=We(e);n&&qe(n)&&"static"===Fe(n).position;)n=We(n);return n&&("html"===Oe(n)||"body"===Oe(n)&&"static"===Fe(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===Fe(e).position)return null;var n=Re(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Oe(n))<0;){var i=Fe(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ue(e,t,n){return De(e,Pe(t,n))}function Ke(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Ge={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=je(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ke("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),d=$e(r),f="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),b=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,v=h/2-m/2,_=u[f],y=b-d[l]-u[p],w=b/2-d[l]/2+v,E=Ue(_,w,y),A=c;n.modifiersData[i]=((t={})[A]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&He(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Xe(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,d=e.isFixed,f=s.x,p=void 0===f?0:f,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var b=s.hasOwnProperty("x"),v=s.hasOwnProperty("y"),_=oe,y=te,w=window;if(l){var E=Ve(n),A="clientHeight",x="clientWidth";if(E===Ce(n)&&"static"!==Fe(E=ze(n)).position&&"absolute"===a&&(A="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(d&&E===w&&w.visualViewport?w.visualViewport.height:E[A])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)_=ie,p-=(d&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var O,C=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ce(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((O={})[y]=v?"0":"",O[_]=b?"0":"",O.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",O)):Object.assign({},C,((t={})[y]=v?m+"px":"",t[_]=b?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:je(t.placement),variation:Xe(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ce(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ce(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Be(ze(e)).left+at(e).scrollLeft}function lt(e){var t=Fe(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Oe(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(Re(e))}function dt(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ce(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(dt(Re(s)))}function ft(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?ft(function(e,t){var n=Ce(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Ie();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Be(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):ft(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===Fe(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=dt(Re(e)),n=["absolute","fixed"].indexOf(Fe(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&He(e,n)&&"body"!==Oe(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=De(o.top,t.top),t.right=Pe(o.right,t.right),t.bottom=Pe(o.bottom,t.bottom),t.left=De(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?je(o):null,s=o?Xe(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,d=n.elementContext,f=void 0===d?de:d,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,b=Ke("number"!=typeof g?g:Qe(g,se)),v=f===de?fe:de,_=e.rects.popper,y=e.elements[h?v:f],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Be(e.elements.reference),A=mt({reference:E,element:_,placement:o}),x=ft(Object.assign({},_,A)),O=f===de?x:E,C={top:w.top-O.top+b.top,bottom:O.bottom-w.bottom+b.bottom,left:w.left-O.left+b.left,right:O.right-w.right+b.right},T=e.modifiersData.offset;if(f===de&&T){var L=T[o];Object.keys(C).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";C[e]+=L[n]*t})}return C}function bt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Xe(i),d=u?a?pe:pe.filter(function(e){return Xe(e)===u}):se,f=d.filter(function(e){return l.indexOf(e)>=0});0===f.length&&(f=d);var p=f.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[je(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var vt={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,b=je(g),v=c||(b===g||!h?[ot(g)]:function(e){if(je(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),_=[g].concat(v).reduce(function(e,n){return e.concat(je(n)===re?bt(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,A=!0,x=_[0],O=0;O<_.length;O++){var C=_[O],T=je(C),L=Xe(C)===ae,S=[te,ne].indexOf(T)>=0,k=S?"width":"height",j=gt(t,{placement:C,boundary:u,rootBoundary:d,altBoundary:f,padding:l}),D=S?L?ie:oe:L?ne:te;y[k]>w[k]&&(D=ot(D));var P=ot(D),N=[];if(r&&N.push(j[T]<=0),a&&N.push(j[D]<=0,j[P]<=0),N.every(function(e){return e})){x=C,A=!1;break}E.set(C,N)}if(A)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},I=h?3:1;I>0;I--){if("break"===M(I))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _t(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=_t(s,i),l=_t(a,o,r),u=yt(c),d=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=je(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,f=n.tether,p=void 0===f||f,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),b=je(t.placement),v=Xe(t.placement),_=!v,y=Ye(b),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,A=t.rects.reference,x=t.rects.popper,O="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,C="number"==typeof O?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,k="y"===y?te:oe,j="y"===y?ne:ie,D="y"===y?"height":"width",P=E[y],N=P+g[k],M=P-g[j],I=p?-x[D]/2:0,B=v===ae?A[D]:x[D],$=v===ae?-x[D]:-A[D],H=t.elements.arrow,F=p&&H?$e(H):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],R=q[j],W=Ue(0,A[D],F[D]),V=_?A[D]/2-I-W-z-C.mainAxis:B-W-z-C.mainAxis,Y=_?-A[D]/2+I+W+R+C.mainAxis:$+W+R+C.mainAxis,U=t.elements.arrow&&Ve(t.elements.arrow),K=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,G=P+Y-Q,X=Ue(p?Pe(N,P+V-Q-K):N,P,p?De(M,G):M);E[y]=X,L[y]=X-P}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(b),de=null!=(J=null==T?void 0:T[w])?J:0,fe=ue?ce:re-A[se]-x[se]-de+C.altAxis,pe=ue?re+A[se]+x[se]-de-C.altAxis:le,he=p&&ue?function(e,t,n){var i=Ue(e,t,n);return i>n?n:i}(fe,re,pe):Ue(p?fe:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function Ot(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Be(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Oe(t)||lt(a))&&(l=(i=t)!==Ce(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Be(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ct(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Pt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const It={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Bt={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ht extends B{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return It}static get DefaultType(){return Bt}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=F.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ft=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Rt=".tooltip-inner",Wt=".modal",Vt="hide.bs.modal",Yt="hover",Ut="focus",Kt="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Gt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Xt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===jt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Gt}static get DefaultType(){return Xt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(Wt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=D.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._activeTrigger[Kt]=!1,this._activeTrigger[Ut]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ht({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Rt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return kt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)D.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Kt]=!(t._isShown()&&t._activeTrigger[Kt]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Ut:Yt]=!0,t._enter()}),D.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Ut:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(Wt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=I.getDataAttributes(this._element);for(const e of Object.keys(t))Ft.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}h(Jt);const Zt=".code-header>button",en="timeout",tn="data-title-succeed",nn="data-bs-original-title",on=2e3;function rn(e){if(e.hasAttribute(en)){let t=e.getAttribute(en);if(Number(t)>Date.now())return!0}return!1}function sn(e){e.setAttribute(en,Date.now()+on)}function an(e){e.removeAttribute(en)}function cn(){const e=document.querySelectorAll(Zt);if(0===e.length)return;const t=new ClipboardJS(Zt,{target:e=>e.parentNode.nextElementSibling.querySelector("code .rouge-code")});[...e].map(e=>new Jt(e,{placement:"left"})),t.on("success",e=>{const t=e.trigger;(e.clearSelection(),rn(t))||(t.children[0].setAttribute("class","fas fa-check"),function(e){const t=e.getAttribute(tn);e.setAttribute(nn,t),Jt.getInstance(e).show()}(t),sn(t),setTimeout(()=>{!function(e){Jt.getInstance(e).hide(),e.removeAttribute(nn)}(t),function(e){e.children[0].setAttribute("class","far fa-clipboard")}(t),an(t)},on))})}const ln="data-src",un="data-lqip",dn="shimmer",fn="blur";function pn(e){this.parentElement.classList.remove(e)}function hn(){this.complete&&(this.hasAttribute(un)?pn.call(this,fn):pn.call(this,dn))}function mn(){const e=this.getAttribute(ln);this.setAttribute("src",encodeURI(e)),this.removeAttribute(ln)}const gn=".popup:not(.dark)",bn=".popup:not(.light)";let vn=gn;function _n(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function yn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var wn;const En=document.getElementById("toc-bar"),An=document.getElementById("toc-solo-trigger"),xn=document.getElementsByClassName("toc-trigger"),On=document.getElementById("toc-popup"),Cn=document.getElementById("toc-popup-close"),Tn="overflow-hidden",Ln="closing";class Sn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{En.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${_n(Sn,this,jn)._}px 0px 0px 0px`}).observe(An),kn._=_n(Sn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){_n(Sn,this,kn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return On.open}static showPopup(){this.lockScroll(!0),On.showModal(),Cn.blur();On.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){On.toggleAttribute(Ln),On.addEventListener("animationend",()=>{On.toggleAttribute(Ln),On.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(Tn,e),document.body.classList.toggle(Tn,e)}static clickBackdrop(e){if(On.hasAttribute(Ln))return;const t=e.target.getBoundingClientRect();(e.clientXt.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...xn].forEach(e=>{e.onclick=()=>this.showPopup()}),On.onclick=e=>this.clickBackdrop(e),Cn.onclick=()=>this.hidePopup(),On.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var kn={_:!0},jn={_:48};yn(Sn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:_n(wn=Sn,wn,jn)._});yn(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)");const Dn="mermaid",Pn=Theme.newThemeMap("default","dark");function Nn(e){if(e.source===window&&e.data&&e.data.id===Theme.eventId){[...document.getElementsByClassName(Dn)].forEach(e=>{const t=e.previousSibling.children.item(0).textContent;e.textContent=t,e.removeAttribute("data-processed")});const e=Pn[Theme.resolvedTheme];mermaid.initialize({theme:e}),mermaid.init(null,`.${Dn}`)}}function Mn(e){const t=e.textContent,n=e.parentElement;n.classList.add("d-none");const i=document.createElement("pre");i.classList.add(Dn);const o=document.createTextNode(t);i.appendChild(o),n.after(i)}const In="dropdown",Bn=".bs.dropdown",$n=".data-api",Hn="ArrowUp",Fn="ArrowDown",qn=`hide${Bn}`,zn=`hidden${Bn}`,Rn=`show${Bn}`,Wn=`shown${Bn}`,Vn=`click${Bn}${$n}`,Yn=`keydown${Bn}${$n}`,Un=`keyup${Bn}${$n}`,Kn="show",Qn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Gn=`${Qn}.${Kn}`,Xn=".dropdown-menu",Jn=p()?"top-end":"top-start",Zn=p()?"top-start":"top-end",ei=p()?"bottom-end":"bottom-start",ti=p()?"bottom-start":"bottom-end",ni=p()?"left-start":"right-start",ii=p()?"right-start":"left-start",oi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},ri={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class si extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=F.next(this._element,Xn)[0]||F.prev(this._element,Xn)[0]||F.findOne(Xn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return oi}static get DefaultType(){return ri}static get NAME(){return In}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!D.trigger(this._element,Rn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Kn),this._element.classList.add(Kn),D.trigger(this._element,Wn,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!D.trigger(this._element,qn,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Kn),this._element.classList.remove(Kn),this._element.setAttribute("aria-expanded","false"),I.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,zn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${In.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===jt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=kt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Kn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return ni;if(e.classList.contains("dropstart"))return ii;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?Zn:Jn:t?ti:ei}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(I.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=F.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===Fn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=si.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=F.find(Gn);for(const n of t){const t=si.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[Hn,Fn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Qn)?this:F.prev(this,Qn)[0]||F.next(this,Qn)[0]||F.findOne(Qn,e.delegateTarget.parentNode),r=si.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}D.on(document,Yn,Qn,si.dataApiKeydownHandler),D.on(document,Yn,Xn,si.dataApiKeydownHandler),D.on(document,Vn,si.clearMenus),D.on(document,Un,si.clearMenus),D.on(document,Vn,Qn,function(e){e.preventDefault(),si.getOrCreateInstance(this).toggle()}),h(si);const ai="active",ci=document.querySelector("#mode-toggle + .dropdown-menu"),li=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const ui=document.getElementById("sidebar"),di=document.getElementById("sidebar-trigger"),fi=document.getElementById("mask");class pi{static toggle(){hi._=_n(pi,this,!_n(pi,this,hi)._),document.body.toggleAttribute("sidebar-display",_n(pi,this,hi)._),ui.classList.toggle("z-2",_n(pi,this,hi)._),fi.classList.toggle("d-none",!_n(pi,this,hi)._)}}var hi={_:!1};const mi=document.getElementById("sidebar-trigger"),gi=document.getElementById("search-trigger"),bi=document.getElementById("search-cancel"),vi=document.querySelectorAll("#main-wrapper>.container>.row"),_i=document.getElementById("topbar-title"),yi=document.getElementById("search"),wi=document.getElementById("search-result-wrapper"),Ei=document.getElementById("search-results"),Ai=document.getElementById("search-input"),xi=document.getElementById("search-hints"),Oi="d-block",Ci="d-none",Ti="input-focus",Li="d-flex";class Si{static on(){mi.classList.add(Ci),_i.classList.add(Ci),gi.classList.add(Ci),yi.classList.add(Li),bi.classList.add(Oi)}static off(){bi.classList.remove(Oi),yi.classList.remove(Li),mi.classList.remove(Ci),_i.classList.remove(Ci),gi.classList.remove(Ci)}}class ki{static on(){this.resultVisible||(wi.classList.remove(Ci),vi.forEach(e=>{e.classList.add(Ci)}),this.resultVisible=!0)}static off(){this.resultVisible&&(Ei.innerHTML="",xi.classList.contains(Ci)&&xi.classList.remove(Ci),wi.classList.add(Ci),vi.forEach(e=>{e.classList.remove(Ci)}),Ai.textContent="",this.resultVisible=!1)}}function ji(){return bi.classList.contains(Oi)}yn(ki,"resultVisible",!1),function(){const e=document.querySelectorAll("article img");if(0===e.length)return;e.forEach(e=>{e.addEventListener("load",hn)}),document.querySelectorAll('article img[loading="lazy"]').forEach(e=>{e.complete&&pn.call(e,dn)});const t=document.querySelectorAll(`article img[${un}="true"]`);t.length&&t.forEach(e=>{mn.call(e)})}(),function(){if(null===document.querySelector(".popup"))return;const e=!(null===document.querySelector(".popup.light")&&null===document.querySelector(".popup.dark"));Theme.isDark&&(vn=bn);let t=GLightbox({selector:`${vn}`});if(e&&Theme.isToggleable){let e=null;window.addEventListener("message",n=>{n.source===window&&n.data&&n.data.id===Theme.eventId&&([t,e]=function(e,t){return vn=vn===gn?bn:gn,null===t&&(t=GLightbox({selector:`${vn}`})),[t,e]}(t,e))})}}(),di.onclick=fi.onclick=()=>pi.toggle(),gi.addEventListener("click",()=>{Si.on(),ki.on(),Ai.focus()}),bi.addEventListener("click",()=>{Si.off(),ki.off()}),Ai.addEventListener("focus",()=>{yi.classList.add(Ti)}),Ai.addEventListener("focusout",()=>{yi.classList.remove(Ti)}),Ai.addEventListener("input",()=>{""===Ai.value?ji()?xi.classList.remove(Ci):ki.off():(ki.on(),ji()&&xi.classList.add(Ci))}),cn(),function(){const e=document.getElementById("copy-link");null!==e&&(e.addEventListener("click",e=>{const t=e.target;rn(t)||navigator.clipboard.writeText(window.location.href).then(()=>{const e=t.getAttribute(nn),n=t.getAttribute(tn);t.setAttribute(nn,n),Jt.getInstance(t).show(),sn(t),setTimeout(()=>{t.setAttribute(nn,e),an(t)},on)})}),e.addEventListener("mouseleave",e=>{Jt.getInstance(e.target).hide()}))}(),function(){if("undefined"==typeof mermaid||"function"!=typeof mermaid.initialize)return;let e={theme:Pn[Theme.resolvedTheme]};[...document.getElementsByClassName("language-mermaid")].forEach(Mn),mermaid.initialize(e),Theme.isToggleable&&window.addEventListener("message",Nn)}(),Theme.isToggleable&&(ci.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==li||e.classList.add(ai)}),ci.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=ci.querySelector(`.${ai}`);n!==t&&(n.classList.remove(ai),t.classList.add(ai),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/post.min.js b/assets/js/dist/post.min.js
index c1d086c5..c24a5bce 100644
--- a/assets/js/dist/post.min.js
+++ b/assets/js/dist/post.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(t=>{t=$(t.target);(t.prop("tagName")==="button".toUpperCase()?t:t.parent()).blur(),flipMode()})});const ScrollHelper=function(){const t=$("body"),e="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let a=0,r=!1,l=!1;return{hideTopbar:()=>t.attr(e,!1),showTopbar:()=>t.attr(e,!0),addScrollUpTask:()=>{a+=1,r=r||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===r,unlockTopbar:()=>r=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===l,lockOrientation:()=>l=!0,unLockOrientation:()=>l=!1}}(),LocaleHelper=($(function(){const t=$("#sidebar-trigger"),e=$("#search-trigger"),o=$("#search-cancel"),a=$("#main"),r=$("#topbar-title"),l=$("#search-wrapper"),n=$("#search-result-wrapper"),i=$("#search-results"),s=$("#search-input"),c=$("#search-hints"),d=function(){let t=0;return{block(){t=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(t)},getOffset(){return t}}}(),p={on(){t.addClass("unloaded"),r.addClass("unloaded"),e.addClass("unloaded"),l.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),l.removeClass("d-flex"),t.removeClass("unloaded"),r.removeClass("unloaded"),e.removeClass("unloaded")}},u=function(){let t=!1;return{on(){t||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),t=!0)},off(){t&&(i.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),s.val(""),t=!1)},isVisible(){return t}}}();function h(){return o.hasClass("loaded")}e.click(function(){p.on(),u.on(),s.focus()}),o.click(function(){p.off(),u.off()}),s.focus(function(){l.addClass("input-focus")}),s.focusout(function(){l.removeClass("input-focus")}),s.on("input",()=>{""===s.val()?h()?c.removeClass("unloaded"):u.off():(u.on(),h()&&c.addClass("unloaded"))})}),$(function(){var t=function(){const t="sidebar-display";let e=!1;const o=$("body");return{toggle(){!1===e?o.attr(t,""):o.removeAttr(t),e=!e}}}();$("#sidebar-trigger").click(t.toggle),$("#mask").click(t.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),o=ScrollHelper.getTopbarHeight();let t,a=0;function r(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var t=screen.orientation.type;"landscape-primary"!==t&&"landscape-secondary"!==t||r()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&r()}),$(window).scroll(()=>{t=t||!0}),setInterval(()=>{t&&(!function(){var t=$(this).scrollTop();if(!(Math.abs(a-t)<=o)){if(t>a)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(t+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=t}}(),t=!1)},250)}),$(function(){var t="div.post>h1:first-of-type",e=$(t);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const i=n.text().trim();let a=e.text().trim(),r=!1,l=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(t=>{var e,o;r?(o=$(window).scrollTop(),e=l img[data-src], ${t} img[data-src].preview-img`).each(function(){var t=$(this).next(),t="EM"===t.prop("tagName")?t.text():"",e=$(this).attr("data-src");$(this).wrap(``)}),$(".popup").magnificPopup({type:"image",closeOnContentClick:!0,showCloseBtn:!1,zoom:{enabled:!0,duration:300,easing:"ease-in-out"}}),$(t+" a").has("img").addClass("img-link"))}),function(){const t=$("html").attr("lang").substr(0,2),e="data-ts",o="data-df";return{locale:()=>t,attrTimestamp:()=>e,attrDateFormat:()=>o,getTimestamp:t=>Number(t.attr(e)),getDateFormat:t=>t.attr(o)}}());$(function(){dayjs.locale(LocaleHelper.locale()),dayjs.extend(window.dayjs_plugin_localizedFormat),$(`[${LocaleHelper.attrTimestamp()}]`).each(function(){var t=dayjs.unix(LocaleHelper.getTimestamp($(this))),e=t.format(LocaleHelper.getDateFormat($(this))),e=($(this).text(e),$(this).removeAttr(LocaleHelper.attrTimestamp()),$(this).removeAttr(LocaleHelper.attrDateFormat()),$(this).attr("data-toggle"));void 0!==e&&"tooltip"===e&&(e=t.format("llll"),$(this).attr("data-original-title",e))})}),$(function(){var t=".code-header>button";const e="timeout",r="data-title-succeed",l="data-original-title";function n(t){if($(t)[0].hasAttribute(e)){t=$(t).attr(e);if(Number(t)>Date.now())return 1}}function i(t){$(t).attr(e,Date.now()+2e3)}function s(t){$(t).removeAttr(e)}var o=new ClipboardJS(t,{target(t){return t.parentNode.nextElementSibling.querySelector("code .rouge-code")}});$(t).tooltip({trigger:"hover",placement:"left"});const a=$(t).children().attr("class");o.on("success",t=>{t.clearSelection();const e=t.trigger;var o;n(e)||(t=e,$(t).children().attr("class","fas fa-check"),t=e,o=$(t).attr(r),$(t).attr(l,o).tooltip("show"),i(e),setTimeout(()=>{var t;t=e,$(t).tooltip("hide").removeAttr(l),t=e,$(t).children().attr("class",a),s(e)},2e3))}),$("#copy-link").click(t=>{let e=$(t.target);if(!n(e)){var t=window.location.href,o=$("");$("body").append(o),o.val(t).select(),document.execCommand("copy"),o.remove();const a=e.attr(l);t=e.attr(r);e.attr(l,t).tooltip("show"),i(e),setTimeout(()=>{e.attr(l,a),s(e)},2e3)}})}),$(function(){const t=$("#topbar-title"),s="scroll-focus";$("a[href*='#']").not("[href='#']").not("[href='#0']").click(function(r){if(this.pathname.replace(/^\//,"")===location.pathname.replace(/^\//,"")&&location.hostname===this.hostname){var l=decodeURI(this.hash);let e=RegExp(/^#fnref:/).test(l),o=!e&&RegExp(/^#fn:/).test(l);var n=l.includes(":")?l.replace(/:/g,"\\:"):l;let a=$(n);var n=t.is(":visible"),i=$(window).width()<$(window).height();if(void 0!==a){r.preventDefault(),history.pushState&&history.pushState(null,null,l);r=$(window).scrollTop();let t=a.offset().top-=8;t{if(a.focus(),$(`[${s}=true]`).length&&$(`[${s}=true]`).attr(s,!1),$(":target").length&&$(":target").attr(s,!1),(o||e)&&a.attr(s,!0),a.is(":focus"))return!1;a.attr("tabindex","-1"),a.focus(),ScrollHelper.hasScrollUpTask()&&ScrollHelper.popScrollUpTask()})}}})});
+!function(){"use strict";const e=new Map;var t={set(t,n,i){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},d=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=d();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of f)e()}),f.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},b=/[^.]*(?=\..*)\.|.*/,v=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},A=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function O(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return A.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=O(e),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const d=x(s,t.replace(b,"")),f=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return P(i,{delegateTarget:e}),n.oneOff&&D.off(e,i.type,t),t.apply(e,[i])}}(e,s);f.delegationSelector=r?n:null,f.callable=s,f.oneOff=o,f.uidEvent=d,l[d]=f,e.addEventListener(a,f,r)}function S(e,t,n,i,o){const r=C(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(v,""),E[e]||e}const D={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=O(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=d();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const I={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class B{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?I.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?I.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends B{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const F=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},H={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=F(e);return t&&H.findOne(t)?t:null},getElementFromSelector(e){const t=F(e);return t?H.findOne(t):null},getMultipleElementsFromSelector(e){const t=F(e);return t?H.find(t):[]}},q=".bs.collapse",z=`show${q}`,R=`shown${q}`,W=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,U="show",K="collapse",Q="collapsing",G=`:scope .${K} .${K}`,X='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=H.find(X);for(const e of n){const t=H.getSelectorFromElement(e),n=H.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(K),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K,U),this._element.style[t]="",D.trigger(this._element,R)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,W).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(K,U);for(const e of this._triggerArray){const t=H.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(U)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(X);for(const t of e){const e=H.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=H.find(G,this._config.parent);return H.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}D.on(document,Y,X,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of H.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",de="popper",fe="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",be="afterRead",ve="beforeMain",_e="main",ye="afterMain",we="beforeWrite",Ee="write",Ae="afterWrite",xe=[me,ge,be,ve,_e,ye,we,Ee,Ae];function Oe(e){return e?(e.nodeName||"").toLowerCase():null}function Ce(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ce(e).Element||e instanceof Element}function Le(e){return e instanceof Ce(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ce(e).ShadowRoot||e instanceof ShadowRoot)}var ke={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Oe(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Oe(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function je(e){return e.split("-")[0]}var De=Math.max,Pe=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Ie(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Be(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ce(e):window).visualViewport,a=!Ie()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,d=i.height/r;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c,x:c,y:l}}function $e(e){var t=Be(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function Fe(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function He(e){return Ce(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Oe(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function Re(e){return"html"===Oe(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function We(e){return Le(e)&&"fixed"!==He(e).position?e.offsetParent:null}function Ve(e){for(var t=Ce(e),n=We(e);n&&qe(n)&&"static"===He(n).position;)n=We(n);return n&&("html"===Oe(n)||"body"===Oe(n)&&"static"===He(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===He(e).position)return null;var n=Re(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Oe(n))<0;){var i=He(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ue(e,t,n){return De(e,Pe(t,n))}function Ke(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Ge={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=je(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ke("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),d=$e(r),f="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),b=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,v=h/2-m/2,_=u[f],y=b-d[l]-u[p],w=b/2-d[l]/2+v,E=Ue(_,w,y),A=c;n.modifiersData[i]=((t={})[A]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&Fe(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Xe(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,d=e.isFixed,f=s.x,p=void 0===f?0:f,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var b=s.hasOwnProperty("x"),v=s.hasOwnProperty("y"),_=oe,y=te,w=window;if(l){var E=Ve(n),A="clientHeight",x="clientWidth";if(E===Ce(n)&&"static"!==He(E=ze(n)).position&&"absolute"===a&&(A="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(d&&E===w&&w.visualViewport?w.visualViewport.height:E[A])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)_=ie,p-=(d&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var O,C=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ce(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((O={})[y]=v?"0":"",O[_]=b?"0":"",O.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",O)):Object.assign({},C,((t={})[y]=v?m+"px":"",t[_]=b?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:je(t.placement),variation:Xe(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ce(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ce(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Be(ze(e)).left+at(e).scrollLeft}function lt(e){var t=He(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Oe(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(Re(e))}function dt(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ce(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(dt(Re(s)))}function ft(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?ft(function(e,t){var n=Ce(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Ie();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Be(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):ft(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===He(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=dt(Re(e)),n=["absolute","fixed"].indexOf(He(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&Fe(e,n)&&"body"!==Oe(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=De(o.top,t.top),t.right=Pe(o.right,t.right),t.bottom=Pe(o.bottom,t.bottom),t.left=De(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?je(o):null,s=o?Xe(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,d=n.elementContext,f=void 0===d?de:d,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,b=Ke("number"!=typeof g?g:Qe(g,se)),v=f===de?fe:de,_=e.rects.popper,y=e.elements[h?v:f],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Be(e.elements.reference),A=mt({reference:E,element:_,placement:o}),x=ft(Object.assign({},_,A)),O=f===de?x:E,C={top:w.top-O.top+b.top,bottom:O.bottom-w.bottom+b.bottom,left:w.left-O.left+b.left,right:O.right-w.right+b.right},T=e.modifiersData.offset;if(f===de&&T){var L=T[o];Object.keys(C).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";C[e]+=L[n]*t})}return C}function bt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Xe(i),d=u?a?pe:pe.filter(function(e){return Xe(e)===u}):se,f=d.filter(function(e){return l.indexOf(e)>=0});0===f.length&&(f=d);var p=f.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[je(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var vt={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,b=je(g),v=c||(b===g||!h?[ot(g)]:function(e){if(je(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),_=[g].concat(v).reduce(function(e,n){return e.concat(je(n)===re?bt(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,A=!0,x=_[0],O=0;O<_.length;O++){var C=_[O],T=je(C),L=Xe(C)===ae,S=[te,ne].indexOf(T)>=0,k=S?"width":"height",j=gt(t,{placement:C,boundary:u,rootBoundary:d,altBoundary:f,padding:l}),D=S?L?ie:oe:L?ne:te;y[k]>w[k]&&(D=ot(D));var P=ot(D),N=[];if(r&&N.push(j[T]<=0),a&&N.push(j[D]<=0,j[P]<=0),N.every(function(e){return e})){x=C,A=!1;break}E.set(C,N)}if(A)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},I=h?3:1;I>0;I--){if("break"===M(I))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _t(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=_t(s,i),l=_t(a,o,r),u=yt(c),d=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=je(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,f=n.tether,p=void 0===f||f,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),b=je(t.placement),v=Xe(t.placement),_=!v,y=Ye(b),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,A=t.rects.reference,x=t.rects.popper,O="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,C="number"==typeof O?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,k="y"===y?te:oe,j="y"===y?ne:ie,D="y"===y?"height":"width",P=E[y],N=P+g[k],M=P-g[j],I=p?-x[D]/2:0,B=v===ae?A[D]:x[D],$=v===ae?-x[D]:-A[D],F=t.elements.arrow,H=p&&F?$e(F):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],R=q[j],W=Ue(0,A[D],H[D]),V=_?A[D]/2-I-W-z-C.mainAxis:B-W-z-C.mainAxis,Y=_?-A[D]/2+I+W+R+C.mainAxis:$+W+R+C.mainAxis,U=t.elements.arrow&&Ve(t.elements.arrow),K=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,G=P+Y-Q,X=Ue(p?Pe(N,P+V-Q-K):N,P,p?De(M,G):M);E[y]=X,L[y]=X-P}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(b),de=null!=(J=null==T?void 0:T[w])?J:0,fe=ue?ce:re-A[se]-x[se]-de+C.altAxis,pe=ue?re+A[se]+x[se]-de-C.altAxis:le,he=p&&ue?function(e,t,n){var i=Ue(e,t,n);return i>n?n:i}(fe,re,pe):Ue(p?fe:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function Ot(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Be(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Oe(t)||lt(a))&&(l=(i=t)!==Ce(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Be(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ct(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Pt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const It={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Bt={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ft extends B{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return It}static get DefaultType(){return Bt}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=H.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ht=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Rt=".tooltip-inner",Wt=".modal",Vt="hide.bs.modal",Yt="hover",Ut="focus",Kt="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Gt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Xt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===jt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Gt}static get DefaultType(){return Xt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(Wt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=D.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._activeTrigger[Kt]=!1,this._activeTrigger[Ut]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ft({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Rt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return kt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)D.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Kt]=!(t._isShown()&&t._activeTrigger[Kt]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Ut:Yt]=!0,t._enter()}),D.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Ut:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(Wt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=I.getDataAttributes(this._element);for(const e of Object.keys(t))Ht.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}h(Jt);const Zt=".code-header>button",en="timeout",tn="data-title-succeed",nn="data-bs-original-title",on=2e3;function rn(e){if(e.hasAttribute(en)){let t=e.getAttribute(en);if(Number(t)>Date.now())return!0}return!1}function sn(e){e.setAttribute(en,Date.now()+on)}function an(e){e.removeAttribute(en)}function cn(){const e=document.querySelectorAll(Zt);if(0===e.length)return;const t=new ClipboardJS(Zt,{target:e=>e.parentNode.nextElementSibling.querySelector("code .rouge-code")});[...e].map(e=>new Jt(e,{placement:"left"})),t.on("success",e=>{const t=e.trigger;(e.clearSelection(),rn(t))||(t.children[0].setAttribute("class","fas fa-check"),function(e){const t=e.getAttribute(tn);e.setAttribute(nn,t),Jt.getInstance(e).show()}(t),sn(t),setTimeout(()=>{!function(e){Jt.getInstance(e).hide(),e.removeAttribute(nn)}(t),function(e){e.children[0].setAttribute("class","far fa-clipboard")}(t),an(t)},on))})}const ln="data-src",un="data-lqip",dn="shimmer",fn="blur";function pn(e){this.parentElement.classList.remove(e)}function hn(){this.complete&&(this.hasAttribute(un)?pn.call(this,fn):pn.call(this,dn))}function mn(){const e=this.getAttribute(ln);this.setAttribute("src",encodeURI(e)),this.removeAttribute(ln)}const gn=".popup:not(.dark)",bn=".popup:not(.light)";let vn=gn;class _n{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(e){return Number(e.getAttribute(this.attrTimestamp))}static getDateFormat(e){return e.getAttribute(this.attrDateFormat)}}function yn(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var En;const An=document.getElementById("toc-bar"),xn=document.getElementById("toc-solo-trigger"),On=document.getElementsByClassName("toc-trigger"),Cn=document.getElementById("toc-popup"),Tn=document.getElementById("toc-popup-close"),Ln="overflow-hidden",Sn="closing";class kn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{An.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${yn(kn,this,Dn)._}px 0px 0px 0px`}).observe(xn),jn._=yn(kn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){yn(kn,this,jn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return Cn.open}static showPopup(){this.lockScroll(!0),Cn.showModal(),Tn.blur();Cn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){Cn.toggleAttribute(Sn),Cn.addEventListener("animationend",()=>{Cn.toggleAttribute(Sn),Cn.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(Ln,e),document.body.classList.toggle(Ln,e)}static clickBackdrop(e){if(Cn.hasAttribute(Sn))return;const t=e.target.getBoundingClientRect();(e.clientXt.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...On].forEach(e=>{e.onclick=()=>this.showPopup()}),Cn.onclick=e=>this.clickBackdrop(e),Tn.onclick=()=>this.hidePopup(),Cn.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var jn={_:!0},Dn={_:48};wn(kn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:yn(En=kn,En,Dn)._});class Pn{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}}wn(Pn,"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32});const Nn=matchMedia("(min-width: 1200px)");function Mn(e){e.matches?(kn.popupOpened&&kn.hidePopup(),Pn.refresh()):kn.refresh()}const In="mermaid",Bn=Theme.newThemeMap("default","dark");function $n(e){if(e.source===window&&e.data&&e.data.id===Theme.eventId){[...document.getElementsByClassName(In)].forEach(e=>{const t=e.previousSibling.children.item(0).textContent;e.textContent=t,e.removeAttribute("data-processed")});const e=Bn[Theme.resolvedTheme];mermaid.initialize({theme:e}),mermaid.init(null,`.${In}`)}}function Fn(e){const t=e.textContent,n=e.parentElement;n.classList.add("d-none");const i=document.createElement("pre");i.classList.add(In);const o=document.createTextNode(t);i.appendChild(o),n.after(i)}const Hn="dropdown",qn=".bs.dropdown",zn=".data-api",Rn="ArrowUp",Wn="ArrowDown",Vn=`hide${qn}`,Yn=`hidden${qn}`,Un=`show${qn}`,Kn=`shown${qn}`,Qn=`click${qn}${zn}`,Gn=`keydown${qn}${zn}`,Xn=`keyup${qn}${zn}`,Jn="show",Zn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ei=`${Zn}.${Jn}`,ti=".dropdown-menu",ni=p()?"top-end":"top-start",ii=p()?"top-start":"top-end",oi=p()?"bottom-end":"bottom-start",ri=p()?"bottom-start":"bottom-end",si=p()?"left-start":"right-start",ai=p()?"right-start":"left-start",ci={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},li={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class ui extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=H.next(this._element,ti)[0]||H.prev(this._element,ti)[0]||H.findOne(ti,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return ci}static get DefaultType(){return li}static get NAME(){return Hn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!D.trigger(this._element,Un,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Jn),this._element.classList.add(Jn),D.trigger(this._element,Kn,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!D.trigger(this._element,Vn,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Jn),this._element.classList.remove(Jn),this._element.setAttribute("aria-expanded","false"),I.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,Yn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${Hn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===jt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=kt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Jn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return si;if(e.classList.contains("dropstart"))return ai;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?ii:ni:t?ri:oi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(I.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=H.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===Wn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=ui.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=H.find(ei);for(const n of t){const t=ui.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[Rn,Wn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Zn)?this:H.prev(this,Zn)[0]||H.next(this,Zn)[0]||H.findOne(Zn,e.delegateTarget.parentNode),r=ui.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}D.on(document,Gn,Zn,ui.dataApiKeydownHandler),D.on(document,Gn,ti,ui.dataApiKeydownHandler),D.on(document,Qn,ui.clearMenus),D.on(document,Xn,ui.clearMenus),D.on(document,Qn,Zn,function(e){e.preventDefault(),ui.getOrCreateInstance(this).toggle()}),h(ui);const di="active",fi=document.querySelector("#mode-toggle + .dropdown-menu"),pi=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const hi=document.getElementById("sidebar"),mi=document.getElementById("sidebar-trigger"),gi=document.getElementById("mask");class bi{static toggle(){vi._=yn(bi,this,!yn(bi,this,vi)._),document.body.toggleAttribute("sidebar-display",yn(bi,this,vi)._),hi.classList.toggle("z-2",yn(bi,this,vi)._),gi.classList.toggle("d-none",!yn(bi,this,vi)._)}}var vi={_:!1};const _i=document.getElementById("sidebar-trigger"),yi=document.getElementById("search-trigger"),wi=document.getElementById("search-cancel"),Ei=document.querySelectorAll("#main-wrapper>.container>.row"),Ai=document.getElementById("topbar-title"),xi=document.getElementById("search"),Oi=document.getElementById("search-result-wrapper"),Ci=document.getElementById("search-results"),Ti=document.getElementById("search-input"),Li=document.getElementById("search-hints"),Si="d-block",ki="d-none",ji="input-focus",Di="d-flex";class Pi{static on(){_i.classList.add(ki),Ai.classList.add(ki),yi.classList.add(ki),xi.classList.add(Di),wi.classList.add(Si)}static off(){wi.classList.remove(Si),xi.classList.remove(Di),_i.classList.remove(ki),Ai.classList.remove(ki),yi.classList.remove(ki)}}class Ni{static on(){this.resultVisible||(Oi.classList.remove(ki),Ei.forEach(e=>{e.classList.add(ki)}),this.resultVisible=!0)}static off(){this.resultVisible&&(Ci.innerHTML="",Li.classList.contains(ki)&&Li.classList.remove(ki),Oi.classList.add(ki),Ei.forEach(e=>{e.classList.remove(ki)}),Ti.textContent="",this.resultVisible=!1)}}function Mi(){return wi.classList.contains(Si)}wn(Ni,"resultVisible",!1),function(){const e=document.querySelectorAll("article img");if(0===e.length)return;e.forEach(e=>{e.addEventListener("load",hn)}),document.querySelectorAll('article img[loading="lazy"]').forEach(e=>{e.complete&&pn.call(e,dn)});const t=document.querySelectorAll(`article img[${un}="true"]`);t.length&&t.forEach(e=>{mn.call(e)})}(),function(){if(null===document.querySelector('main>article[data-toc="true"]'))return;Nn.matches?Pn.init():kn.init(),document.getElementById("toc-wrapper").classList.remove("invisible"),Nn.onchange=Mn}(),function(){if(null===document.querySelector(".popup"))return;const e=!(null===document.querySelector(".popup.light")&&null===document.querySelector(".popup.dark"));Theme.isDark&&(vn=bn);let t=GLightbox({selector:`${vn}`});if(e&&Theme.isToggleable){let e=null;window.addEventListener("message",n=>{n.source===window&&n.data&&n.data.id===Theme.eventId&&([t,e]=function(e,t){return vn=vn===gn?bn:gn,null===t&&(t=GLightbox({selector:`${vn}`})),[t,e]}(t,e))})}}(),mi.onclick=gi.onclick=()=>bi.toggle(),dayjs.locale(_n.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${_n.attrTimestamp}]`).forEach(e=>{const t=dayjs.unix(_n.getTimestamp(e)),n=t.format(_n.getDateFormat(e));if(e.textContent=n,e.removeAttribute(_n.attrTimestamp),e.removeAttribute(_n.attrDateFormat),e.hasAttribute("data-bs-toggle")&&"tooltip"===e.getAttribute("data-bs-toggle")){const n=t.format("llll");e.setAttribute("data-bs-title",n)}}),cn(),function(){const e=document.getElementById("copy-link");null!==e&&(e.addEventListener("click",e=>{const t=e.target;rn(t)||navigator.clipboard.writeText(window.location.href).then(()=>{const e=t.getAttribute(nn),n=t.getAttribute(tn);t.setAttribute(nn,n),Jt.getInstance(t).show(),sn(t),setTimeout(()=>{t.setAttribute(nn,e),an(t)},on)})}),e.addEventListener("mouseleave",e=>{Jt.getInstance(e.target).hide()}))}(),yi.addEventListener("click",()=>{Pi.on(),Ni.on(),Ti.focus()}),wi.addEventListener("click",()=>{Pi.off(),Ni.off()}),Ti.addEventListener("focus",()=>{xi.classList.add(ji)}),Ti.addEventListener("focusout",()=>{xi.classList.remove(ji)}),Ti.addEventListener("input",()=>{""===Ti.value?Mi()?Li.classList.remove(ki):Ni.off():(Ni.on(),Mi()&&Li.classList.add(ki))}),function(){if("undefined"==typeof mermaid||"function"!=typeof mermaid.initialize)return;let e={theme:Bn[Theme.resolvedTheme]};[...document.getElementsByClassName("language-mermaid")].forEach(Fn),mermaid.initialize(e),Theme.isToggleable&&window.addEventListener("message",$n)}(),Theme.isToggleable&&(fi.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==pi||e.classList.add(di)}),fi.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=fi.querySelector(`.${di}`);n!==t&&(n.classList.remove(di),t.classList.add(di),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/pvreport.min.js b/assets/js/dist/pvreport.min.js
deleted file mode 100644
index f64fa4e0..00000000
--- a/assets/js/dist/pvreport.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
- */
-const getInitStatus=function(){let t=!1;return()=>{var e=t;return t=t||!0,e}}(),PvOpts=function(){function t(e){return $(e).attr("content")}function e(e){e=t(e);return void 0!==e&&!1!==e}return{getProxyMeta(){return t("meta[name=pv-proxy-endpoint]")},getLocalMeta(){return t("meta[name=pv-cache-path]")},hasProxyMeta(){return e("meta[name=pv-proxy-endpoint]")},hasLocalMeta(){return e("meta[name=pv-cache-path]")}}}(),PvStorage=function(){const a={KEY_PV:"pv",KEY_PV_SRC:"pv_src",KEY_CREATION:"pv_created_date"},t={LOCAL:"same-origin",PROXY:"cors"};function r(e){return localStorage.getItem(e)}function o(e,t){localStorage.setItem(e,t)}function n(e,t){o(a.KEY_PV,e),o(a.KEY_PV_SRC,t),o(a.KEY_CREATION,(new Date).toJSON())}return{keysCount(){return Object.keys(a).length},hasCache(){return null!==localStorage.getItem(a.KEY_PV)},getCache(){return JSON.parse(localStorage.getItem(a.KEY_PV))},saveLocalCache(e){n(e,t.LOCAL)},saveProxyCache(e){n(e,t.PROXY)},isExpired(){var e=new Date(r(a.KEY_CREATION));return e.setHours(e.getHours()+1),Date.now()>=e.getTime()},isFromLocal(){return r(a.KEY_PV_SRC)===t.LOCAL},isFromProxy(){return r(a.KEY_PV_SRC)===t.PROXY},newerThan(e){return PvStorage.getCache().totalsForAllResults["ga:pageviews"]>e.totalsForAllResults["ga:pageviews"]},inspectKeys(){if(localStorage.length!==PvStorage.keysCount())localStorage.clear();else for(let e=0;e{PvStorage.saveProxyCache(JSON.stringify(e))},error:(e,t,a)=>{console.log("Failed to load pageviews from proxy server: "+a)}})}function fetchLocalPageviews(t=!1){return fetch(PvOpts.getLocalMeta()).then(e=>e.json()).then(e=>{t&&PvStorage.isFromProxy()&&PvStorage.newerThan(e)||(displayPageviews(e),PvStorage.saveLocalCache(JSON.stringify(e)))})}$(function(){$(".pageviews").length<=0||(PvStorage.inspectKeys(),PvStorage.hasCache()?(displayPageviews(PvStorage.getCache()),PvStorage.isExpired()?PvOpts.hasLocalMeta()?fetchLocalPageviews(!0).then(fetchProxyPageviews):fetchProxyPageviews():PvStorage.isFromLocal()&&fetchProxyPageviews()):PvOpts.hasLocalMeta()?fetchLocalPageviews().then(fetchProxyPageviews):fetchProxyPageviews())});
diff --git a/assets/js/dist/sw.min.js b/assets/js/dist/sw.min.js
new file mode 100644
index 00000000..87e253b4
--- /dev/null
+++ b/assets/js/dist/sw.min.js
@@ -0,0 +1,7 @@
+---
+permalink: /:basename
+---
+/*!
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
+ */
+!function(){"use strict";importScripts("./assets/js/data/swconf.js");const e=swconf.purge,t=swconf.interceptor;self.addEventListener("install",t=>{e||t.waitUntil(caches.open(swconf.cacheName).then(e=>e.addAll(swconf.resources)))}),self.addEventListener("activate",t=>{t.waitUntil(caches.keys().then(t=>Promise.all(t.map(t=>e||t!==swconf.cacheName?caches.delete(t):void 0))))}),self.addEventListener("message",e=>{"SKIP_WAITING"===e.data&&self.skipWaiting()}),self.addEventListener("fetch",s=>{s.request.headers.has("range")||s.respondWith(caches.match(s.request).then(n=>n||fetch(s.request).then(n=>{const r=s.request.url;if(e||"GET"!==s.request.method||!function(e){const s=new URL(e),n=s.pathname;if(!s.protocol.startsWith("http"))return!1;for(const e of t.urlPrefixes)if(s.href.startsWith(e))return!1;for(const e of t.paths)if(n.startsWith(e))return!1;return!0}(r))return n;let a=n.clone();return caches.open(swconf.cacheName).then(e=>{e.put(s.request,a)}),n})))})}();
diff --git a/assets/js/dist/theme.min.js b/assets/js/dist/theme.min.js
new file mode 100644
index 00000000..ddfcef4b
--- /dev/null
+++ b/assets/js/dist/theme.min.js
@@ -0,0 +1,4 @@
+/*!
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
+ */
+var Theme=function(){"use strict";function t(t,e,i){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:i;throw new TypeError("Private element is not present on this object")}function e(e,i,s){return s(t(e,i))}function i(t,e,i){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var s=i.call(t,e);if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var s;class r{static get resolvedTheme(){return e(r,this,n)||e(r,this,o)}static get isSystemTheme(){return null===e(r,this,n)}static get isDark(){return this.resolvedTheme===this.Mode.DARK}static newThemeMap(t,e){return{[this.Mode.LIGHT]:t,[this.Mode.DARK]:e}}static init(){if(!this.isToggleable)return void t(r,this,l).call(this);const i=e(r,this,n);i?t(r,this,a).call(this,i,{domPersist:!0}):t(r,this,a).call(this,e(r,this,o)),t(r,this,m)._.addEventListener("change",()=>{e(r,this,n)||(t(r,this,a).call(this,e(r,this,o)),t(r,this,c).call(this))})}static update(i){const s=i===this.Mode.SYSTEM?e(r,this,o):i;s!==this.resolvedTheme&&t(r,this,c).call(this),t(r,this,a).call(this,s,{persist:i!==this.Mode.SYSTEM}),i===this.Mode.SYSTEM&&t(r,this,l).call(this)}}function n(e){return localStorage.getItem(t(s,e,u)._)}function o(t){return e(s,t,h)?t.Mode.DARK:t.Mode.LIGHT}function h(e){return t(s,e,m)._.matches}function a(e){let{persist:i=!1,domPersist:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t(s,this,d)._.dataset.bsTheme=e,i&&localStorage.setItem(t(s,this,u)._,e),(r||i)&&t(s,this,d)._.toggleAttribute("data-theme-persisted",!0)}function l(){localStorage.removeItem(t(s,this,u)._),t(s,this,d)._.toggleAttribute("data-theme-persisted",!1)}function c(){window.postMessage({id:this.eventId},"*")}s=r;var u={_:"theme"};i(r,"Mode",Object.freeze({DARK:"dark",LIGHT:"light",SYSTEM:"system"}));var d={_:document.documentElement},m={_:window.matchMedia("(prefers-color-scheme: dark)")};return i(r,"isToggleable",null===e(s,s,function(e){return t(s,e,d)._.dataset.bsTheme||null})),i(r,"eventId","theme-updated"),r.init(),r}();
diff --git a/assets/js/lightbox.js b/assets/js/lightbox.js
deleted file mode 100644
index c42a2896..00000000
--- a/assets/js/lightbox.js
+++ /dev/null
@@ -1,141 +0,0 @@
-function is_youtubelink(url) {
- var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
- return (url.match(p)) ? RegExp.$1 : false;
-}
-function is_imagelink(url) {
- var p = /([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/i;
- return (url.match(p)) ? true : false;
-}
-function is_vimeolink(url,el) {
- var id = false;
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function() {
- if (xmlhttp.readyState == XMLHttpRequest.DONE) { // XMLHttpRequest.DONE == 4
- if (xmlhttp.status == 200) {
- var response = JSON.parse(xmlhttp.responseText);
- id = response.video_id;
- console.log(id);
- el.classList.add('lightbox-vimeo');
- el.setAttribute('data-id',id);
-
- el.addEventListener("click", function(event) {
- event.preventDefault();
- document.getElementById('lightbox').innerHTML = '›‹';
- document.getElementById('lightbox').style.display = 'block';
-
- setGallery(this);
- });
- }
- else if (xmlhttp.status == 400) {
- alert('There was an error 400');
- }
- else {
- alert('something else other than 200 was returned');
- }
- }
- };
- xmlhttp.open("GET", 'https://vimeo.com/api/oembed.json?url='+url, true);
- xmlhttp.send();
-}
-function setGallery(el) {
- var elements = document.body.querySelectorAll(".gallery");
- elements.forEach(element => {
- element.classList.remove('gallery');
- });
- if(el.closest('ul, p')) {
- var link_elements = el.closest('ul, p').querySelectorAll("a[class*='lightbox-']");
- link_elements.forEach(link_element => {
- link_element.classList.remove('current');
- });
- link_elements.forEach(link_element => {
- if(el.getAttribute('href') == link_element.getAttribute('href')) {
- link_element.classList.add('current');
- }
- });
- if(link_elements.length>1) {
- document.getElementById('lightbox').classList.add('gallery');
- link_elements.forEach(link_element => {
- link_element.classList.add('gallery');
- });
- }
- var currentkey;
- var gallery_elements = document.querySelectorAll('a.gallery');
- Object.keys(gallery_elements).forEach(function (k) {
- if(gallery_elements[k].classList.contains('current')) currentkey = k;
- });
- if(currentkey==(gallery_elements.length-1)) var nextkey = 0;
- else var nextkey = parseInt(currentkey)+1;
- if(currentkey==0) var prevkey = parseInt(gallery_elements.length-1);
- else var prevkey = parseInt(currentkey)-1;
- document.getElementById('next').addEventListener("click", function() {
- gallery_elements[nextkey].click();
- });
- document.getElementById('prev').addEventListener("click", function() {
- gallery_elements[prevkey].click();
- });
- }
-}
-
-document.addEventListener("DOMContentLoaded", function() {
-
- //create lightbox div in the footer
- var newdiv = document.createElement("div");
- newdiv.setAttribute('id',"lightbox");
- document.body.appendChild(newdiv);
-
- //add classes to links to be able to initiate lightboxes
- var elements = document.querySelectorAll('a');
- elements.forEach(element => {
- var url = element.getAttribute('href');
- if(url) {
- if(url.indexOf('vimeo') !== -1 && !element.classList.contains('no-lightbox')) {
- is_vimeolink(url,element);
- }
- if(is_youtubelink(url) && !element.classList.contains('no-lightbox')) {
- element.classList.add('lightbox-youtube');
- element.setAttribute('data-id',is_youtubelink(url));
- }
- if(is_imagelink(url) && !element.classList.contains('no-lightbox')) {
- element.classList.add('lightbox-image');
- var href = element.getAttribute('href');
- var filename = href.split('/').pop();
- var split = filename.split(".");
- var name = split[0];
- element.setAttribute('title',name);
- }
- }
- });
-
- //remove the clicked lightbox
- document.getElementById('lightbox').addEventListener("click", function(event) {
- if(event.target.id != 'next' && event.target.id != 'prev'){
- this.innerHTML = '';
- document.getElementById('lightbox').style.display = 'none';
- }
- });
-
- //add the youtube lightbox on click
- var elements = document.querySelectorAll('a.lightbox-youtube');
- elements.forEach(element => {
- element.addEventListener("click", function(event) {
- event.preventDefault();
- document.getElementById('lightbox').innerHTML = '›‹';
- document.getElementById('lightbox').style.display = 'block';
-
- setGallery(this);
- });
- });
-
- //add the image lightbox on click
- var elements = document.querySelectorAll('a.lightbox-image');
- elements.forEach(element => {
- element.addEventListener("click", function(event) {
- event.preventDefault();
- document.getElementById('lightbox').innerHTML = '›‹
'+this.getAttribute('title')+'';
- document.getElementById('lightbox').style.display = 'block';
-
- setGallery(this);
- });
- });
-
-});
\ No newline at end of file
diff --git a/assets/js/purify.min.js b/assets/js/purify.min.js
deleted file mode 100644
index 79d614c3..00000000
--- a/assets/js/purify.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! @license DOMPurify 3.0.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.0/LICENSE */
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,n){return t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(e,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,a){return r=n()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var a=new(Function.bind.apply(e,o));return r&&t(a,r.prototype),a},r.apply(null,arguments)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,a=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(e){l=!0,o=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw o}}return a}(e,t)||i(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(e)||function(){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 i(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?n-1:0),o=1;o=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,l=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){c=!0,a=e},f:function(){try{l||null==n.return||n.return()}finally{if(c)throw a}}}}(c(e));try{for(r.s();!(t=r.n()).done;){var a=o(t.value,2),l=a[0],u=a[1];n[l]=u}}catch(e){r.e(e)}finally{r.f()}return n}function M(e,t){for(;null!==e;){var n=m(e,t);if(n){if(n.get)return R(n.get);if("function"==typeof n.value)return R(n.value)}e=f(e)}return function(e){return console.warn("fallback value for",e),null}}var I=p(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),U=p(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),F=p(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),z=p(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),H=p(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),j=p(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=p(["#text"]),B=p(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),G=p(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),W=p(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),q=p(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Y=d(/\{\{[\w\W]*|[\w\W]*\}\}/gm),$=d(/<%[\w\W]*|[\w\W]*%>/gm),K=d(/\${[\w\W]*}/gm),V=d(/^data-[\-\w.\u00B7-\uFFFF]/),X=d(/^aria-[\-\w]+$/),Z=d(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),J=d(/^(?:\w+script|data):/i),Q=d(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ee=d(/^html$/i),te=function(){return"undefined"==typeof window?null:window},ne=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var a="dompurify"+(r?"#"+r:"");try{return t.createPolicy(a,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};var re=function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:te(),r=function(e){return t(e)};if(r.version="3.0.0",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;var o=n.document,i=n.document,l=n.DocumentFragment,u=n.HTMLTemplateElement,s=n.Node,f=n.Element,m=n.NodeFilter,d=n.NamedNodeMap,h=void 0===d?n.NamedNodeMap||n.MozNamedAttrMap:d,y=n.HTMLFormElement,g=n.DOMParser,b=n.trustedTypes,v=f.prototype,R=M(v,"cloneNode"),re=M(v,"nextSibling"),oe=M(v,"childNodes"),ae=M(v,"parentNode");if("function"==typeof u){var ie=i.createElement("template");ie.content&&ie.content.ownerDocument&&(i=ie.content.ownerDocument)}var le=ne(b,o),ce=le?le.createHTML(""):"",ue=i,se=ue.implementation,fe=ue.createNodeIterator,me=ue.createDocumentFragment,pe=ue.getElementsByTagName,de=o.importNode,he={};r.isSupported="function"==typeof c&&"function"==typeof ae&&se&&void 0!==se.createHTMLDocument;var ye,ge,be=Y,ve=$,Te=K,Ne=V,Ae=X,Ee=J,we=Q,Se=Z,_e=null,xe=C({},[].concat(a(I),a(U),a(F),a(H),a(P))),ke=null,Oe=C({},[].concat(a(B),a(G),a(W),a(q))),De=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Re=null,Ce=null,Le=!0,Me=!0,Ie=!1,Ue=!0,Fe=!1,ze=!1,He=!1,je=!1,Pe=!1,Be=!1,Ge=!1,We=!0,qe=!1,Ye="user-content-",$e=!0,Ke=!1,Ve={},Xe=null,Ze=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Je=null,Qe=C({},["audio","video","img","source","image","track"]),et=null,tt=C({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),nt="http://www.w3.org/1998/Math/MathML",rt="http://www.w3.org/2000/svg",ot="http://www.w3.org/1999/xhtml",at=ot,it=!1,lt=null,ct=C({},[nt,rt,ot],w),ut=["application/xhtml+xml","text/html"],st="text/html",ft=null,mt=i.createElement("form"),pt=function(e){return e instanceof RegExp||e instanceof Function},dt=function(t){ft&&ft===t||(t&&"object"===e(t)||(t={}),t=L(t),ye=ye=-1===ut.indexOf(t.PARSER_MEDIA_TYPE)?st:t.PARSER_MEDIA_TYPE,ge="application/xhtml+xml"===ye?w:E,_e="ALLOWED_TAGS"in t?C({},t.ALLOWED_TAGS,ge):xe,ke="ALLOWED_ATTR"in t?C({},t.ALLOWED_ATTR,ge):Oe,lt="ALLOWED_NAMESPACES"in t?C({},t.ALLOWED_NAMESPACES,w):ct,et="ADD_URI_SAFE_ATTR"in t?C(L(tt),t.ADD_URI_SAFE_ATTR,ge):tt,Je="ADD_DATA_URI_TAGS"in t?C(L(Qe),t.ADD_DATA_URI_TAGS,ge):Qe,Xe="FORBID_CONTENTS"in t?C({},t.FORBID_CONTENTS,ge):Ze,Re="FORBID_TAGS"in t?C({},t.FORBID_TAGS,ge):{},Ce="FORBID_ATTR"in t?C({},t.FORBID_ATTR,ge):{},Ve="USE_PROFILES"in t&&t.USE_PROFILES,Le=!1!==t.ALLOW_ARIA_ATTR,Me=!1!==t.ALLOW_DATA_ATTR,Ie=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ue=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Fe=t.SAFE_FOR_TEMPLATES||!1,ze=t.WHOLE_DOCUMENT||!1,Pe=t.RETURN_DOM||!1,Be=t.RETURN_DOM_FRAGMENT||!1,Ge=t.RETURN_TRUSTED_TYPE||!1,je=t.FORCE_BODY||!1,We=!1!==t.SANITIZE_DOM,qe=t.SANITIZE_NAMED_PROPS||!1,$e=!1!==t.KEEP_CONTENT,Ke=t.IN_PLACE||!1,Se=t.ALLOWED_URI_REGEXP||Se,at=t.NAMESPACE||ot,De=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(De.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(De.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(De.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Fe&&(Me=!1),Be&&(Pe=!0),Ve&&(_e=C({},a(P)),ke=[],!0===Ve.html&&(C(_e,I),C(ke,B)),!0===Ve.svg&&(C(_e,U),C(ke,G),C(ke,q)),!0===Ve.svgFilters&&(C(_e,F),C(ke,G),C(ke,q)),!0===Ve.mathMl&&(C(_e,H),C(ke,W),C(ke,q))),t.ADD_TAGS&&(_e===xe&&(_e=L(_e)),C(_e,t.ADD_TAGS,ge)),t.ADD_ATTR&&(ke===Oe&&(ke=L(ke)),C(ke,t.ADD_ATTR,ge)),t.ADD_URI_SAFE_ATTR&&C(et,t.ADD_URI_SAFE_ATTR,ge),t.FORBID_CONTENTS&&(Xe===Ze&&(Xe=L(Xe)),C(Xe,t.FORBID_CONTENTS,ge)),$e&&(_e["#text"]=!0),ze&&C(_e,["html","head","body"]),_e.table&&(C(_e,["tbody"]),delete Re.tbody),p&&p(t),ft=t)},ht=C({},["mi","mo","mn","ms","mtext"]),yt=C({},["foreignobject","desc","title","annotation-xml"]),gt=C({},["title","style","font","a","script"]),bt=C({},U);C(bt,F),C(bt,z);var vt=C({},H);C(vt,j);var Tt=function(e){var t=ae(e);t&&t.tagName||(t={namespaceURI:at,tagName:"template"});var n=E(e.tagName),r=E(t.tagName);return!!lt[e.namespaceURI]&&(e.namespaceURI===rt?t.namespaceURI===ot?"svg"===n:t.namespaceURI===nt?"svg"===n&&("annotation-xml"===r||ht[r]):Boolean(bt[n]):e.namespaceURI===nt?t.namespaceURI===ot?"math"===n:t.namespaceURI===rt?"math"===n&&yt[r]:Boolean(vt[n]):e.namespaceURI===ot?!(t.namespaceURI===rt&&!yt[r])&&(!(t.namespaceURI===nt&&!ht[r])&&(!vt[n]&&(gt[n]||!bt[n]))):!("application/xhtml+xml"!==ye||!lt[e.namespaceURI]))},Nt=function(e){A(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},At=function(e,t){try{A(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){A(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!ke[e])if(Pe||Be)try{Nt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Et=function(e){var t,n;if(je)e=" "+e;else{var r=S(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===ye&&at===ot&&(e=''+e+"");var o=le?le.createHTML(e):e;if(at===ot)try{t=(new g).parseFromString(o,ye)}catch(e){}if(!t||!t.documentElement){t=se.createDocument(at,"template",null);try{t.documentElement.innerHTML=it?ce:o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),at===ot?pe.call(t,ze?"html":"body")[0]:ze?t.documentElement:a},wt=function(e){return fe.call(e.ownerDocument||e,e,m.SHOW_ELEMENT|m.SHOW_COMMENT|m.SHOW_TEXT,null,!1)},St=function(e){return e instanceof y&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof h)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},_t=function(t){return"object"===e(s)?t instanceof s:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},xt=function(e,t,n){he[e]&&T(he[e],(function(e){e.call(r,t,n,ft)}))},kt=function(e){var t;if(xt("beforeSanitizeElements",e,null),St(e))return Nt(e),!0;var n=ge(e.nodeName);if(xt("uponSanitizeElement",e,{tagName:n,allowedTags:_e}),e.hasChildNodes()&&!_t(e.firstElementChild)&&(!_t(e.content)||!_t(e.content.firstElementChild))&&O(/<[/\w]/g,e.innerHTML)&&O(/<[/\w]/g,e.textContent))return Nt(e),!0;if(!_e[n]||Re[n]){if(!Re[n]&&Dt(n)){if(De.tagNameCheck instanceof RegExp&&O(De.tagNameCheck,n))return!1;if(De.tagNameCheck instanceof Function&&De.tagNameCheck(n))return!1}if($e&&!Xe[n]){var o=ae(e)||e.parentNode,a=oe(e)||e.childNodes;if(a&&o)for(var i=a.length-1;i>=0;--i)o.insertBefore(R(a[i],!0),re(e))}return Nt(e),!0}return e instanceof f&&!Tt(e)?(Nt(e),!0):"noscript"!==n&&"noembed"!==n||!O(/<\/no(script|embed)/i,e.innerHTML)?(Fe&&3===e.nodeType&&(t=e.textContent,t=_(t,be," "),t=_(t,ve," "),t=_(t,Te," "),e.textContent!==t&&(A(r.removed,{element:e.cloneNode()}),e.textContent=t)),xt("afterSanitizeElements",e,null),!1):(Nt(e),!0)},Ot=function(e,t,n){if(We&&("id"===t||"name"===t)&&(n in i||n in mt))return!1;if(Me&&!Ce[t]&&O(Ne,t));else if(Le&&O(Ae,t));else if(!ke[t]||Ce[t]){if(!(Dt(e)&&(De.tagNameCheck instanceof RegExp&&O(De.tagNameCheck,e)||De.tagNameCheck instanceof Function&&De.tagNameCheck(e))&&(De.attributeNameCheck instanceof RegExp&&O(De.attributeNameCheck,t)||De.attributeNameCheck instanceof Function&&De.attributeNameCheck(t))||"is"===t&&De.allowCustomizedBuiltInElements&&(De.tagNameCheck instanceof RegExp&&O(De.tagNameCheck,n)||De.tagNameCheck instanceof Function&&De.tagNameCheck(n))))return!1}else if(et[t]);else if(O(Se,_(n,we,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==x(n,"data:")||!Je[e]){if(Ie&&!O(Ee,_(n,we,"")));else if(n)return!1}else;return!0},Dt=function(e){return e.indexOf("-")>0},Rt=function(t){var n,o,a,i;xt("beforeSanitizeAttributes",t,null);var l=t.attributes;if(l){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ke};for(i=l.length;i--;){var u=n=l[i],s=u.name,f=u.namespaceURI;if(o="value"===s?n.value:k(n.value),a=ge(s),c.attrName=a,c.attrValue=o,c.keepAttr=!0,c.forceKeepAttr=void 0,xt("uponSanitizeAttribute",t,c),o=c.attrValue,!c.forceKeepAttr&&(At(s,t),c.keepAttr))if(Ue||!O(/\/>/i,o)){Fe&&(o=_(o,be," "),o=_(o,ve," "),o=_(o,Te," "));var m=ge(t.nodeName);if(Ot(m,a,o)){if(!qe||"id"!==a&&"name"!==a||(At(s,t),o=Ye+o),le&&"object"===e(b)&&"function"==typeof b.getAttributeType)if(f);else switch(b.getAttributeType(m,a)){case"TrustedHTML":o=le.createHTML(o);break;case"TrustedScriptURL":o=le.createScriptURL(o)}try{f?t.setAttributeNS(f,s,o):t.setAttribute(s,o),N(r.removed)}catch(e){}}}else At(s,t)}xt("afterSanitizeAttributes",t,null)}},Ct=function e(t){var n,r=wt(t);for(xt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)xt("uponSanitizeShadowNode",n,null),kt(n)||(n.content instanceof l&&e(n.content),Rt(n));xt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){var t,n,a,i,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((it=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!_t(e)){if("function"!=typeof e.toString)throw D("toString is not a function");if("string"!=typeof(e=e.toString()))throw D("dirty is not a string, aborting")}if(!r.isSupported)return e;if(He||dt(c),r.removed=[],"string"==typeof e&&(Ke=!1),Ke){if(e.nodeName){var u=ge(e.nodeName);if(!_e[u]||Re[u])throw D("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof s)1===(n=(t=Et("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===n.nodeName||"HTML"===n.nodeName?t=n:t.appendChild(n);else{if(!Pe&&!Fe&&!ze&&-1===e.indexOf("<"))return le&&Ge?le.createHTML(e):e;if(!(t=Et(e)))return Pe?null:Ge?ce:""}t&&je&&Nt(t.firstChild);for(var f=wt(Ke?e:t);a=f.nextNode();)kt(a)||(a.content instanceof l&&Ct(a.content),Rt(a));if(Ke)return e;if(Pe){if(Be)for(i=me.call(t.ownerDocument);t.firstChild;)i.appendChild(t.firstChild);else i=t;return(ke.shadowroot||ke.shadowrootmod)&&(i=de.call(o,i,!0)),i}var m=ze?t.outerHTML:t.innerHTML;return ze&&_e["!doctype"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&O(ee,t.ownerDocument.doctype.name)&&(m="\n"+m),Fe&&(m=_(m,be," "),m=_(m,ve," "),m=_(m,Te," ")),le&&Ge?le.createHTML(m):m},r.setConfig=function(e){dt(e),He=!0},r.clearConfig=function(){ft=null,He=!1},r.isValidAttribute=function(e,t,n){ft||dt({});var r=ge(e),o=ge(t);return Ot(r,o,n)},r.addHook=function(e,t){"function"==typeof t&&(he[e]=he[e]||[],A(he[e],t))},r.removeHook=function(e){if(he[e])return N(he[e])},r.removeHooks=function(e){he[e]&&(he[e]=[])},r.removeAllHooks=function(){he={}},r}();return re}));
-//# sourceMappingURL=purify.min.js.map
\ No newline at end of file
diff --git a/assets/js/purify.min.js.map b/assets/js/purify.min.js.map
deleted file mode 100644
index d0d4fa0b..00000000
--- a/assets/js/purify.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"purify.min.js","sources":["../src/utils.js","../src/tags.js","../src/attrs.js","../src/regexp.js","../src/purify.js"],"sourcesContent":["const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array, transformCaseFunc) {\n transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n newObject[property] = value;\n }\n\n return newObject;\n}\n\n/* This method automatically checks if the prop is function\n * or getter and behaves accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (\n document.currentScript &&\n document.currentScript.hasAttribute(ATTR_NAME)\n ) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n\n let { document } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n const trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n originalDocument\n );\n const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n typeof implementation.createHTMLDocument !== 'undefined';\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n 'ALLOWED_TAGS' in cfg\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n 'ALLOWED_ATTR' in cfg\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES =\n 'ALLOWED_NAMESPACES' in cfg\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES =\n 'ADD_URI_SAFE_ATTR' in cfg\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n 'ADD_DATA_URI_TAGS' in cfg\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS =\n 'FORBID_CONTENTS' in cfg\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS =\n 'FORBID_TAGS' in cfg\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : {};\n FORBID_ATTR =\n 'FORBID_ATTR' in cfg\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml',\n ]);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},We={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Ue={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},Ve=function(){function t(t,e){if("undefined"==typeof Yt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=i.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(e);var n=u.findShadowRoot(this.element),o=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var r=this.getTipElement(),a=u.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&i.default(r).addClass(Pe);var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,l=this._getAttachment(s);this.addAttachmentClass(l);var f=this._getContainer();i.default(r).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(r).appendTo(f),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new Yt(this.element,r,this._getPopperConfig(l)),i.default(r).addClass(Fe),i.default(r).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,i.default(t.element).trigger(t.constructor.Event.SHOWN),e===He&&t._leave(null,t)};if(i.default(this.tip).hasClass(Pe)){var c=u.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(u.TRANSITION_END,d).emulateTransitionEnd(c)}else d()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==Re&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),i.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass(Fe),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,i.default(this.tip).hasClass(Pe)){var a=u.getTransitionDurationFromElement(n);i.default(n).one(u.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(i.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),i.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=ke(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?i.default(e).parent().is(t)||t.empty().append(e):t.text(i.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:u.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e._getAttachment=function(t){return Be[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)i.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n=e===Me?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o=e===Me?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;i.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},i.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?qe:Me]=!0),i.default(e.getTipElement()).hasClass(Fe)||e._hoverState===Re?e._hoverState=Re:(clearTimeout(e._timeout),e._hoverState=Re,e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){e._hoverState===Re&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?qe:Me]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){e._hoverState===He&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=i.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Le.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),u.typeCheckConfig(Ie,t,this.constructor.DefaultType),t.sanitize&&(t.template=ke(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(je);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(i.default(t).removeClass(Pe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data(Oe),r="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,r),n.data(Oe,o)),"string"==typeof e)){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return Qe}},{key:"NAME",get:function(){return Ie}},{key:"DATA_KEY",get:function(){return Oe}},{key:"Event",get:function(){return Ue}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return We}}]),t}();i.default.fn.tooltip=Ve._jQueryInterface,i.default.fn.tooltip.Constructor=Ve,i.default.fn.tooltip.noConflict=function(){return i.default.fn.tooltip=xe,Ve._jQueryInterface};var Ye="bs.popover",ze=i.default.fn.popover,Ke=new RegExp("(^|\\s)bs-popover\\S+","g"),Xe=a({},Ve.Default,{placement:"right",trigger:"click",content:"",template:''}),Ge=a({},Ve.DefaultType,{content:"(string|element|function)"}),$e={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},Je=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,s(e,n);var a=o.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},a.setContent=function(){var t=i.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(Ke);null!==e&&e.length>0&&t.removeClass(e.join(""))},o._jQueryInterface=function(t){return this.each((function(){var e=i.default(this).data(Ye),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new o(this,n),i.default(this).data(Ye,e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},r(o,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return Xe}},{key:"NAME",get:function(){return"popover"}},{key:"DATA_KEY",get:function(){return Ye}},{key:"Event",get:function(){return $e}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Ge}}]),o}(Ve);i.default.fn.popover=Je._jQueryInterface,i.default.fn.popover.Constructor=Je,i.default.fn.popover.noConflict=function(){return i.default.fn.popover=ze,Je._jQueryInterface};var Ze="scrollspy",tn="bs.scrollspy",en=i.default.fn[Ze],nn="active",on="position",rn=".nav, .list-group",an={offset:10,method:"auto",target:""},sn={offset:"number",method:"string",target:"(string|element)"},ln=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,i.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":on,n="auto"===this._config.method?e:this._config.method,o=n===on?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=u.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[i.default(e)[n]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){i.default.removeData(this._element,tn),i.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=a({},an,"object"==typeof t&&t?t:{})).target&&u.isElement(t.target)){var e=i.default(t.target).attr("id");e||(e=u.getUID(Ze),i.default(t.target).attr("id",e)),t.target="#"+e}return u.typeCheckConfig(Ze,t,sn),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;)this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t li > .active",gn=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&i.default(this._element).hasClass(dn)||i.default(this._element).hasClass("disabled"))){var e,n,o=i.default(this._element).closest(".nav, .list-group")[0],r=u.getSelectorFromElement(this._element);if(o){var a="UL"===o.nodeName||"OL"===o.nodeName?mn:pn;n=(n=i.default.makeArray(i.default(o).find(a)))[n.length-1]}var s=i.default.Event("hide.bs.tab",{relatedTarget:this._element}),l=i.default.Event("show.bs.tab",{relatedTarget:n});if(n&&i.default(n).trigger(s),i.default(this._element).trigger(l),!l.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,o);var f=function(){var e=i.default.Event("hidden.bs.tab",{relatedTarget:t._element}),o=i.default.Event("shown.bs.tab",{relatedTarget:n});i.default(n).trigger(e),i.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,f):f()}}},e.dispose=function(){i.default.removeData(this._element,un),this._element=null},e._activate=function(t,e,n){var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.default(e).children(pn):i.default(e).find(mn))[0],a=n&&r&&i.default(r).hasClass(cn),s=function(){return o._transitionComplete(t,r,n)};if(r&&a){var l=u.getTransitionDurationFromElement(r);i.default(r).removeClass(hn).one(u.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._transitionComplete=function(t,e,n){if(e){i.default(e).removeClass(dn);var o=i.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&i.default(o).removeClass(dn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}i.default(t).addClass(dn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u.reflow(t),t.classList.contains(cn)&&t.classList.add(hn);var r=t.parentNode;if(r&&"LI"===r.nodeName&&(r=r.parentNode),r&&i.default(r).hasClass("dropdown-menu")){var a=i.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));i.default(s).addClass(dn)}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data(un);if(o||(o=new t(this),n.data(un,o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();i.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),gn._jQueryInterface.call(i.default(this),"show")})),i.default.fn.tab=gn._jQueryInterface,i.default.fn.tab.Constructor=gn,i.default.fn.tab.noConflict=function(){return i.default.fn.tab=fn,gn._jQueryInterface};var _n="bs.toast",vn=i.default.fn.toast,bn="hide",yn="show",En="showing",wn="click.dismiss.bs.toast",Tn={animation:!0,autohide:!0,delay:500},Cn={animation:"boolean",autohide:"boolean",delay:"number"},Sn=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=i.default.Event("show.bs.toast");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove(En),t._element.classList.add(yn),i.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove(bn),u.reflow(this._element),this._element.classList.add(En),this._config.animation){var o=u.getTransitionDurationFromElement(this._element);i.default(this._element).one(u.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},e.hide=function(){if(this._element.classList.contains(yn)){var t=i.default.Event("hide.bs.toast");i.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains(yn)&&this._element.classList.remove(yn),i.default(this._element).off(wn),i.default.removeData(this._element,_n),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},Tn,i.default(this._element).data(),"object"==typeof t&&t?t:{}),u.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;i.default(this._element).on(wn,'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add(bn),i.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove(yn),this._config.animation){var n=u.getTransitionDurationFromElement(this._element);i.default(this._element).one(u.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data(_n);if(o||(o=new t(this,"object"==typeof e&&e),n.data(_n,o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"DefaultType",get:function(){return Cn}},{key:"Default",get:function(){return Tn}}]),t}();i.default.fn.toast=Sn._jQueryInterface,i.default.fn.toast.Constructor=Sn,i.default.fn.toast.noConflict=function(){return i.default.fn.toast=vn,Sn._jQueryInterface},t.Alert=c,t.Button=b,t.Carousel=O,t.Collapse=W,t.Dropdown=le,t.Modal=Se,t.Popover=Je,t.Scrollspy=ln,t.Tab=gn,t.Toast=Sn,t.Tooltip=Ve,t.Util=u,Object.defineProperty(t,"__esModule",{value:!0})}));
-//# sourceMappingURL=bootstrap.bundle.min.js.map
\ No newline at end of file
diff --git a/assets/lib/bootstrap-4.6.1/bootstrap.bundle.min.js.map b/assets/lib/bootstrap-4.6.1/bootstrap.bundle.min.js.map
deleted file mode 100644
index 0c7d8e0e..00000000
--- a/assets/lib/bootstrap-4.6.1/bootstrap.bundle.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/popper.js/dist/esm/popper.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"names":["TRANSITION_END","Util","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","$","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","triggerTransitionEnd","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","fn","jquery","emulateTransitionEnd","duration","_this","this","called","one","setTimeout","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","DATA_KEY","JQUERY_NO_CONFLICT","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_INPUT","SELECTOR_BUTTON","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","NAME","DIRECTION_NEXT","DIRECTION_PREV","EVENT_SLID","SELECTOR_ACTIVE_ITEM","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_extends$1","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","e","move","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","elementInterval","parseInt","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","SELECTOR_DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","isBrowser","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","resolve","then","scheduled","isFunction","functionToCheck","getStyleComputedProperty","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","undefined","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","max","getWindowSizes","height","width","classCallCheck","instance","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","_extends","assign","source","getClientRect","offsets","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","sort","a","b","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","ends","prop","findIndex","cur","forEach","console","warn","enabled","update","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","attachToScrollParents","callback","scrollParents","isBody","addEventListener","passive","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","concat","reverse","Defaults","shift","basePlacement","shiftvariation","_data$offsets","isVertical","shiftOffsets","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","parseOffset","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Popper","requestAnimationFrame","Utils","global","PopperUtils","Popper$1","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","CLASS_NAME_DISABLED","CLASS_NAME_MENURIGHT","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","SELECTOR_MENU","boundary","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","noop","hideEvent","stopPropagation","constructor","_getPlacement","$parentDropdown","_getOffset","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","CLASS_NAME_OPEN","CLASS_NAME_FADE","CLASS_NAME_STATIC","EVENT_SHOW","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEDOWN_DISMISS","SELECTOR_FIXED_CONTENT","backdrop","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","appendChild","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","elements","margin","scrollDiv","scrollbarWidth","_this11","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","HOVER_STATE_SHOW","HOVER_STATE_OUT","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","template","title","delay","container","fallbackPlacement","customClass","sanitize","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","content","text","empty","append","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","$tip","tabClass","join","popperData","initConfigAnimation","Popover","_getContent","METHOD_POSITION","SELECTOR_NAV_LIST_GROUP","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","pageYOffset","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","parents","SELECTOR_NAV_LINKS","scrollSpys","$spy","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","CLASS_NAME_HIDE","CLASS_NAME_SHOWING","autohide","Toast","_clearTimeout","_close"],"mappings":";;;;;s3BAaA,IAAMA,EAAiB,oBAoDjBC,EAAO,CACXD,eAAgB,kBAEhBE,OAHW,SAGJC,GACL,GAEEA,MAzDU,IAyDGC,KAAKC,gBACXC,SAASC,eAAeJ,IAEjC,OAAOA,GAGTK,uBAZW,SAYYC,GACrB,IAAIC,EAAWD,EAAQE,aAAa,eAEpC,IAAKD,GAAyB,MAAbA,EAAkB,CACjC,IAAME,EAAWH,EAAQE,aAAa,QACtCD,EAAWE,GAAyB,MAAbA,EAAmBA,EAASC,OAAS,GAG9D,IACE,OAAOP,SAASQ,cAAcJ,GAAYA,EAAW,KACrD,MAAOK,GACP,OAAO,OAIXC,iCA3BW,SA2BsBP,GAC/B,IAAKA,EACH,OAAO,EAIT,IAAIQ,EAAqBC,EAAAA,QAAET,GAASU,IAAI,uBACpCC,EAAkBF,EAAAA,QAAET,GAASU,IAAI,oBAE/BE,EAA0BC,WAAWL,GACrCM,EAAuBD,WAAWF,GAGxC,OAAKC,GAA4BE,GAKjCN,EAAqBA,EAAmBO,MAAM,KAAK,GACnDJ,EAAkBA,EAAgBI,MAAM,KAAK,GAhGjB,KAkGpBF,WAAWL,GAAsBK,WAAWF,KAP3C,GAUXK,OAnDW,SAmDJhB,GACL,OAAOA,EAAQiB,cAGjBC,qBAvDW,SAuDUlB,GACnBS,EAAAA,QAAET,GAASmB,QAAQ5B,IAGrB6B,sBA3DW,WA4DT,OAAOC,QAAQ9B,IAGjB+B,UA/DW,SA+DDC,GACR,OAAQA,EAAI,IAAMA,GAAKC,UAGzBC,gBAnEW,SAmEKC,EAAeC,EAAQC,GACrC,IAAK,IAAMC,KAAYD,EACrB,GAAIE,OAAOC,UAAUC,eAAeC,KAAKL,EAAaC,GAAW,CAC/D,IAAMK,EAAgBN,EAAYC,GAC5BM,EAAQR,EAAOE,GACfO,EAAYD,GAAS3C,EAAK8B,UAAUa,GACxC,UAvHI,QADEZ,EAwHaY,IAvHQ,oBAARZ,EACzB,GAAUA,EAGL,GAAGc,SAASJ,KAAKV,GAAKe,MAAM,eAAe,GAAGC,cAqH/C,IAAK,IAAIC,OAAON,GAAeO,KAAKL,GAClC,MAAM,IAAIM,MACLhB,EAAciB,cAAdjB,aACQG,EADX,oBACuCO,EADpCV,wBAEmBQ,EAFtB,MA5HZ,IAAgBX,GAoIdqB,eArFW,SAqFI5C,GACb,IAAKH,SAASgD,gBAAgBC,aAC5B,OAAO,KAIT,GAAmC,mBAAxB9C,EAAQ+C,YAA4B,CAC7C,IAAMC,EAAOhD,EAAQ+C,cACrB,OAAOC,aAAgBC,WAAaD,EAAO,KAG7C,OAAIhD,aAAmBiD,WACdjD,EAIJA,EAAQkD,WAIN1D,EAAKoD,eAAe5C,EAAQkD,YAH1B,MAMXC,gBA5GW,WA6GT,GAAiB,oBAAN1C,EAAAA,QACT,MAAM,IAAI2C,UAAU,kGAGtB,IAAMC,EAAU5C,EAAAA,QAAE6C,GAAGC,OAAOxC,MAAM,KAAK,GAAGA,MAAM,KAOhD,GAAIsC,EAAQ,GALI,GAKYA,EAAQ,GAJnB,GAFA,IAMoCA,EAAQ,IAJ5C,IAI+DA,EAAQ,IAAmBA,EAAQ,GAHlG,GAGmHA,EAAQ,IAF3H,EAGf,MAAM,IAAIX,MAAM,iFAKtBlD,EAAK2D,kBAtIH1C,EAAAA,QAAE6C,GAAGE,qBAjBP,SAA+BC,GAAU,IAAAC,EAAAC,KACnCC,GAAS,EAYb,OAVAnD,EAAAA,QAAEkD,MAAME,IAAIrE,EAAKD,gBAAgB,WAC/BqE,GAAS,KAGXE,YAAW,WACJF,GACHpE,EAAK0B,qBAAqBwC,KAE3BD,GAEIE,MAKPlD,EAAAA,QAAEsD,MAAMC,QAAQxE,EAAKD,gBA/Bd,CACL0E,SAAU1E,EACV2E,aAAc3E,EACd4E,OAHK,SAGEJ,GACL,GAAItD,EAAAA,QAAEsD,EAAMK,QAAQC,GAAGV,MACrB,OAAOI,EAAMO,UAAUC,QAAQC,MAAMb,KAAMc,aClBnD,IAEMC,EAAW,WAGXC,EAAqBlE,EAAAA,QAAE6C,GAAF,MAgBrBsB,EAAAA,WACJ,SAAAA,EAAY5E,GACV2D,KAAKkB,SAAW7E,6BASlB8E,MAAA,SAAM9E,GACJ,IAAI+E,EAAcpB,KAAKkB,SACnB7E,IACF+E,EAAcpB,KAAKqB,gBAAgBhF,IAGjB2D,KAAKsB,mBAAmBF,GAE5BG,sBAIhBvB,KAAKwB,eAAeJ,MAGtBK,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAC5Bf,KAAKkB,SAAW,QAIlBG,gBAAA,SAAgBhF,GACd,IAAMC,EAAWT,EAAKO,uBAAuBC,GACzCsF,GAAS,EAUb,OARIrF,IACFqF,EAASzF,SAASQ,cAAcJ,IAG7BqF,IACHA,EAAS7E,EAAAA,QAAET,GAASuF,QAAX,UAA2C,IAG/CD,KAGTL,mBAAA,SAAmBjF,GACjB,IAAMwF,EAAa/E,EAAAA,QAAEgF,MA1DR,kBA6Db,OADAhF,EAAAA,QAAET,GAASmB,QAAQqE,GACZA,KAGTL,eAAA,SAAenF,GAAS,IAAA0D,EAAAC,KAGtB,GAFAlD,EAAAA,QAAET,GAAS0F,YAnES,QAqEfjF,EAAAA,QAAET,GAAS2F,SAtEI,QAsEpB,CAKA,IAAMnF,EAAqBhB,EAAKe,iCAAiCP,GAEjES,EAAAA,QAAET,GACC6D,IAAIrE,EAAKD,gBAAgB,SAAAwE,GAAK,OAAIL,EAAKkC,gBAAgB5F,EAAS+D,MAChEP,qBAAqBhD,QARtBmD,KAAKiC,gBAAgB5F,MAWzB4F,gBAAA,SAAgB5F,GACdS,EAAAA,QAAET,GACC6F,SACA1E,QAjFW,mBAkFX2E,YAIEC,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,GAEpBwB,IACHA,EAAO,IAAItB,EAAMjB,MACjBsC,EAASC,KAAKxB,EAAUwB,IAGX,UAAXvE,GACFuE,EAAKvE,GAAQgC,YAKZwC,eAAP,SAAsBC,GACpB,OAAO,SAAUrC,GACXA,GACFA,EAAMsC,iBAGRD,EAActB,MAAMnB,qCA7FxB,WACE,MA3BY,cAoBViB,GA4GNnE,EAAAA,QAAEZ,UAAUyG,GApHc,0BAED,yBAqHvB1B,EAAMuB,eAAe,IAAIvB,IAO3BnE,EAAAA,QAAE6C,GAAF,MAAasB,EAAMmB,iBACnBtF,EAAAA,QAAE6C,GAAF,MAAWiD,YAAc3B,EACzBnE,EAAAA,QAAE6C,GAAF,MAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,MAAaqB,EACNC,EAAMmB,kBChJf,IAEMrB,EAAW,YAGXC,EAAqBlE,EAAAA,QAAE6C,GAAF,OAErBmD,EAAoB,SASpBC,EAA8B,0BAI9BC,EAAiB,6BAEjBC,EAAkB,OAMlBC,EAAAA,WACJ,SAAAA,EAAY7G,GACV2D,KAAKkB,SAAW7E,EAChB2D,KAAKmD,0BAA2B,6BASlCC,OAAA,WACE,IAAIC,GAAqB,EACrBC,GAAiB,EACflC,EAActE,EAAAA,QAAEkD,KAAKkB,UAAUU,QA1BX,2BA0B0C,GAEpE,GAAIR,EAAa,CACf,IAAMmC,EAAQvD,KAAKkB,SAASxE,cAAcsG,GAE1C,GAAIO,EAAO,CACT,GAAmB,UAAfA,EAAMC,KACR,GAAID,EAAME,SAAWzD,KAAKkB,SAASwC,UAAUC,SAASb,GACpDO,GAAqB,MAChB,CACL,IAAMO,EAAgBxC,EAAY1E,cAhCtB,WAkCRkH,GACF9G,EAAAA,QAAE8G,GAAe7B,YAAYe,GAK/BO,IAEiB,aAAfE,EAAMC,MAAsC,UAAfD,EAAMC,OACrCD,EAAME,SAAWzD,KAAKkB,SAASwC,UAAUC,SAASb,IAG/C9C,KAAKmD,0BACRrG,EAAAA,QAAEyG,GAAO/F,QAAQ,WAIrB+F,EAAMM,QACNP,GAAiB,GAIftD,KAAKkB,SAAS4C,aAAa,aAAe9D,KAAKkB,SAASwC,UAAUC,SAAS,cAC3EL,GACFtD,KAAKkB,SAAS6C,aAAa,gBAAiB/D,KAAKkB,SAASwC,UAAUC,SAASb,IAG3EO,GACFvG,EAAAA,QAAEkD,KAAKkB,UAAU8C,YAAYlB,OAKnCrB,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAC5Bf,KAAKkB,SAAW,QAIXkB,iBAAP,SAAwBpE,EAAQiG,GAC9B,OAAOjE,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,GAEpBwB,IACHA,EAAO,IAAIW,EAAOlD,MAClBsC,EAASC,KAAKxB,EAAUwB,IAG1BA,EAAKY,yBAA2Bc,EAEjB,WAAXjG,GACFuE,EAAKvE,sCAxEX,WACE,MAnCY,cA2BVkF,GAyFNpG,EAAAA,QAAEZ,UACCyG,GA3GuB,2BA2GEI,GAA6B,SAAA3C,GACrD,IAAI8D,EAAS9D,EAAMK,OACb0D,EAAgBD,EAMtB,GAJKpH,EAAAA,QAAEoH,GAAQlC,SAlHO,SAmHpBkC,EAASpH,EAAAA,QAAEoH,GAAQtC,QAAQqB,GAAiB,KAGzCiB,GAAUA,EAAOJ,aAAa,aAAeI,EAAOR,UAAUC,SAAS,YAC1EvD,EAAMsC,qBACD,CACL,IAAM0B,EAAWF,EAAOxH,cAAcsG,GAEtC,GAAIoB,IAAaA,EAASN,aAAa,aAAeM,EAASV,UAAUC,SAAS,aAEhF,YADAvD,EAAMsC,iBAIsB,UAA1ByB,EAAcE,SAA0C,UAAnBH,EAAOG,SAC9CnB,EAAOd,iBAAiB9D,KAAKxB,EAAAA,QAAEoH,GAAS,SAAoC,UAA1BC,EAAcE,aAIrE1B,GAjI+B,mDAiIDI,GAA6B,SAAA3C,GAC1D,IAAM8D,EAASpH,EAAAA,QAAEsD,EAAMK,QAAQmB,QAAQqB,GAAiB,GACxDnG,EAAAA,QAAEoH,GAAQF,YAtIW,QAsImB,eAAelF,KAAKsB,EAAMoD,UAGtE1G,EAAAA,QAAEwH,QAAQ3B,GApIe,2BAoIS,WAKhC,IADA,IAAI4B,EAAU,GAAGC,MAAMlG,KAAKpC,SAASuI,iBAnID,iCAoI3BC,EAAI,EAAGC,EAAMJ,EAAQK,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAMR,EAASK,EAAQG,GACjBnB,EAAQW,EAAOxH,cAAcsG,GAC/BO,EAAME,SAAWF,EAAMO,aAAa,WACtCI,EAAOR,UAAUmB,IAAI/B,GAErBoB,EAAOR,UAAUvB,OAAOW,GAM5B,IAAK,IAAI4B,EAAI,EAAGC,GADhBJ,EAAU,GAAGC,MAAMlG,KAAKpC,SAASuI,iBAhJN,4BAiJGG,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAMR,EAASK,EAAQG,GACqB,SAAxCR,EAAO3H,aAAa,gBACtB2H,EAAOR,UAAUmB,IAAI/B,GAErBoB,EAAOR,UAAUvB,OAAOW,OAS9BhG,EAAAA,QAAE6C,GAAF,OAAauD,EAAOd,iBACpBtF,EAAAA,QAAE6C,GAAF,OAAWiD,YAAcM,EACzBpG,EAAAA,QAAE6C,GAAF,OAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,OAAaqB,EACNkC,EAAOd,kBCpLhB,IAAM0C,EAAO,WAEP/D,EAAW,cAGXC,EAAqBlE,EAAAA,QAAE6C,GAAGmF,GAO1BhC,EAAoB,SAQpBiC,EAAiB,OACjBC,EAAiB,OAKjBC,EAAU,mBAcVC,EAAuB,wBAQvBC,EAAU,CACdC,SAAU,IACVC,UAAU,EACVC,OAAO,EACPC,MAAO,QACPC,MAAM,EACNC,OAAO,GAGHC,EAAc,CAClBN,SAAU,mBACVC,SAAU,UACVC,MAAO,mBACPC,MAAO,mBACPC,KAAM,UACNC,MAAO,WAGHE,EAAc,CAClBC,MAAO,QACPC,IAAK,OAODC,EAAAA,WACJ,SAAAA,EAAYzJ,EAAS2B,GACnBgC,KAAK+F,OAAS,KACd/F,KAAKgG,UAAY,KACjBhG,KAAKiG,eAAiB,KACtBjG,KAAKkG,WAAY,EACjBlG,KAAKmG,YAAa,EAClBnG,KAAKoG,aAAe,KACpBpG,KAAKqG,YAAc,EACnBrG,KAAKsG,YAAc,EAEnBtG,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKkB,SAAW7E,EAChB2D,KAAKyG,mBAAqBzG,KAAKkB,SAASxE,cA5ChB,wBA6CxBsD,KAAK0G,gBAAkB,iBAAkBxK,SAASgD,iBAAmByH,UAAUC,eAAiB,EAChG5G,KAAK6G,cAAgBnJ,QAAQ4G,OAAOwC,cAAgBxC,OAAOyC,gBAE3D/G,KAAKgH,gDAaPC,KAAA,WACOjH,KAAKmG,YACRnG,KAAKkH,OAAOnC,MAIhBoC,gBAAA,WACE,IAAM7E,EAAWxF,EAAAA,QAAEkD,KAAKkB,WAGnBhF,SAASkL,QACX9E,EAAS5B,GAAG,aAA8C,WAA/B4B,EAASvF,IAAI,eACzCiD,KAAKiH,UAITI,KAAA,WACOrH,KAAKmG,YACRnG,KAAKkH,OAAOlC,MAIhBO,MAAA,SAAMnF,GACCA,IACHJ,KAAKkG,WAAY,GAGflG,KAAKkB,SAASxE,cAzFK,8CA0FrBb,EAAK0B,qBAAqByC,KAAKkB,UAC/BlB,KAAKsH,OAAM,IAGbC,cAAcvH,KAAKgG,WACnBhG,KAAKgG,UAAY,QAGnBsB,MAAA,SAAMlH,GACCA,IACHJ,KAAKkG,WAAY,GAGflG,KAAKgG,YACPuB,cAAcvH,KAAKgG,WACnBhG,KAAKgG,UAAY,MAGfhG,KAAKuG,QAAQnB,WAAapF,KAAKkG,YACjClG,KAAKwH,kBAELxH,KAAKgG,UAAYyB,aACdvL,SAASwL,gBAAkB1H,KAAKmH,gBAAkBnH,KAAKiH,MAAMU,KAAK3H,MACnEA,KAAKuG,QAAQnB,cAKnBwC,GAAA,SAAGC,GAAO,IAAA9H,EAAAC,KACRA,KAAKiG,eAAiBjG,KAAKkB,SAASxE,cAAcwI,GAElD,IAAM4C,EAAc9H,KAAK+H,cAAc/H,KAAKiG,gBAE5C,KAAI4B,EAAQ7H,KAAK+F,OAAOnB,OAAS,GAAKiD,EAAQ,GAI9C,GAAI7H,KAAKmG,WACPrJ,EAAAA,QAAEkD,KAAKkB,UAAUhB,IAAI+E,GAAY,WAAA,OAAMlF,EAAK6H,GAAGC,UADjD,CAKA,GAAIC,IAAgBD,EAGlB,OAFA7H,KAAKuF,aACLvF,KAAKsH,QAIP,IAAMU,EAAYH,EAAQC,EACxB/C,EACAC,EAEFhF,KAAKkH,OAAOc,EAAWhI,KAAK+F,OAAO8B,QAGrCpG,QAAA,WACE3E,EAAAA,QAAEkD,KAAKkB,UAAU+G,IA1LN,gBA2LXnL,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAE5Bf,KAAK+F,OAAS,KACd/F,KAAKuG,QAAU,KACfvG,KAAKkB,SAAW,KAChBlB,KAAKgG,UAAY,KACjBhG,KAAKkG,UAAY,KACjBlG,KAAKmG,WAAa,KAClBnG,KAAKiG,eAAiB,KACtBjG,KAAKyG,mBAAqB,QAI5BD,WAAA,SAAWxI,GAMT,OALAA,EAAMkK,EAAA,GACD/C,EACAnH,GAELnC,EAAKiC,gBAAgBgH,EAAM9G,EAAQ0H,GAC5B1H,KAGTmK,aAAA,WACE,IAAMC,EAAYpM,KAAKqM,IAAIrI,KAAKsG,aAEhC,KAAI8B,GA9MgB,IA8MpB,CAIA,IAAMJ,EAAYI,EAAYpI,KAAKsG,YAEnCtG,KAAKsG,YAAc,EAGf0B,EAAY,GACdhI,KAAKqH,OAIHW,EAAY,GACdhI,KAAKiH,WAITD,mBAAA,WAAqB,IAAAsB,EAAAtI,KACfA,KAAKuG,QAAQlB,UACfvI,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjNJ,uBAiNsB,SAAAvC,GAAK,OAAIkI,EAAKC,SAASnI,MAGjC,UAAvBJ,KAAKuG,QAAQhB,OACfzI,EAAAA,QAAEkD,KAAKkB,UACJyB,GArNa,0BAqNQ,SAAAvC,GAAK,OAAIkI,EAAK/C,MAAMnF,MACzCuC,GArNa,0BAqNQ,SAAAvC,GAAK,OAAIkI,EAAKhB,MAAMlH,MAG1CJ,KAAKuG,QAAQd,OACfzF,KAAKwI,6BAITA,wBAAA,WAA0B,IAAAC,EAAAzI,KACxB,GAAKA,KAAK0G,gBAAV,CAIA,IAAMgC,EAAQ,SAAAtI,GACRqI,EAAK5B,eAAiBlB,EAAYvF,EAAMuI,cAAcC,YAAY5J,eACpEyJ,EAAKpC,YAAcjG,EAAMuI,cAAcE,QAC7BJ,EAAK5B,gBACf4B,EAAKpC,YAAcjG,EAAMuI,cAAcG,QAAQ,GAAGD,UAWhDE,EAAM,SAAA3I,GACNqI,EAAK5B,eAAiBlB,EAAYvF,EAAMuI,cAAcC,YAAY5J,iBACpEyJ,EAAKnC,YAAclG,EAAMuI,cAAcE,QAAUJ,EAAKpC,aAGxDoC,EAAKN,eACsB,UAAvBM,EAAKlC,QAAQhB,QASfkD,EAAKlD,QACDkD,EAAKrC,cACP4C,aAAaP,EAAKrC,cAGpBqC,EAAKrC,aAAejG,YAAW,SAAAC,GAAK,OAAIqI,EAAKnB,MAAMlH,KA1R5B,IA0R6DqI,EAAKlC,QAAQnB,YAIrGtI,EAAAA,QAAEkD,KAAKkB,SAASuD,iBA5PM,uBA6PnB9B,GApQe,yBAoQM,SAAAsG,GAAC,OAAIA,EAAEvG,oBAE3B1C,KAAK6G,eACP/J,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAzQA,2BAyQsB,SAAAvC,GAAK,OAAIsI,EAAMtI,MACtDtD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAzQF,yBAyQsB,SAAAvC,GAAK,OAAI2I,EAAI3I,MAElDJ,KAAKkB,SAASwC,UAAUmB,IA3RG,mBA6R3B/H,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjRD,0BAiRsB,SAAAvC,GAAK,OAAIsI,EAAMtI,MACrDtD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjRF,yBAiRsB,SAAAvC,GAAK,OAzC/B,SAAAA,GAEXqI,EAAKnC,YAAclG,EAAMuI,cAAcG,SAAW1I,EAAMuI,cAAcG,QAAQlE,OAAS,EACrF,EACAxE,EAAMuI,cAAcG,QAAQ,GAAGD,QAAUJ,EAAKpC,YAqCF6C,CAAK9I,MACnDtD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjRH,wBAiRsB,SAAAvC,GAAK,OAAI2I,EAAI3I,WAIrDmI,SAAA,SAASnI,GACP,IAAI,kBAAkBtB,KAAKsB,EAAMK,OAAO4D,SAIxC,OAAQjE,EAAM+I,OACZ,KArTqB,GAsTnB/I,EAAMsC,iBACN1C,KAAKqH,OACL,MACF,KAxTsB,GAyTpBjH,EAAMsC,iBACN1C,KAAKiH,WAMXc,cAAA,SAAc1L,GAIZ,OAHA2D,KAAK+F,OAAS1J,GAAWA,EAAQkD,WAC/B,GAAGiF,MAAMlG,KAAKjC,EAAQkD,WAAWkF,iBAhSjB,mBAiShB,GACKzE,KAAK+F,OAAOqD,QAAQ/M,MAG7BgN,oBAAA,SAAoBrB,EAAWpE,GAC7B,IAAM0F,EAAkBtB,IAAcjD,EAChCwE,EAAkBvB,IAAchD,EAChC8C,EAAc9H,KAAK+H,cAAcnE,GACjC4F,EAAgBxJ,KAAK+F,OAAOnB,OAAS,EAI3C,IAHsB2E,GAAmC,IAAhBzB,GACjBwB,GAAmBxB,IAAgB0B,KAErCxJ,KAAKuG,QAAQf,KACjC,OAAO5B,EAGT,IACM6F,GAAa3B,GADLE,IAAchD,GAAkB,EAAI,IACRhF,KAAK+F,OAAOnB,OAEtD,OAAsB,IAAf6E,EACLzJ,KAAK+F,OAAO/F,KAAK+F,OAAOnB,OAAS,GAAK5E,KAAK+F,OAAO0D,MAGtDC,mBAAA,SAAmBC,EAAeC,GAChC,IAAMC,EAAc7J,KAAK+H,cAAc4B,GACjCG,EAAY9J,KAAK+H,cAAc/H,KAAKkB,SAASxE,cAAcwI,IAC3D6E,EAAajN,EAAAA,QAAEgF,MA3UR,oBA2U2B,CACtC6H,cAAAA,EACA3B,UAAW4B,EACXI,KAAMF,EACNlC,GAAIiC,IAKN,OAFA/M,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQuM,GAElBA,KAGTE,2BAAA,SAA2B5N,GACzB,GAAI2D,KAAKyG,mBAAoB,CAC3B,IAAMyD,EAAa,GAAG1F,MAAMlG,KAAK0B,KAAKyG,mBAAmBhC,iBA3UvC,YA4UlB3H,EAAAA,QAAEoN,GAAYnI,YAAYe,GAE1B,IAAMqH,EAAgBnK,KAAKyG,mBAAmB2D,SAC5CpK,KAAK+H,cAAc1L,IAGjB8N,GACFrN,EAAAA,QAAEqN,GAAeE,SAASvH,OAKhC0E,gBAAA,WACE,IAAMnL,EAAU2D,KAAKiG,gBAAkBjG,KAAKkB,SAASxE,cAAcwI,GAEnE,GAAK7I,EAAL,CAIA,IAAMiO,EAAkBC,SAASlO,EAAQE,aAAa,iBAAkB,IAEpE+N,GACFtK,KAAKuG,QAAQiE,gBAAkBxK,KAAKuG,QAAQiE,iBAAmBxK,KAAKuG,QAAQnB,SAC5EpF,KAAKuG,QAAQnB,SAAWkF,GAExBtK,KAAKuG,QAAQnB,SAAWpF,KAAKuG,QAAQiE,iBAAmBxK,KAAKuG,QAAQnB,aAIzE8B,OAAA,SAAOc,EAAW3L,GAAS,IAQrBoO,EACAC,EACAd,EAVqBe,EAAA3K,KACnB4D,EAAgB5D,KAAKkB,SAASxE,cAAcwI,GAC5C0F,EAAqB5K,KAAK+H,cAAcnE,GACxCiH,EAAcxO,GAAWuH,GAC7B5D,KAAKqJ,oBAAoBrB,EAAWpE,GAChCkH,EAAmB9K,KAAK+H,cAAc8C,GACtCE,EAAYrN,QAAQsC,KAAKgG,WAgB/B,GAVIgC,IAAcjD,GAChB0F,EA9YkB,qBA+YlBC,EA9YkB,qBA+YlBd,EAzYiB,SA2YjBa,EAnZmB,sBAoZnBC,EAjZkB,qBAkZlBd,EA5YkB,SA+YhBiB,GAAe/N,EAAAA,QAAE+N,GAAa7I,SAASc,GACzC9C,KAAKmG,YAAa,OAKpB,IADmBnG,KAAK0J,mBAAmBmB,EAAajB,GACzCrI,sBAIVqC,GAAkBiH,EAAvB,CAKA7K,KAAKmG,YAAa,EAEd4E,GACF/K,KAAKuF,QAGPvF,KAAKiK,2BAA2BY,GAChC7K,KAAKiG,eAAiB4E,EAEtB,IAAMG,EAAYlO,EAAAA,QAAEgF,MAAMmD,EAAY,CACpC0E,cAAekB,EACf7C,UAAW4B,EACXI,KAAMY,EACNhD,GAAIkD,IAGN,GAAIhO,EAAAA,QAAEkD,KAAKkB,UAAUc,SAxbA,SAwb4B,CAC/ClF,EAAAA,QAAE+N,GAAaR,SAASK,GAExB7O,EAAKwB,OAAOwN,GAEZ/N,EAAAA,QAAE8G,GAAeyG,SAASI,GAC1B3N,EAAAA,QAAE+N,GAAaR,SAASI,GAExB,IAAM5N,EAAqBhB,EAAKe,iCAAiCgH,GAEjE9G,EAAAA,QAAE8G,GACC1D,IAAIrE,EAAKD,gBAAgB,WACxBkB,EAAAA,QAAE+N,GACC9I,YAAe0I,EADlB,IAC0CC,GACvCL,SAASvH,GAEZhG,EAAAA,QAAE8G,GAAe7B,YAAee,UAAqB4H,EAArD,IAAuED,GAEvEE,EAAKxE,YAAa,EAElBhG,YAAW,WAAA,OAAMrD,EAAAA,QAAE6N,EAAKzJ,UAAU1D,QAAQwN,KAAY,MAEvDnL,qBAAqBhD,QAExBC,EAAAA,QAAE8G,GAAe7B,YAAYe,GAC7BhG,EAAAA,QAAE+N,GAAaR,SAASvH,GAExB9C,KAAKmG,YAAa,EAClBrJ,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQwN,GAGvBD,GACF/K,KAAKsH,YAKFlF,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,GACpBwF,EAAO2B,EAAA,GACN/C,EACArI,EAAAA,QAAEkD,MAAMuC,QAGS,iBAAXvE,IACTuI,EAAO2B,EAAA,GACF3B,EACAvI,IAIP,IAAMiN,EAA2B,iBAAXjN,EAAsBA,EAASuI,EAAQjB,MAO7D,GALK/C,IACHA,EAAO,IAAIuD,EAAS9F,KAAMuG,GAC1BzJ,EAAAA,QAAEkD,MAAMuC,KAAKxB,EAAUwB,IAGH,iBAAXvE,EACTuE,EAAKqF,GAAG5J,QACH,GAAsB,iBAAXiN,EAAqB,CACrC,GAA4B,oBAAjB1I,EAAK0I,GACd,MAAM,IAAIxL,UAAJ,oBAAkCwL,EAAlC,KAGR1I,EAAK0I,UACI1E,EAAQnB,UAAYmB,EAAQ2E,OACrC3I,EAAKgD,QACLhD,EAAK+E,eAKJ6D,qBAAP,SAA4B/K,GAC1B,IAAM9D,EAAWT,EAAKO,uBAAuB4D,MAE7C,GAAK1D,EAAL,CAIA,IAAMmE,EAAS3D,EAAAA,QAAER,GAAU,GAE3B,GAAKmE,GAAW3D,EAAAA,QAAE2D,GAAQuB,SA7gBF,YA6gBxB,CAIA,IAAMhE,EAAMkK,EAAA,GACPpL,EAAAA,QAAE2D,GAAQ8B,OACVzF,EAAAA,QAAEkD,MAAMuC,QAEP6I,EAAapL,KAAKzD,aAAa,iBAEjC6O,IACFpN,EAAOoH,UAAW,GAGpBU,EAAS1D,iBAAiB9D,KAAKxB,EAAAA,QAAE2D,GAASzC,GAEtCoN,GACFtO,EAAAA,QAAE2D,GAAQ8B,KAAKxB,GAAU6G,GAAGwD,GAG9BhL,EAAMsC,iDA5cR,WACE,MAhGY,6BAmGd,WACE,OAAOyC,QA1BLW,GAyeNhJ,EAAAA,QAAEZ,UAAUyG,GA/gBc,6BAQE,gCAugB8BmD,EAASqF,sBAEnErO,EAAAA,QAAEwH,QAAQ3B,GAlhBe,6BAkhBS,WAEhC,IADA,IAAM0I,EAAY,GAAG7G,MAAMlG,KAAKpC,SAASuI,iBAzgBhB,2BA0gBhBC,EAAI,EAAGC,EAAM0G,EAAUzG,OAAQF,EAAIC,EAAKD,IAAK,CACpD,IAAM4G,EAAYxO,EAAAA,QAAEuO,EAAU3G,IAC9BoB,EAAS1D,iBAAiB9D,KAAKgN,EAAWA,EAAU/I,YAQxDzF,EAAAA,QAAE6C,GAAGmF,GAAQgB,EAAS1D,iBACtBtF,EAAAA,QAAE6C,GAAGmF,GAAMlC,YAAckD,EACzBhJ,EAAAA,QAAE6C,GAAGmF,GAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,GAAQ9D,EACN8E,EAAS1D,kBCtkBlB,IAAM0C,EAAO,WAEP/D,EAAW,cAGXC,EAAqBlE,EAAAA,QAAE6C,GAAGmF,GAE1ByG,EAAkB,OAClBC,EAAsB,WACtBC,EAAwB,aACxBC,EAAuB,YAEvBC,EAAkB,QAUlBC,EAAuB,2BAEvBzG,EAAU,CACd/B,QAAQ,EACRzB,OAAQ,IAGJ+D,EAAc,CAClBtC,OAAQ,UACRzB,OAAQ,oBAOJkK,EAAAA,WACJ,SAAAA,EAAYxP,EAAS2B,GACnBgC,KAAK8L,kBAAmB,EACxB9L,KAAKkB,SAAW7E,EAChB2D,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAK+L,cAAgB,GAAGvH,MAAMlG,KAAKpC,SAASuI,iBAC1C,mCAAmCpI,EAAQ2P,GAA3C,6CAC0C3P,EAAQ2P,GADlD,OAKF,IADA,IAAMC,EAAa,GAAGzH,MAAMlG,KAAKpC,SAASuI,iBAAiBmH,IAClDlH,EAAI,EAAGC,EAAMsH,EAAWrH,OAAQF,EAAIC,EAAKD,IAAK,CACrD,IAAMwH,EAAOD,EAAWvH,GAClBpI,EAAWT,EAAKO,uBAAuB8P,GACvCC,EAAgB,GAAG3H,MAAMlG,KAAKpC,SAASuI,iBAAiBnI,IAC3D8P,QAAO,SAAAC,GAAS,OAAIA,IAAchQ,KAEpB,OAAbC,GAAqB6P,EAAcvH,OAAS,IAC9C5E,KAAKsM,UAAYhQ,EACjB0D,KAAK+L,cAAcQ,KAAKL,IAI5BlM,KAAKwM,QAAUxM,KAAKuG,QAAQ5E,OAAS3B,KAAKyM,aAAe,KAEpDzM,KAAKuG,QAAQ5E,QAChB3B,KAAK0M,0BAA0B1M,KAAKkB,SAAUlB,KAAK+L,eAGjD/L,KAAKuG,QAAQnD,QACfpD,KAAKoD,oCAcTA,OAAA,WACMtG,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASuJ,GAC5BvL,KAAK2M,OAEL3M,KAAK4M,UAITA,KAAA,WAAO,IAMDC,EACAC,EAPC/M,EAAAC,KACL,KAAIA,KAAK8L,kBACPhP,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASuJ,KAOxBvL,KAAKwM,SAUgB,KATvBK,EAAU,GAAGrI,MAAMlG,KAAK0B,KAAKwM,QAAQ/H,iBA/ElB,uBAgFhB2H,QAAO,SAAAF,GACN,MAAmC,iBAAxBnM,EAAKwG,QAAQ5E,OACfuK,EAAK3P,aAAa,iBAAmBwD,EAAKwG,QAAQ5E,OAGpDuK,EAAKxI,UAAUC,SAAS6H,OAGvB5G,SACViI,EAAU,MAIVA,IACFC,EAAchQ,EAAAA,QAAE+P,GAASE,IAAI/M,KAAKsM,WAAW/J,KAAKxB,KAC/B+L,EAAYhB,mBAFjC,CAOA,IAAMkB,EAAalQ,EAAAA,QAAEgF,MA1GT,oBA4GZ,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQwP,IACrBA,EAAWzL,qBAAf,CAIIsL,IACFhB,EAASzJ,iBAAiB9D,KAAKxB,EAAAA,QAAE+P,GAASE,IAAI/M,KAAKsM,WAAY,QAC1DQ,GACHhQ,EAAAA,QAAE+P,GAAStK,KAAKxB,EAAU,OAI9B,IAAMkM,EAAYjN,KAAKkN,gBAEvBpQ,EAAAA,QAAEkD,KAAKkB,UACJa,YAAYyJ,GACZnB,SAASoB,GAEZzL,KAAKkB,SAASiM,MAAMF,GAAa,EAE7BjN,KAAK+L,cAAcnH,QACrB9H,EAAAA,QAAEkD,KAAK+L,eACJhK,YAAY2J,GACZ0B,KAAK,iBAAiB,GAG3BpN,KAAKqN,kBAAiB,GAEtB,IAaMC,EAAU,UADaL,EAAU,GAAGjO,cAAgBiO,EAAUzI,MAAM,IAEpE3H,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,gBAjBK,WACfkB,EAAAA,QAAEiD,EAAKmB,UACJa,YAAY0J,GACZpB,SAAYmB,iBAEfzL,EAAKmB,SAASiM,MAAMF,GAAa,GAEjClN,EAAKsN,kBAAiB,GAEtBvQ,EAAAA,QAAEiD,EAAKmB,UAAU1D,QA/IN,wBAwJVqC,qBAAqBhD,GAExBmD,KAAKkB,SAASiM,MAAMF,GAAgBjN,KAAKkB,SAASoM,GAAlD,UAGFX,KAAA,WAAO,IAAArE,EAAAtI,KACL,IAAIA,KAAK8L,kBACNhP,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASuJ,GAD7B,CAKA,IAAMyB,EAAalQ,EAAAA,QAAEgF,MAlKT,oBAoKZ,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQwP,IACrBA,EAAWzL,qBAAf,CAIA,IAAM0L,EAAYjN,KAAKkN,gBAEvBlN,KAAKkB,SAASiM,MAAMF,GAAgBjN,KAAKkB,SAASqM,wBAAwBN,GAA1E,KAEApR,EAAKwB,OAAO2C,KAAKkB,UAEjBpE,EAAAA,QAAEkD,KAAKkB,UACJmJ,SAASoB,GACT1J,YAAeyJ,iBAElB,IAAMgC,EAAqBxN,KAAK+L,cAAcnH,OAC9C,GAAI4I,EAAqB,EACvB,IAAK,IAAI9I,EAAI,EAAGA,EAAI8I,EAAoB9I,IAAK,CAC3C,IAAMlH,EAAUwC,KAAK+L,cAAcrH,GAC7BpI,EAAWT,EAAKO,uBAAuBoB,GAE5B,OAAblB,IACYQ,EAAAA,QAAE,GAAG0H,MAAMlG,KAAKpC,SAASuI,iBAAiBnI,KAC7C0F,SAASuJ,IAClBzO,EAAAA,QAAEU,GAAS6M,SAASqB,GACjB0B,KAAK,iBAAiB,IAMjCpN,KAAKqN,kBAAiB,GAUtBrN,KAAKkB,SAASiM,MAAMF,GAAa,GACjC,IAAMpQ,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,gBAZK,WACf0M,EAAK+E,kBAAiB,GACtBvQ,EAAAA,QAAEwL,EAAKpH,UACJa,YAAY0J,GACZpB,SAASmB,GACThO,QAxMS,yBAgNXqC,qBAAqBhD,QAG1BwQ,iBAAA,SAAiBI,GACfzN,KAAK8L,iBAAmB2B,KAG1BhM,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAE5Bf,KAAKuG,QAAU,KACfvG,KAAKwM,QAAU,KACfxM,KAAKkB,SAAW,KAChBlB,KAAK+L,cAAgB,KACrB/L,KAAK8L,iBAAmB,QAI1BtF,WAAA,SAAWxI,GAOT,OANAA,EAAMkK,EAAA,GACD/C,EACAnH,IAEEoF,OAAS1F,QAAQM,EAAOoF,QAC/BvH,EAAKiC,gBAAgBgH,EAAM9G,EAAQ0H,GAC5B1H,KAGTkP,cAAA,WAEE,OADiBpQ,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2J,GACzBA,EAnPG,YAsPvBc,WAAA,WAAa,IACP9K,EADO8G,EAAAzI,KAGPnE,EAAK8B,UAAUqC,KAAKuG,QAAQ5E,SAC9BA,EAAS3B,KAAKuG,QAAQ5E,OAGoB,oBAA/B3B,KAAKuG,QAAQ5E,OAAO/B,SAC7B+B,EAAS3B,KAAKuG,QAAQ5E,OAAO,KAG/BA,EAASzF,SAASQ,cAAcsD,KAAKuG,QAAQ5E,QAG/C,IAAMrF,EAAQ,yCAA4C0D,KAAKuG,QAAQ5E,OAAzD,KACRyI,EAAW,GAAG5F,MAAMlG,KAAKqD,EAAO8C,iBAAiBnI,IASvD,OAPAQ,EAAAA,QAAEsN,GAAU/H,MAAK,SAACqC,EAAGrI,GACnBoM,EAAKiE,0BACHb,EAAS6B,sBAAsBrR,GAC/B,CAACA,OAIEsF,KAGT+K,0BAAA,SAA0BrQ,EAASsR,GACjC,IAAMC,EAAS9Q,EAAAA,QAAET,GAAS2F,SAASuJ,GAE/BoC,EAAa/I,QACf9H,EAAAA,QAAE6Q,GACC3J,YAAY0H,GAAuBkC,GACnCR,KAAK,gBAAiBQ,MAKtBF,sBAAP,SAA6BrR,GAC3B,IAAMC,EAAWT,EAAKO,uBAAuBC,GAC7C,OAAOC,EAAWJ,SAASQ,cAAcJ,GAAY,QAGhD8F,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,GACnBwF,EAAO2B,EAAA,GACR/C,EACA7C,EAASC,OACU,iBAAXvE,GAAuBA,EAASA,EAAS,IAYtD,IATKuE,GAAQgE,EAAQnD,QAA4B,iBAAXpF,GAAuB,YAAYc,KAAKd,KAC5EuI,EAAQnD,QAAS,GAGdb,IACHA,EAAO,IAAIsJ,EAAS7L,KAAMuG,GAC1BjE,EAASC,KAAKxB,EAAUwB,IAGJ,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA7PX,WACE,MAzEY,6BA4Ed,WACE,OAAOmH,QAxCL0G,GA0SN/O,EAAAA,QAAEZ,UAAUyG,GA7Tc,6BA6TWiJ,GAAsB,SAAUxL,GAE/B,MAAhCA,EAAMyN,cAAcxJ,SACtBjE,EAAMsC,iBAGR,IAAMoL,EAAWhR,EAAAA,QAAEkD,MACb1D,EAAWT,EAAKO,uBAAuB4D,MACvC+N,EAAY,GAAGvJ,MAAMlG,KAAKpC,SAASuI,iBAAiBnI,IAE1DQ,EAAAA,QAAEiR,GAAW1L,MAAK,WAChB,IAAM2L,EAAUlR,EAAAA,QAAEkD,MAEZhC,EADOgQ,EAAQzL,KAAKxB,GACJ,SAAW+M,EAASvL,OAC1CsJ,EAASzJ,iBAAiB9D,KAAK0P,EAAShQ,SAQ5ClB,EAAAA,QAAE6C,GAAGmF,GAAQ+G,EAASzJ,iBACtBtF,EAAAA,QAAE6C,GAAGmF,GAAMlC,YAAciJ,EACzB/O,EAAAA,QAAE6C,GAAGmF,GAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,GAAQ9D,EACN6K,EAASzJ,kBChWlB,IAAI6L,EAA8B,oBAAX3J,QAA8C,oBAAbpI,UAAiD,oBAAdyK,UAEvFuH,EAAkB,WAEpB,IADA,IAAIC,EAAwB,CAAC,OAAQ,UAAW,WACvCzJ,EAAI,EAAGA,EAAIyJ,EAAsBvJ,OAAQF,GAAK,EACrD,GAAIuJ,GAAatH,UAAUyH,UAAUhF,QAAQ+E,EAAsBzJ,KAAO,EACxE,OAAO,EAGX,OAAO,EAPa,GAgDlB2J,EAXqBJ,GAAa3J,OAAOgK,QA3B7C,SAA2B3O,GACzB,IAAIM,GAAS,EACb,OAAO,WACDA,IAGJA,GAAS,EACTqE,OAAOgK,QAAQC,UAAUC,MAAK,WAC5BvO,GAAS,EACTN,UAKN,SAAsBA,GACpB,IAAI8O,GAAY,EAChB,OAAO,WACAA,IACHA,GAAY,EACZtO,YAAW,WACTsO,GAAY,EACZ9O,MACCuO,MAyBT,SAASQ,EAAWC,GAElB,OAAOA,GAA8D,sBADvD,GACoBjQ,SAASJ,KAAKqQ,GAUlD,SAASC,EAAyBvS,EAAS6B,GACzC,GAAyB,IAArB7B,EAAQwB,SACV,MAAO,GAGT,IACId,EADSV,EAAQwS,cAAcC,YAClBC,iBAAiB1S,EAAS,MAC3C,OAAO6B,EAAWnB,EAAImB,GAAYnB,EAUpC,SAASiS,EAAc3S,GACrB,MAAyB,SAArBA,EAAQ4S,SACH5S,EAEFA,EAAQkD,YAAclD,EAAQ6S,KAUvC,SAASC,EAAgB9S,GAEvB,IAAKA,EACH,OAAOH,SAASkT,KAGlB,OAAQ/S,EAAQ4S,UACd,IAAK,OACL,IAAK,OACH,OAAO5S,EAAQwS,cAAcO,KAC/B,IAAK,YACH,OAAO/S,EAAQ+S,KAKnB,IAAIC,EAAwBT,EAAyBvS,GACjDiT,EAAWD,EAAsBC,SACjCC,EAAYF,EAAsBE,UAClCC,EAAYH,EAAsBG,UAEtC,MAAI,wBAAwB1Q,KAAKwQ,EAAWE,EAAYD,GAC/ClT,EAGF8S,EAAgBH,EAAc3S,IAUvC,SAASoT,EAAiBC,GACxB,OAAOA,GAAaA,EAAUC,cAAgBD,EAAUC,cAAgBD,EAG1E,IAAIE,EAAS3B,MAAgB3J,OAAOuL,uBAAwB3T,SAAS4T,cACjEC,EAAS9B,GAAa,UAAUnP,KAAK6H,UAAUyH,WASnD,SAAS4B,GAAKtQ,GACZ,OAAgB,KAAZA,EACKkQ,EAEO,KAAZlQ,EACKqQ,EAEFH,GAAUG,EAUnB,SAASE,GAAgB5T,GACvB,IAAKA,EACH,OAAOH,SAASgD,gBAQlB,IALA,IAAIgR,EAAiBF,GAAK,IAAM9T,SAASkT,KAAO,KAG5Ce,EAAe9T,EAAQ8T,cAAgB,KAEpCA,IAAiBD,GAAkB7T,EAAQ+T,oBAChDD,GAAgB9T,EAAUA,EAAQ+T,oBAAoBD,aAGxD,IAAIlB,EAAWkB,GAAgBA,EAAalB,SAE5C,OAAKA,GAAyB,SAAbA,GAAoC,SAAbA,GAMsB,IAA1D,CAAC,KAAM,KAAM,SAAS7F,QAAQ+G,EAAalB,WAA2E,WAAvDL,EAAyBuB,EAAc,YACjGF,GAAgBE,GAGlBA,EATE9T,EAAUA,EAAQwS,cAAc3P,gBAAkBhD,SAASgD,gBA4BtE,SAASmR,GAAQC,GACf,OAAwB,OAApBA,EAAK/Q,WACA8Q,GAAQC,EAAK/Q,YAGf+Q,EAWT,SAASC,GAAuBC,EAAUC,GAExC,KAAKD,GAAaA,EAAS3S,UAAa4S,GAAaA,EAAS5S,UAC5D,OAAO3B,SAASgD,gBAIlB,IAAIwR,EAAQF,EAASG,wBAAwBF,GAAYG,KAAKC,4BAC1DnI,EAAQgI,EAAQF,EAAWC,EAC3B1H,EAAM2H,EAAQD,EAAWD,EAGzBM,EAAQ5U,SAAS6U,cACrBD,EAAME,SAAStI,EAAO,GACtBoI,EAAMG,OAAOlI,EAAK,GAClB,IA/CyB1M,EACrB4S,EA8CAiC,EAA0BJ,EAAMI,wBAIpC,GAAIV,IAAaU,GAA2BT,IAAaS,GAA2BxI,EAAM/E,SAASoF,GACjG,MAjDe,UAFbkG,GADqB5S,EAoDD6U,GAnDDjC,WAKH,SAAbA,GAAuBgB,GAAgB5T,EAAQ8U,qBAAuB9U,EAkDpE4T,GAAgBiB,GAHdA,EAOX,IAAIE,EAAef,GAAQG,GAC3B,OAAIY,EAAalC,KACRqB,GAAuBa,EAAalC,KAAMuB,GAE1CF,GAAuBC,EAAUH,GAAQI,GAAUvB,MAY9D,SAASmC,GAAUhV,GACjB,IAAIiV,EAAOxQ,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,MAE3E0Q,EAAqB,QAATF,EAAiB,YAAc,aAC3CrC,EAAW5S,EAAQ4S,SAEvB,GAAiB,SAAbA,GAAoC,SAAbA,EAAqB,CAC9C,IAAIwC,EAAOpV,EAAQwS,cAAc3P,gBAC7BwS,EAAmBrV,EAAQwS,cAAc6C,kBAAoBD,EACjE,OAAOC,EAAiBF,GAG1B,OAAOnV,EAAQmV,GAYjB,SAASG,GAAcC,EAAMvV,GAC3B,IAAIwV,EAAW/Q,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAE1EgR,EAAYT,GAAUhV,EAAS,OAC/B0V,EAAaV,GAAUhV,EAAS,QAChC2V,EAAWH,GAAY,EAAI,EAK/B,OAJAD,EAAKK,KAAOH,EAAYE,EACxBJ,EAAKM,QAAUJ,EAAYE,EAC3BJ,EAAKO,MAAQJ,EAAaC,EAC1BJ,EAAKQ,OAASL,EAAaC,EACpBJ,EAaT,SAASS,GAAeC,EAAQC,GAC9B,IAAIC,EAAiB,MAATD,EAAe,OAAS,MAChCE,EAAkB,SAAVD,EAAmB,QAAU,SAEzC,OAAOtV,WAAWoV,EAAO,SAAWE,EAAQ,UAAYtV,WAAWoV,EAAO,SAAWG,EAAQ,UAG/F,SAASC,GAAQH,EAAMnD,EAAMqC,EAAMkB,GACjC,OAAO3W,KAAK4W,IAAIxD,EAAK,SAAWmD,GAAOnD,EAAK,SAAWmD,GAAOd,EAAK,SAAWc,GAAOd,EAAK,SAAWc,GAAOd,EAAK,SAAWc,GAAOvC,GAAK,IAAMzF,SAASkH,EAAK,SAAWc,IAAShI,SAASoI,EAAc,UAAqB,WAATJ,EAAoB,MAAQ,UAAYhI,SAASoI,EAAc,UAAqB,WAATJ,EAAoB,SAAW,WAAa,GAG5U,SAASM,GAAe3W,GACtB,IAAIkT,EAAOlT,EAASkT,KAChBqC,EAAOvV,EAASgD,gBAChByT,EAAgB3C,GAAK,KAAOjB,iBAAiB0C,GAEjD,MAAO,CACLqB,OAAQJ,GAAQ,SAAUtD,EAAMqC,EAAMkB,GACtCI,MAAOL,GAAQ,QAAStD,EAAMqC,EAAMkB,IAIxC,IAAIK,GAAiB,SAAUC,EAAUrQ,GACvC,KAAMqQ,aAAoBrQ,GACxB,MAAM,IAAInD,UAAU,sCAIpByT,GAAc,WAChB,SAASC,EAAiB1S,EAAQ2S,GAChC,IAAK,IAAI1O,EAAI,EAAGA,EAAI0O,EAAMxO,OAAQF,IAAK,CACrC,IAAI2O,EAAaD,EAAM1O,GACvB2O,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDrV,OAAOsV,eAAehT,EAAQ4S,EAAWK,IAAKL,IAIlD,OAAO,SAAUzQ,EAAa+Q,EAAYC,GAGxC,OAFID,GAAYR,EAAiBvQ,EAAYxE,UAAWuV,GACpDC,GAAaT,EAAiBvQ,EAAagR,GACxChR,GAdO,GAsBd6Q,GAAiB,SAAU7V,EAAK8V,EAAKlV,GAYvC,OAXIkV,KAAO9V,EACTO,OAAOsV,eAAe7V,EAAK8V,EAAK,CAC9BlV,MAAOA,EACP8U,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZ5V,EAAI8V,GAAOlV,EAGNZ,GAGLiW,GAAW1V,OAAO2V,QAAU,SAAUrT,GACxC,IAAK,IAAIiE,EAAI,EAAGA,EAAI5D,UAAU8D,OAAQF,IAAK,CACzC,IAAIqP,EAASjT,UAAU4D,GAEvB,IAAK,IAAIgP,KAAOK,EACV5V,OAAOC,UAAUC,eAAeC,KAAKyV,EAAQL,KAC/CjT,EAAOiT,GAAOK,EAAOL,IAK3B,OAAOjT,GAUT,SAASuT,GAAcC,GACrB,OAAOJ,GAAS,GAAII,EAAS,CAC3B7B,MAAO6B,EAAQ9B,KAAO8B,EAAQlB,MAC9Bb,OAAQ+B,EAAQhC,IAAMgC,EAAQnB,SAWlC,SAASvF,GAAsBlR,GAC7B,IAAIuV,EAAO,GAKX,IACE,GAAI5B,GAAK,IAAK,CACZ4B,EAAOvV,EAAQkR,wBACf,IAAIuE,EAAYT,GAAUhV,EAAS,OAC/B0V,EAAaV,GAAUhV,EAAS,QACpCuV,EAAKK,KAAOH,EACZF,EAAKO,MAAQJ,EACbH,EAAKM,QAAUJ,EACfF,EAAKQ,OAASL,OAEdH,EAAOvV,EAAQkR,wBAEjB,MAAOtE,IAET,IAAIiL,EAAS,CACX/B,KAAMP,EAAKO,KACXF,IAAKL,EAAKK,IACVc,MAAOnB,EAAKQ,MAAQR,EAAKO,KACzBW,OAAQlB,EAAKM,OAASN,EAAKK,KAIzBkC,EAA6B,SAArB9X,EAAQ4S,SAAsB4D,GAAexW,EAAQwS,eAAiB,GAC9EkE,EAAQoB,EAAMpB,OAAS1W,EAAQ+X,aAAeF,EAAOnB,MACrDD,EAASqB,EAAMrB,QAAUzW,EAAQgY,cAAgBH,EAAOpB,OAExDwB,EAAiBjY,EAAQkY,YAAcxB,EACvCyB,EAAgBnY,EAAQiB,aAAewV,EAI3C,GAAIwB,GAAkBE,EAAe,CACnC,IAAIlC,EAAS1D,EAAyBvS,GACtCiY,GAAkBjC,GAAeC,EAAQ,KACzCkC,GAAiBnC,GAAeC,EAAQ,KAExC4B,EAAOnB,OAASuB,EAChBJ,EAAOpB,QAAU0B,EAGnB,OAAOR,GAAcE,GAGvB,SAASO,GAAqCrK,EAAUzI,GACtD,IAAI+S,EAAgB5T,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAE/EiP,EAASC,GAAK,IACd2E,EAA6B,SAApBhT,EAAOsN,SAChB2F,EAAerH,GAAsBnD,GACrCyK,EAAatH,GAAsB5L,GACnCmT,EAAe3F,EAAgB/E,GAE/BkI,EAAS1D,EAAyBjN,GAClCoT,EAAiB7X,WAAWoV,EAAOyC,gBACnCC,EAAkB9X,WAAWoV,EAAO0C,iBAGpCN,GAAiBC,IACnBE,EAAW5C,IAAMjW,KAAK4W,IAAIiC,EAAW5C,IAAK,GAC1C4C,EAAW1C,KAAOnW,KAAK4W,IAAIiC,EAAW1C,KAAM,IAE9C,IAAI8B,EAAUD,GAAc,CAC1B/B,IAAK2C,EAAa3C,IAAM4C,EAAW5C,IAAM8C,EACzC5C,KAAMyC,EAAazC,KAAO0C,EAAW1C,KAAO6C,EAC5CjC,MAAO6B,EAAa7B,MACpBD,OAAQ8B,EAAa9B,SASvB,GAPAmB,EAAQgB,UAAY,EACpBhB,EAAQiB,WAAa,GAMhBnF,GAAU4E,EAAQ,CACrB,IAAIM,EAAY/X,WAAWoV,EAAO2C,WAC9BC,EAAahY,WAAWoV,EAAO4C,YAEnCjB,EAAQhC,KAAO8C,EAAiBE,EAChChB,EAAQ/B,QAAU6C,EAAiBE,EACnChB,EAAQ9B,MAAQ6C,EAAkBE,EAClCjB,EAAQ7B,OAAS4C,EAAkBE,EAGnCjB,EAAQgB,UAAYA,EACpBhB,EAAQiB,WAAaA,EAOvB,OAJInF,IAAW2E,EAAgB/S,EAAOgC,SAASmR,GAAgBnT,IAAWmT,GAA0C,SAA1BA,EAAa7F,YACrGgF,EAAUtC,GAAcsC,EAAStS,IAG5BsS,EAGT,SAASkB,GAA8C9Y,GACrD,IAAI+Y,EAAgBtU,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAE/E2Q,EAAOpV,EAAQwS,cAAc3P,gBAC7BmW,EAAiBZ,GAAqCpY,EAASoV,GAC/DsB,EAAQ/W,KAAK4W,IAAInB,EAAK2C,YAAa9P,OAAOgR,YAAc,GACxDxC,EAAS9W,KAAK4W,IAAInB,EAAK4C,aAAc/P,OAAOiR,aAAe,GAE3DzD,EAAasD,EAAkC,EAAlB/D,GAAUI,GACvCM,EAAcqD,EAA0C,EAA1B/D,GAAUI,EAAM,QAE9C+D,EAAS,CACXvD,IAAKH,EAAYuD,EAAepD,IAAMoD,EAAeJ,UACrD9C,KAAMJ,EAAasD,EAAelD,KAAOkD,EAAeH,WACxDnC,MAAOA,EACPD,OAAQA,GAGV,OAAOkB,GAAcwB,GAWvB,SAASC,GAAQpZ,GACf,IAAI4S,EAAW5S,EAAQ4S,SACvB,GAAiB,SAAbA,GAAoC,SAAbA,EACzB,OAAO,EAET,GAAsD,UAAlDL,EAAyBvS,EAAS,YACpC,OAAO,EAET,IAAIkD,EAAayP,EAAc3S,GAC/B,QAAKkD,GAGEkW,GAAQlW,GAWjB,SAASmW,GAA6BrZ,GAEpC,IAAKA,IAAYA,EAAQsZ,eAAiB3F,KACxC,OAAO9T,SAASgD,gBAGlB,IADA,IAAI0W,EAAKvZ,EAAQsZ,cACVC,GAAoD,SAA9ChH,EAAyBgH,EAAI,cACxCA,EAAKA,EAAGD,cAEV,OAAOC,GAAM1Z,SAASgD,gBAcxB,SAAS2W,GAAcC,EAAQpG,EAAWqG,EAASC,GACjD,IAAItB,EAAgB5T,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAI/EmV,EAAa,CAAEhE,IAAK,EAAGE,KAAM,GAC7BhC,EAAeuE,EAAgBgB,GAA6BI,GAAUvF,GAAuBuF,EAAQrG,EAAiBC,IAG1H,GAA0B,aAAtBsG,EACFC,EAAad,GAA8ChF,EAAcuE,OACpE,CAEL,IAAIwB,OAAiB,EACK,iBAAtBF,EAE8B,UADhCE,EAAiB/G,EAAgBH,EAAcU,KAC5BT,WACjBiH,EAAiBJ,EAAOjH,cAAc3P,iBAGxCgX,EAD+B,WAAtBF,EACQF,EAAOjH,cAAc3P,gBAErB8W,EAGnB,IAAI/B,EAAUQ,GAAqCyB,EAAgB/F,EAAcuE,GAGjF,GAAgC,SAA5BwB,EAAejH,UAAwBwG,GAAQtF,GAWjD8F,EAAahC,MAXmD,CAChE,IAAIkC,EAAkBtD,GAAeiD,EAAOjH,eACxCiE,EAASqD,EAAgBrD,OACzBC,EAAQoD,EAAgBpD,MAE5BkD,EAAWhE,KAAOgC,EAAQhC,IAAMgC,EAAQgB,UACxCgB,EAAW/D,OAASY,EAASmB,EAAQhC,IACrCgE,EAAW9D,MAAQ8B,EAAQ9B,KAAO8B,EAAQiB,WAC1Ce,EAAW7D,MAAQW,EAAQkB,EAAQ9B,MASvC,IAAIiE,EAAqC,iBADzCL,EAAUA,GAAW,GAOrB,OALAE,EAAW9D,MAAQiE,EAAkBL,EAAUA,EAAQ5D,MAAQ,EAC/D8D,EAAWhE,KAAOmE,EAAkBL,EAAUA,EAAQ9D,KAAO,EAC7DgE,EAAW7D,OAASgE,EAAkBL,EAAUA,EAAQ3D,OAAS,EACjE6D,EAAW/D,QAAUkE,EAAkBL,EAAUA,EAAQ7D,QAAU,EAE5D+D,EAGT,SAASI,GAAQC,GAIf,OAHYA,EAAKvD,MACJuD,EAAKxD,OAcpB,SAASyD,GAAqBC,EAAWC,EAASX,EAAQpG,EAAWsG,GACnE,IAAID,EAAUjV,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,EAElF,IAAmC,IAA/B0V,EAAUpN,QAAQ,QACpB,OAAOoN,EAGT,IAAIP,EAAaJ,GAAcC,EAAQpG,EAAWqG,EAASC,GAEvDU,EAAQ,CACVzE,IAAK,CACHc,MAAOkD,EAAWlD,MAClBD,OAAQ2D,EAAQxE,IAAMgE,EAAWhE,KAEnCG,MAAO,CACLW,MAAOkD,EAAW7D,MAAQqE,EAAQrE,MAClCU,OAAQmD,EAAWnD,QAErBZ,OAAQ,CACNa,MAAOkD,EAAWlD,MAClBD,OAAQmD,EAAW/D,OAASuE,EAAQvE,QAEtCC,KAAM,CACJY,MAAO0D,EAAQtE,KAAO8D,EAAW9D,KACjCW,OAAQmD,EAAWnD,SAInB6D,EAAcxY,OAAOyY,KAAKF,GAAOG,KAAI,SAAUnD,GACjD,OAAOG,GAAS,CACdH,IAAKA,GACJgD,EAAMhD,GAAM,CACboD,KAAMT,GAAQK,EAAMhD,SAErBqD,MAAK,SAAUC,EAAGC,GACnB,OAAOA,EAAEH,KAAOE,EAAEF,QAGhBI,EAAgBP,EAAYvK,QAAO,SAAU+K,GAC/C,IAAIpE,EAAQoE,EAAMpE,MACdD,EAASqE,EAAMrE,OACnB,OAAOC,GAAS+C,EAAO1B,aAAetB,GAAUgD,EAAOzB,gBAGrD+C,EAAoBF,EAActS,OAAS,EAAIsS,EAAc,GAAGxD,IAAMiD,EAAY,GAAGjD,IAErF2D,EAAYb,EAAUpZ,MAAM,KAAK,GAErC,OAAOga,GAAqBC,EAAY,IAAMA,EAAY,IAa5D,SAASC,GAAoBC,EAAOzB,EAAQpG,GAC1C,IAAIgF,EAAgB5T,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,KAEpF0W,EAAqB9C,EAAgBgB,GAA6BI,GAAUvF,GAAuBuF,EAAQrG,EAAiBC,IAChI,OAAO+E,GAAqC/E,EAAW8H,EAAoB9C,GAU7E,SAAS+C,GAAcpb,GACrB,IACIiW,EADSjW,EAAQwS,cAAcC,YACfC,iBAAiB1S,GACjCqb,EAAIxa,WAAWoV,EAAO2C,WAAa,GAAK/X,WAAWoV,EAAOqF,cAAgB,GAC1EC,EAAI1a,WAAWoV,EAAO4C,YAAc,GAAKhY,WAAWoV,EAAOuF,aAAe,GAK9E,MAJa,CACX9E,MAAO1W,EAAQkY,YAAcqD,EAC7B9E,OAAQzW,EAAQiB,aAAeoa,GAYnC,SAASI,GAAqBtB,GAC5B,IAAIuB,EAAO,CAAE5F,KAAM,QAASC,MAAO,OAAQF,OAAQ,MAAOD,IAAK,UAC/D,OAAOuE,EAAUwB,QAAQ,0BAA0B,SAAUC,GAC3D,OAAOF,EAAKE,MAchB,SAASC,GAAiBpC,EAAQqC,EAAkB3B,GAClDA,EAAYA,EAAUpZ,MAAM,KAAK,GAGjC,IAAIgb,EAAaX,GAAc3B,GAG3BuC,EAAgB,CAClBtF,MAAOqF,EAAWrF,MAClBD,OAAQsF,EAAWtF,QAIjBwF,GAAoD,IAA1C,CAAC,QAAS,QAAQlP,QAAQoN,GACpC+B,EAAWD,EAAU,MAAQ,OAC7BE,EAAgBF,EAAU,OAAS,MACnCG,EAAcH,EAAU,SAAW,QACnCI,EAAwBJ,EAAqB,QAAX,SAStC,OAPAD,EAAcE,GAAYJ,EAAiBI,GAAYJ,EAAiBM,GAAe,EAAIL,EAAWK,GAAe,EAEnHJ,EAAcG,GADZhC,IAAcgC,EACeL,EAAiBK,GAAiBJ,EAAWM,GAE7CP,EAAiBL,GAAqBU,IAGhEH,EAYT,SAASM,GAAKC,EAAKC,GAEjB,OAAIC,MAAM1a,UAAUua,KACXC,EAAID,KAAKE,GAIXD,EAAIxM,OAAOyM,GAAO,GAqC3B,SAASE,GAAaC,EAAWzW,EAAM0W,GAoBrC,YAnB8B1H,IAAT0H,EAAqBD,EAAYA,EAAUxU,MAAM,EA1BxE,SAAmBoU,EAAKM,EAAM1a,GAE5B,GAAIsa,MAAM1a,UAAU+a,UAClB,OAAOP,EAAIO,WAAU,SAAUC,GAC7B,OAAOA,EAAQ,OAAM5a,KAKzB,IAAIG,EAAQga,GAAKC,GAAK,SAAUhb,GAC9B,OAAOA,EAAQ,OAAMY,KAEvB,OAAOoa,EAAIxP,QAAQzK,GAcsDwa,CAAUH,EAAW,EAAQC,KAEvFI,SAAQ,SAAUrH,GAC3BA,EAAmB,UAErBsH,QAAQC,KAAK,yDAEf,IAAI5Z,EAAKqS,EAAmB,UAAKA,EAASrS,GACtCqS,EAASwH,SAAW9K,EAAW/O,KAIjC4C,EAAK0R,QAAQ6B,OAAS9B,GAAczR,EAAK0R,QAAQ6B,QACjDvT,EAAK0R,QAAQvE,UAAYsE,GAAczR,EAAK0R,QAAQvE,WAEpDnN,EAAO5C,EAAG4C,EAAMyP,OAIbzP,EAUT,SAASkX,KAEP,IAAIzZ,KAAKuX,MAAMmC,YAAf,CAIA,IAAInX,EAAO,CACT0Q,SAAUjT,KACVsS,OAAQ,GACRqH,YAAa,GACbC,WAAY,GACZC,SAAS,EACT5F,QAAS,IAIX1R,EAAK0R,QAAQvE,UAAY4H,GAAoBtX,KAAKuX,MAAOvX,KAAK8V,OAAQ9V,KAAK0P,UAAW1P,KAAK8Z,QAAQC,eAKnGxX,EAAKiU,UAAYD,GAAqBvW,KAAK8Z,QAAQtD,UAAWjU,EAAK0R,QAAQvE,UAAW1P,KAAK8V,OAAQ9V,KAAK0P,UAAW1P,KAAK8Z,QAAQd,UAAUgB,KAAKhE,kBAAmBhW,KAAK8Z,QAAQd,UAAUgB,KAAKjE,SAG9LxT,EAAK0X,kBAAoB1X,EAAKiU,UAE9BjU,EAAKwX,cAAgB/Z,KAAK8Z,QAAQC,cAGlCxX,EAAK0R,QAAQ6B,OAASoC,GAAiBlY,KAAK8V,OAAQvT,EAAK0R,QAAQvE,UAAWnN,EAAKiU,WAEjFjU,EAAK0R,QAAQ6B,OAAOoE,SAAWla,KAAK8Z,QAAQC,cAAgB,QAAU,WAGtExX,EAAOwW,GAAa/Y,KAAKgZ,UAAWzW,GAI/BvC,KAAKuX,MAAM4C,UAIdna,KAAK8Z,QAAQM,SAAS7X,IAHtBvC,KAAKuX,MAAM4C,WAAY,EACvBna,KAAK8Z,QAAQO,SAAS9X,KAY1B,SAAS+X,GAAkBtB,EAAWuB,GACpC,OAAOvB,EAAUwB,MAAK,SAAUlE,GAC9B,IAAImE,EAAOnE,EAAKmE,KAEhB,OADcnE,EAAKkD,SACDiB,IAASF,KAW/B,SAASG,GAAyBxc,GAIhC,IAHA,IAAIyc,EAAW,EAAC,EAAO,KAAM,SAAU,MAAO,KAC1CC,EAAY1c,EAAS2c,OAAO,GAAG7b,cAAgBd,EAASsG,MAAM,GAEzDE,EAAI,EAAGA,EAAIiW,EAAS/V,OAAQF,IAAK,CACxC,IAAI3I,EAAS4e,EAASjW,GAClBoW,EAAU/e,EAAS,GAAKA,EAAS6e,EAAY1c,EACjD,GAA4C,oBAAjChC,SAASkT,KAAKjC,MAAM2N,GAC7B,OAAOA,EAGX,OAAO,KAQT,SAASC,KAsBP,OArBA/a,KAAKuX,MAAMmC,aAAc,EAGrBY,GAAkBta,KAAKgZ,UAAW,gBACpChZ,KAAK8V,OAAOkF,gBAAgB,eAC5Bhb,KAAK8V,OAAO3I,MAAM+M,SAAW,GAC7Bla,KAAK8V,OAAO3I,MAAM8E,IAAM,GACxBjS,KAAK8V,OAAO3I,MAAMgF,KAAO,GACzBnS,KAAK8V,OAAO3I,MAAMiF,MAAQ,GAC1BpS,KAAK8V,OAAO3I,MAAM+E,OAAS,GAC3BlS,KAAK8V,OAAO3I,MAAM8N,WAAa,GAC/Bjb,KAAK8V,OAAO3I,MAAMuN,GAAyB,cAAgB,IAG7D1a,KAAKkb,wBAIDlb,KAAK8Z,QAAQqB,iBACfnb,KAAK8V,OAAOvW,WAAW6b,YAAYpb,KAAK8V,QAEnC9V,KAQT,SAASqb,GAAUhf,GACjB,IAAIwS,EAAgBxS,EAAQwS,cAC5B,OAAOA,EAAgBA,EAAcC,YAAcxK,OAGrD,SAASgX,GAAsBxG,EAAc1U,EAAOmb,EAAUC,GAC5D,IAAIC,EAAmC,SAA1B3G,EAAa7F,SACtBxO,EAASgb,EAAS3G,EAAajG,cAAcC,YAAcgG,EAC/DrU,EAAOib,iBAAiBtb,EAAOmb,EAAU,CAAEI,SAAS,IAE/CF,GACHH,GAAsBnM,EAAgB1O,EAAOlB,YAAaa,EAAOmb,EAAUC,GAE7EA,EAAcjP,KAAK9L,GASrB,SAASmb,GAAoBlM,EAAWoK,EAASvC,EAAOsE,GAEtDtE,EAAMsE,YAAcA,EACpBR,GAAU3L,GAAWgM,iBAAiB,SAAUnE,EAAMsE,YAAa,CAAEF,SAAS,IAG9E,IAAIG,EAAgB3M,EAAgBO,GAKpC,OAJA4L,GAAsBQ,EAAe,SAAUvE,EAAMsE,YAAatE,EAAMiE,eACxEjE,EAAMuE,cAAgBA,EACtBvE,EAAMwE,eAAgB,EAEfxE,EAST,SAASyE,KACFhc,KAAKuX,MAAMwE,gBACd/b,KAAKuX,MAAQqE,GAAoB5b,KAAK0P,UAAW1P,KAAK8Z,QAAS9Z,KAAKuX,MAAOvX,KAAKic,iBAkCpF,SAASf,KAxBT,IAA8BxL,EAAW6H,EAyBnCvX,KAAKuX,MAAMwE,gBACbG,qBAAqBlc,KAAKic,gBAC1Bjc,KAAKuX,OA3BqB7H,EA2BQ1P,KAAK0P,UA3BF6H,EA2BavX,KAAKuX,MAzBzD8D,GAAU3L,GAAWyM,oBAAoB,SAAU5E,EAAMsE,aAGzDtE,EAAMiE,cAAcnC,SAAQ,SAAU5Y,GACpCA,EAAO0b,oBAAoB,SAAU5E,EAAMsE,gBAI7CtE,EAAMsE,YAAc,KACpBtE,EAAMiE,cAAgB,GACtBjE,EAAMuE,cAAgB,KACtBvE,EAAMwE,eAAgB,EACfxE,IAwBT,SAAS6E,GAAUC,GACjB,MAAa,KAANA,IAAaC,MAAMpf,WAAWmf,KAAOE,SAASF,GAWvD,SAASG,GAAUngB,EAASiW,GAC1BnU,OAAOyY,KAAKtE,GAAQ+G,SAAQ,SAAUH,GACpC,IAAIuD,EAAO,IAEkE,IAAzE,CAAC,QAAS,SAAU,MAAO,QAAS,SAAU,QAAQrT,QAAQ8P,IAAgBkD,GAAU9J,EAAO4G,MACjGuD,EAAO,MAETpgB,EAAQ8Q,MAAM+L,GAAQ5G,EAAO4G,GAAQuD,KAgIzC,IAAIC,GAAYzO,GAAa,WAAWnP,KAAK6H,UAAUyH,WA8GvD,SAASuO,GAAmB3D,EAAW4D,EAAgBC,GACrD,IAAIC,EAAanE,GAAKK,GAAW,SAAU1C,GAEzC,OADWA,EAAKmE,OACAmC,KAGdG,IAAeD,GAAc9D,EAAUwB,MAAK,SAAUxI,GACxD,OAAOA,EAASyI,OAASoC,GAAiB7K,EAASwH,SAAWxH,EAAStB,MAAQoM,EAAWpM,SAG5F,IAAKqM,EAAY,CACf,IAAIC,EAAc,IAAMJ,EAAiB,IACrCK,EAAY,IAAMJ,EAAgB,IACtCvD,QAAQC,KAAK0D,EAAY,4BAA8BD,EAAc,4DAA8DA,EAAc,KAEnJ,OAAOD,EAoIT,IAAIG,GAAa,CAAC,aAAc,OAAQ,WAAY,YAAa,MAAO,UAAW,cAAe,QAAS,YAAa,aAAc,SAAU,eAAgB,WAAY,OAAQ,cAGhLC,GAAkBD,GAAW1Y,MAAM,GAYvC,SAAS4Y,GAAU5G,GACjB,IAAI6G,EAAUvc,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAEzE+G,EAAQsV,GAAgB/T,QAAQoN,GAChCoC,EAAMuE,GAAgB3Y,MAAMqD,EAAQ,GAAGyV,OAAOH,GAAgB3Y,MAAM,EAAGqD,IAC3E,OAAOwV,EAAUzE,EAAI2E,UAAY3E,EAkfnC,IAkWI4E,GAAW,CAKbhH,UAAW,SAMXuD,eAAe,EAMfgC,eAAe,EAOfZ,iBAAiB,EAQjBd,SAAU,aAUVD,SAAU,aAOVpB,UAnZc,CASdyE,MAAO,CAEL/M,MAAO,IAEP8I,SAAS,EAET7Z,GA9HJ,SAAe4C,GACb,IAAIiU,EAAYjU,EAAKiU,UACjBkH,EAAgBlH,EAAUpZ,MAAM,KAAK,GACrCugB,EAAiBnH,EAAUpZ,MAAM,KAAK,GAG1C,GAAIugB,EAAgB,CAClB,IAAIC,EAAgBrb,EAAK0R,QACrBvE,EAAYkO,EAAclO,UAC1BoG,EAAS8H,EAAc9H,OAEvB+H,GAA2D,IAA9C,CAAC,SAAU,OAAOzU,QAAQsU,GACvCpM,EAAOuM,EAAa,OAAS,MAC7BpF,EAAcoF,EAAa,QAAU,SAErCC,EAAe,CACjBpV,MAAO+K,GAAe,GAAInC,EAAM5B,EAAU4B,IAC1CvI,IAAK0K,GAAe,GAAInC,EAAM5B,EAAU4B,GAAQ5B,EAAU+I,GAAe3C,EAAO2C,KAGlFlW,EAAK0R,QAAQ6B,OAASjC,GAAS,GAAIiC,EAAQgI,EAAaH,IAG1D,OAAOpb,IAgJPiT,OAAQ,CAEN9E,MAAO,IAEP8I,SAAS,EAET7Z,GA7RJ,SAAgB4C,EAAM+T,GACpB,IAQIrC,EARAuB,EAASc,EAAKd,OACdgB,EAAYjU,EAAKiU,UACjBoH,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1BgO,EAAgBlH,EAAUpZ,MAAM,KAAK,GAwBzC,OApBE6W,EADEmI,IAAW5G,GACH,EAAEA,EAAQ,GAvFxB,SAAqBA,EAAQ6C,EAAeF,EAAkBuF,GAC5D,IAAIzJ,EAAU,CAAC,EAAG,GAKd8J,GAA0D,IAA9C,CAAC,QAAS,QAAQ3U,QAAQsU,GAItCM,EAAYxI,EAAOpY,MAAM,WAAWyZ,KAAI,SAAUoH,GACpD,OAAOA,EAAKxhB,UAKVyhB,EAAUF,EAAU5U,QAAQuP,GAAKqF,GAAW,SAAUC,GACxD,OAAgC,IAAzBA,EAAKE,OAAO,YAGjBH,EAAUE,KAAiD,IAArCF,EAAUE,GAAS9U,QAAQ,MACnDkQ,QAAQC,KAAK,gFAKf,IAAI6E,EAAa,cACbC,GAAmB,IAAbH,EAAiB,CAACF,EAAUxZ,MAAM,EAAG0Z,GAASZ,OAAO,CAACU,EAAUE,GAAS9gB,MAAMghB,GAAY,KAAM,CAACJ,EAAUE,GAAS9gB,MAAMghB,GAAY,IAAId,OAAOU,EAAUxZ,MAAM0Z,EAAU,KAAO,CAACF,GAqC9L,OAlCAK,EAAMA,EAAIxH,KAAI,SAAUyH,EAAIzW,GAE1B,IAAI4Q,GAAyB,IAAV5Q,GAAekW,EAAYA,GAAa,SAAW,QAClEQ,GAAoB,EACxB,OAAOD,EAGNE,QAAO,SAAUxH,EAAGC,GACnB,MAAwB,KAApBD,EAAEA,EAAEpS,OAAS,KAAwC,IAA3B,CAAC,IAAK,KAAKwE,QAAQ6N,IAC/CD,EAAEA,EAAEpS,OAAS,GAAKqS,EAClBsH,GAAoB,EACbvH,GACEuH,GACTvH,EAAEA,EAAEpS,OAAS,IAAMqS,EACnBsH,GAAoB,EACbvH,GAEAA,EAAEsG,OAAOrG,KAEjB,IAEFJ,KAAI,SAAU4H,GACb,OAxGN,SAAiBA,EAAKhG,EAAaJ,EAAeF,GAEhD,IAAI/a,EAAQqhB,EAAI9f,MAAM,6BAClBH,GAASpB,EAAM,GACfqf,EAAOrf,EAAM,GAGjB,OAAKoB,EAIqB,IAAtBie,EAAKrT,QAAQ,KAYJ4K,GATJ,OADCyI,EAEMpE,EAKAF,GAIFM,GAAe,IAAMja,EACf,OAATie,GAA0B,OAATA,GAGb,OAATA,EACKzgB,KAAK4W,IAAI1W,SAASgD,gBAAgBmV,aAAc/P,OAAOiR,aAAe,GAEtEvZ,KAAK4W,IAAI1W,SAASgD,gBAAgBkV,YAAa9P,OAAOgR,YAAc,IAE/D,IAAM9W,EAIbA,EA7BAigB,EAgGEC,CAAQD,EAAKhG,EAAaJ,EAAeF,SAKpDkG,EAAIhF,SAAQ,SAAUiF,EAAIzW,GACxByW,EAAGjF,SAAQ,SAAU4E,EAAMU,GACrBvC,GAAU6B,KACZhK,EAAQpM,IAAUoW,GAA2B,MAAnBK,EAAGK,EAAS,IAAc,EAAI,UAIvD1K,EAyBK2K,CAAYpJ,EAAQM,EAAQpG,EAAWgO,GAG7B,SAAlBA,GACF5H,EAAO7D,KAAOgC,EAAQ,GACtB6B,EAAO3D,MAAQ8B,EAAQ,IACI,UAAlByJ,GACT5H,EAAO7D,KAAOgC,EAAQ,GACtB6B,EAAO3D,MAAQ8B,EAAQ,IACI,QAAlByJ,GACT5H,EAAO3D,MAAQ8B,EAAQ,GACvB6B,EAAO7D,KAAOgC,EAAQ,IACK,WAAlByJ,IACT5H,EAAO3D,MAAQ8B,EAAQ,GACvB6B,EAAO7D,KAAOgC,EAAQ,IAGxB1R,EAAKuT,OAASA,EACPvT,GAkQLiT,OAAQ,GAoBVqJ,gBAAiB,CAEfnO,MAAO,IAEP8I,SAAS,EAET7Z,GAlRJ,SAAyB4C,EAAMuX,GAC7B,IAAI9D,EAAoB8D,EAAQ9D,mBAAqB/F,GAAgB1N,EAAK0Q,SAAS6C,QAK/EvT,EAAK0Q,SAASvD,YAAcsG,IAC9BA,EAAoB/F,GAAgB+F,IAMtC,IAAI8I,EAAgBpE,GAAyB,aACzCqE,EAAexc,EAAK0Q,SAAS6C,OAAO3I,MACpC8E,EAAM8M,EAAa9M,IACnBE,EAAO4M,EAAa5M,KACpB6M,EAAYD,EAAaD,GAE7BC,EAAa9M,IAAM,GACnB8M,EAAa5M,KAAO,GACpB4M,EAAaD,GAAiB,GAE9B,IAAI7I,EAAaJ,GAActT,EAAK0Q,SAAS6C,OAAQvT,EAAK0Q,SAASvD,UAAWoK,EAAQ/D,QAASC,EAAmBzT,EAAKwX,eAIvHgF,EAAa9M,IAAMA,EACnB8M,EAAa5M,KAAOA,EACpB4M,EAAaD,GAAiBE,EAE9BlF,EAAQ7D,WAAaA,EAErB,IAAIvF,EAAQoJ,EAAQmF,SAChBnJ,EAASvT,EAAK0R,QAAQ6B,OAEtB+C,EAAQ,CACVqG,QAAS,SAAiB1I,GACxB,IAAIhY,EAAQsX,EAAOU,GAInB,OAHIV,EAAOU,GAAaP,EAAWO,KAAesD,EAAQqF,sBACxD3gB,EAAQxC,KAAK4W,IAAIkD,EAAOU,GAAYP,EAAWO,KAE1C/C,GAAe,GAAI+C,EAAWhY,IAEvC4gB,UAAW,SAAmB5I,GAC5B,IAAI+B,EAAyB,UAAd/B,EAAwB,OAAS,MAC5ChY,EAAQsX,EAAOyC,GAInB,OAHIzC,EAAOU,GAAaP,EAAWO,KAAesD,EAAQqF,sBACxD3gB,EAAQxC,KAAKqjB,IAAIvJ,EAAOyC,GAAWtC,EAAWO,IAA4B,UAAdA,EAAwBV,EAAO/C,MAAQ+C,EAAOhD,UAErGW,GAAe,GAAI8E,EAAU/Z,KAWxC,OAPAkS,EAAM2I,SAAQ,SAAU7C,GACtB,IAAIlF,GAA+C,IAAxC,CAAC,OAAQ,OAAOlI,QAAQoN,GAAoB,UAAY,YACnEV,EAASjC,GAAS,GAAIiC,EAAQ+C,EAAMvH,GAAMkF,OAG5CjU,EAAK0R,QAAQ6B,OAASA,EAEfvT,GA2NL0c,SAAU,CAAC,OAAQ,QAAS,MAAO,UAOnClJ,QAAS,EAMTC,kBAAmB,gBAYrBsJ,aAAc,CAEZ5O,MAAO,IAEP8I,SAAS,EAET7Z,GAlgBJ,SAAsB4C,GACpB,IAAIqb,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1B8G,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCmiB,EAAQvjB,KAAKujB,MACb1B,GAAuD,IAA1C,CAAC,MAAO,UAAUzU,QAAQoN,GACvClF,EAAOuM,EAAa,QAAU,SAC9B2B,EAAS3B,EAAa,OAAS,MAC/BpF,EAAcoF,EAAa,QAAU,SASzC,OAPI/H,EAAOxE,GAAQiO,EAAM7P,EAAU8P,MACjCjd,EAAK0R,QAAQ6B,OAAO0J,GAAUD,EAAM7P,EAAU8P,IAAW1J,EAAO2C,IAE9D3C,EAAO0J,GAAUD,EAAM7P,EAAU4B,MACnC/O,EAAK0R,QAAQ6B,OAAO0J,GAAUD,EAAM7P,EAAU4B,KAGzC/O,IA4fPkd,MAAO,CAEL/O,MAAO,IAEP8I,SAAS,EAET7Z,GApxBJ,SAAe4C,EAAMuX,GACnB,IAAI4F,EAGJ,IAAK/C,GAAmBpa,EAAK0Q,SAAS+F,UAAW,QAAS,gBACxD,OAAOzW,EAGT,IAAIod,EAAe7F,EAAQzd,QAG3B,GAA4B,iBAAjBsjB,GAIT,KAHAA,EAAepd,EAAK0Q,SAAS6C,OAAOpZ,cAAcijB,IAIhD,OAAOpd,OAKT,IAAKA,EAAK0Q,SAAS6C,OAAOnS,SAASgc,GAEjC,OADArG,QAAQC,KAAK,iEACNhX,EAIX,IAAIiU,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCwgB,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1BmO,GAAuD,IAA1C,CAAC,OAAQ,SAASzU,QAAQoN,GAEvC7R,EAAMkZ,EAAa,SAAW,QAC9B+B,EAAkB/B,EAAa,MAAQ,OACvCvM,EAAOsO,EAAgBhhB,cACvBihB,EAAUhC,EAAa,OAAS,MAChC2B,EAAS3B,EAAa,SAAW,QACjCiC,EAAmBrI,GAAckI,GAAchb,GAQ/C+K,EAAU8P,GAAUM,EAAmBhK,EAAOxE,KAChD/O,EAAK0R,QAAQ6B,OAAOxE,IAASwE,EAAOxE,IAAS5B,EAAU8P,GAAUM,IAG/DpQ,EAAU4B,GAAQwO,EAAmBhK,EAAO0J,KAC9Cjd,EAAK0R,QAAQ6B,OAAOxE,IAAS5B,EAAU4B,GAAQwO,EAAmBhK,EAAO0J,IAE3Ejd,EAAK0R,QAAQ6B,OAAS9B,GAAczR,EAAK0R,QAAQ6B,QAGjD,IAAIiK,EAASrQ,EAAU4B,GAAQ5B,EAAU/K,GAAO,EAAImb,EAAmB,EAInE/iB,EAAM6R,EAAyBrM,EAAK0Q,SAAS6C,QAC7CkK,EAAmB9iB,WAAWH,EAAI,SAAW6iB,IAC7CK,EAAmB/iB,WAAWH,EAAI,SAAW6iB,EAAkB,UAC/DM,EAAYH,EAASxd,EAAK0R,QAAQ6B,OAAOxE,GAAQ0O,EAAmBC,EAQxE,OALAC,EAAYlkB,KAAK4W,IAAI5W,KAAKqjB,IAAIvJ,EAAOnR,GAAOmb,EAAkBI,GAAY,GAE1E3d,EAAKod,aAAeA,EACpBpd,EAAK0R,QAAQwL,OAAmChM,GAA1BiM,EAAsB,GAAwCpO,EAAMtV,KAAKmkB,MAAMD,IAAazM,GAAeiM,EAAqBG,EAAS,IAAKH,GAE7Jnd,GA8sBLlG,QAAS,aAcX2d,KAAM,CAEJtJ,MAAO,IAEP8I,SAAS,EAET7Z,GA5oBJ,SAAc4C,EAAMuX,GAElB,GAAIQ,GAAkB/X,EAAK0Q,SAAS+F,UAAW,SAC7C,OAAOzW,EAGT,GAAIA,EAAKsX,SAAWtX,EAAKiU,YAAcjU,EAAK0X,kBAE1C,OAAO1X,EAGT,IAAI0T,EAAaJ,GAActT,EAAK0Q,SAAS6C,OAAQvT,EAAK0Q,SAASvD,UAAWoK,EAAQ/D,QAAS+D,EAAQ9D,kBAAmBzT,EAAKwX,eAE3HvD,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCgjB,EAAoBtI,GAAqBtB,GACzCa,EAAY9U,EAAKiU,UAAUpZ,MAAM,KAAK,IAAM,GAE5CijB,EAAY,GAEhB,OAAQvG,EAAQwG,UACd,IAhCI,OAiCFD,EAAY,CAAC7J,EAAW4J,GACxB,MACF,IAlCS,YAmCPC,EAAYjD,GAAU5G,GACtB,MACF,IApCgB,mBAqCd6J,EAAYjD,GAAU5G,GAAW,GACjC,MACF,QACE6J,EAAYvG,EAAQwG,SAyDxB,OAtDAD,EAAUhH,SAAQ,SAAUkH,EAAM1Y,GAChC,GAAI2O,IAAc+J,GAAQF,EAAUzb,SAAWiD,EAAQ,EACrD,OAAOtF,EAGTiU,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCgjB,EAAoBtI,GAAqBtB,GAEzC,IAAI6B,EAAgB9V,EAAK0R,QAAQ6B,OAC7B0K,EAAaje,EAAK0R,QAAQvE,UAG1B6P,EAAQvjB,KAAKujB,MACbkB,EAA4B,SAAdjK,GAAwB+I,EAAMlH,EAAcjG,OAASmN,EAAMiB,EAAWrO,OAAuB,UAAdqE,GAAyB+I,EAAMlH,EAAclG,MAAQoN,EAAMiB,EAAWpO,QAAwB,QAAdoE,GAAuB+I,EAAMlH,EAAcnG,QAAUqN,EAAMiB,EAAWvO,MAAsB,WAAduE,GAA0B+I,EAAMlH,EAAcpG,KAAOsN,EAAMiB,EAAWtO,QAEjUwO,EAAgBnB,EAAMlH,EAAclG,MAAQoN,EAAMtJ,EAAW9D,MAC7DwO,EAAiBpB,EAAMlH,EAAcjG,OAASmN,EAAMtJ,EAAW7D,OAC/DwO,EAAerB,EAAMlH,EAAcpG,KAAOsN,EAAMtJ,EAAWhE,KAC3D4O,EAAkBtB,EAAMlH,EAAcnG,QAAUqN,EAAMtJ,EAAW/D,QAEjE4O,EAAoC,SAAdtK,GAAwBkK,GAA+B,UAAdlK,GAAyBmK,GAAgC,QAAdnK,GAAuBoK,GAA8B,WAAdpK,GAA0BqK,EAG3KhD,GAAuD,IAA1C,CAAC,MAAO,UAAUzU,QAAQoN,GAGvCuK,IAA0BjH,EAAQkH,iBAAmBnD,GAA4B,UAAdxG,GAAyBqJ,GAAiB7C,GAA4B,QAAdxG,GAAuBsJ,IAAmB9C,GAA4B,UAAdxG,GAAyBuJ,IAAiB/C,GAA4B,QAAdxG,GAAuBwJ,GAGlQI,IAA8BnH,EAAQoH,0BAA4BrD,GAA4B,UAAdxG,GAAyBsJ,GAAkB9C,GAA4B,QAAdxG,GAAuBqJ,IAAkB7C,GAA4B,UAAdxG,GAAyBwJ,IAAoBhD,GAA4B,QAAdxG,GAAuBuJ,GAElRO,EAAmBJ,GAAyBE,GAE5CR,GAAeK,GAAuBK,KAExC5e,EAAKsX,SAAU,GAEX4G,GAAeK,KACjBtK,EAAY6J,EAAUxY,EAAQ,IAG5BsZ,IACF9J,EAvJR,SAA8BA,GAC5B,MAAkB,QAAdA,EACK,QACgB,UAAdA,EACF,MAEFA,EAiJW+J,CAAqB/J,IAGnC9U,EAAKiU,UAAYA,GAAaa,EAAY,IAAMA,EAAY,IAI5D9U,EAAK0R,QAAQ6B,OAASjC,GAAS,GAAItR,EAAK0R,QAAQ6B,OAAQoC,GAAiB3V,EAAK0Q,SAAS6C,OAAQvT,EAAK0R,QAAQvE,UAAWnN,EAAKiU,YAE5HjU,EAAOwW,GAAaxW,EAAK0Q,SAAS+F,UAAWzW,EAAM,YAGhDA,GA4jBL+d,SAAU,OAKVvK,QAAS,EAOTC,kBAAmB,WAQnBgL,gBAAgB,EAQhBE,yBAAyB,GAU3BG,MAAO,CAEL3Q,MAAO,IAEP8I,SAAS,EAET7Z,GArQJ,SAAe4C,GACb,IAAIiU,EAAYjU,EAAKiU,UACjBkH,EAAgBlH,EAAUpZ,MAAM,KAAK,GACrCwgB,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1B4I,GAAwD,IAA9C,CAAC,OAAQ,SAASlP,QAAQsU,GAEpC4D,GAA6D,IAA5C,CAAC,MAAO,QAAQlY,QAAQsU,GAO7C,OALA5H,EAAOwC,EAAU,OAAS,OAAS5I,EAAUgO,IAAkB4D,EAAiBxL,EAAOwC,EAAU,QAAU,UAAY,GAEvH/V,EAAKiU,UAAYsB,GAAqBtB,GACtCjU,EAAK0R,QAAQ6B,OAAS9B,GAAc8B,GAE7BvT,IAkQPoK,KAAM,CAEJ+D,MAAO,IAEP8I,SAAS,EAET7Z,GA9TJ,SAAc4C,GACZ,IAAKoa,GAAmBpa,EAAK0Q,SAAS+F,UAAW,OAAQ,mBACvD,OAAOzW,EAGT,IAAIkU,EAAUlU,EAAK0R,QAAQvE,UACvB6R,EAAQ5I,GAAKpW,EAAK0Q,SAAS+F,WAAW,SAAUhH,GAClD,MAAyB,oBAAlBA,EAASyI,QACfxE,WAEH,GAAIQ,EAAQvE,OAASqP,EAAMtP,KAAOwE,EAAQtE,KAAOoP,EAAMnP,OAASqE,EAAQxE,IAAMsP,EAAMrP,QAAUuE,EAAQrE,MAAQmP,EAAMpP,KAAM,CAExH,IAAkB,IAAd5P,EAAKoK,KACP,OAAOpK,EAGTA,EAAKoK,MAAO,EACZpK,EAAKqX,WAAW,uBAAyB,OACpC,CAEL,IAAkB,IAAdrX,EAAKoK,KACP,OAAOpK,EAGTA,EAAKoK,MAAO,EACZpK,EAAKqX,WAAW,wBAAyB,EAG3C,OAAOrX,IAoTPif,aAAc,CAEZ9Q,MAAO,IAEP8I,SAAS,EAET7Z,GAtgCJ,SAAsB4C,EAAMuX,GAC1B,IAAIpC,EAAIoC,EAAQpC,EACZE,EAAIkC,EAAQlC,EACZ9B,EAASvT,EAAK0R,QAAQ6B,OAItB2L,EAA8B9I,GAAKpW,EAAK0Q,SAAS+F,WAAW,SAAUhH,GACxE,MAAyB,eAAlBA,EAASyI,QACfiH,qBACiCnQ,IAAhCkQ,GACFnI,QAAQC,KAAK,iIAEf,IA6BIpH,EACAF,EA9BAyP,OAAkDnQ,IAAhCkQ,EAA4CA,EAA8B3H,EAAQ4H,gBAEpGvR,EAAeF,GAAgB1N,EAAK0Q,SAAS6C,QAC7C6L,EAAmBpU,GAAsB4C,GAGzCmC,EAAS,CACX4H,SAAUpE,EAAOoE,UAGfjG,EA9DN,SAA2B1R,EAAMqf,GAC/B,IAAIhE,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAC1ByQ,EAAQnkB,KAAKmkB,MACbZ,EAAQvjB,KAAKujB,MAEbsC,EAAU,SAAiBC,GAC7B,OAAOA,GAGLC,EAAiB5B,EAAMzQ,EAAUqD,OACjCiP,EAAc7B,EAAMrK,EAAO/C,OAE3B8K,GAA4D,IAA/C,CAAC,OAAQ,SAASzU,QAAQ7G,EAAKiU,WAC5CyL,GAA+C,IAAjC1f,EAAKiU,UAAUpN,QAAQ,KAIrC8Y,EAAuBN,EAAwB/D,GAAcoE,GAH3CF,EAAiB,GAAMC,EAAc,EAGuC7B,EAAQZ,EAAjEsC,EACrCM,EAAqBP,EAAwBzB,EAAV0B,EAEvC,MAAO,CACL1P,KAAM+P,EANWH,EAAiB,GAAM,GAAKC,EAAc,GAAM,IAMtBC,GAAeL,EAAc9L,EAAO3D,KAAO,EAAI2D,EAAO3D,MACjGF,IAAKkQ,EAAkBrM,EAAO7D,KAC9BC,OAAQiQ,EAAkBrM,EAAO5D,QACjCE,MAAO8P,EAAoBpM,EAAO1D,QAoCtBgQ,CAAkB7f,EAAM+B,OAAO+d,iBAAmB,IAAM3F,IAElElK,EAAc,WAANkF,EAAiB,MAAQ,SACjCjF,EAAc,UAANmF,EAAgB,OAAS,QAKjC0K,EAAmB5H,GAAyB,aAiChD,GAhBIzI,EAJU,WAAVO,EAG4B,SAA1BrC,EAAalB,UACRkB,EAAakE,aAAeJ,EAAQ/B,QAEpCyP,EAAiB7O,OAASmB,EAAQ/B,OAGrC+B,EAAQhC,IAIZE,EAFU,UAAVM,EAC4B,SAA1BtC,EAAalB,UACPkB,EAAaiE,YAAcH,EAAQ7B,OAEnCuP,EAAiB5O,MAAQkB,EAAQ7B,MAGpC6B,EAAQ9B,KAEbuP,GAAmBY,EACrBhQ,EAAOgQ,GAAoB,eAAiBnQ,EAAO,OAASF,EAAM,SAClEK,EAAOE,GAAS,EAChBF,EAAOG,GAAS,EAChBH,EAAO2I,WAAa,gBACf,CAEL,IAAIsH,EAAsB,WAAV/P,GAAsB,EAAI,EACtCgQ,EAAuB,UAAV/P,GAAqB,EAAI,EAC1CH,EAAOE,GAASP,EAAMsQ,EACtBjQ,EAAOG,GAASN,EAAOqQ,EACvBlQ,EAAO2I,WAAazI,EAAQ,KAAOC,EAIrC,IAAImH,EAAa,CACf,cAAerX,EAAKiU,WAQtB,OAJAjU,EAAKqX,WAAa/F,GAAS,GAAI+F,EAAYrX,EAAKqX,YAChDrX,EAAK+P,OAASuB,GAAS,GAAIvB,EAAQ/P,EAAK+P,QACxC/P,EAAKoX,YAAc9F,GAAS,GAAItR,EAAK0R,QAAQwL,MAAOld,EAAKoX,aAElDpX,GAo7BLmf,iBAAiB,EAMjBhK,EAAG,SAMHE,EAAG,SAkBL6K,WAAY,CAEV/R,MAAO,IAEP8I,SAAS,EAET7Z,GAzpCJ,SAAoB4C,GApBpB,IAAuBlG,EAASud,EAoC9B,OAXA4C,GAAUja,EAAK0Q,SAAS6C,OAAQvT,EAAK+P,QAzBhBjW,EA6BPkG,EAAK0Q,SAAS6C,OA7BE8D,EA6BMrX,EAAKqX,WA5BzCzb,OAAOyY,KAAKgD,GAAYP,SAAQ,SAAUH,IAE1B,IADFU,EAAWV,GAErB7c,EAAQ0H,aAAamV,EAAMU,EAAWV,IAEtC7c,EAAQ2e,gBAAgB9B,MA0BxB3W,EAAKod,cAAgBxhB,OAAOyY,KAAKrU,EAAKoX,aAAa/U,QACrD4X,GAAUja,EAAKod,aAAcpd,EAAKoX,aAG7BpX,GA2oCLmgB,OA9nCJ,SAA0BhT,EAAWoG,EAAQgE,EAAS6I,EAAiBpL,GAErE,IAAIY,EAAmBb,GAAoBC,EAAOzB,EAAQpG,EAAWoK,EAAQC,eAKzEvD,EAAYD,GAAqBuD,EAAQtD,UAAW2B,EAAkBrC,EAAQpG,EAAWoK,EAAQd,UAAUgB,KAAKhE,kBAAmB8D,EAAQd,UAAUgB,KAAKjE,SAQ9J,OANAD,EAAO/R,aAAa,cAAeyS,GAInCgG,GAAU1G,EAAQ,CAAEoE,SAAUJ,EAAQC,cAAgB,QAAU,aAEzDD,GAsnCL4H,qBAAiBnQ,KAuGjBqR,GAAS,WASX,SAASA,EAAOlT,EAAWoG,GACzB,IAAI/V,EAAQC,KAER8Z,EAAUhZ,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,GAClFkS,GAAehT,KAAM4iB,GAErB5iB,KAAKic,eAAiB,WACpB,OAAO4G,sBAAsB9iB,EAAM0Z,SAIrCzZ,KAAKyZ,OAASpL,EAASrO,KAAKyZ,OAAO9R,KAAK3H,OAGxCA,KAAK8Z,QAAUjG,GAAS,GAAI+O,EAAOpF,SAAU1D,GAG7C9Z,KAAKuX,MAAQ,CACXmC,aAAa,EACbS,WAAW,EACXqB,cAAe,IAIjBxb,KAAK0P,UAAYA,GAAaA,EAAU9P,OAAS8P,EAAU,GAAKA,EAChE1P,KAAK8V,OAASA,GAAUA,EAAOlW,OAASkW,EAAO,GAAKA,EAGpD9V,KAAK8Z,QAAQd,UAAY,GACzB7a,OAAOyY,KAAK/C,GAAS,GAAI+O,EAAOpF,SAASxE,UAAWc,EAAQd,YAAYK,SAAQ,SAAUoB,GACxF1a,EAAM+Z,QAAQd,UAAUyB,GAAQ5G,GAAS,GAAI+O,EAAOpF,SAASxE,UAAUyB,IAAS,GAAIX,EAAQd,UAAYc,EAAQd,UAAUyB,GAAQ,OAIpIza,KAAKgZ,UAAY7a,OAAOyY,KAAK5W,KAAK8Z,QAAQd,WAAWnC,KAAI,SAAU4D,GACjE,OAAO5G,GAAS,CACd4G,KAAMA,GACL1a,EAAM+Z,QAAQd,UAAUyB,OAG5B1D,MAAK,SAAUC,EAAGC,GACjB,OAAOD,EAAEtG,MAAQuG,EAAEvG,SAOrB1Q,KAAKgZ,UAAUK,SAAQ,SAAUsJ,GAC3BA,EAAgBnJ,SAAW9K,EAAWiU,EAAgBD,SACxDC,EAAgBD,OAAO3iB,EAAM2P,UAAW3P,EAAM+V,OAAQ/V,EAAM+Z,QAAS6I,EAAiB5iB,EAAMwX,UAKhGvX,KAAKyZ,SAEL,IAAIsC,EAAgB/b,KAAK8Z,QAAQiC,cAC7BA,GAEF/b,KAAKgc,uBAGPhc,KAAKuX,MAAMwE,cAAgBA,EAqD7B,OA9CA7I,GAAY0P,EAAQ,CAAC,CACnBlP,IAAK,SACLlV,MAAO,WACL,OAAOib,GAAOnb,KAAK0B,QAEpB,CACD0T,IAAK,UACLlV,MAAO,WACL,OAAOuc,GAAQzc,KAAK0B,QAErB,CACD0T,IAAK,uBACLlV,MAAO,WACL,OAAOwd,GAAqB1d,KAAK0B,QAElC,CACD0T,IAAK,wBACLlV,MAAO,WACL,OAAO0c,GAAsB5c,KAAK0B,UA4B/B4iB,EA7HI,GAqJbA,GAAOE,OAA2B,oBAAXxe,OAAyBA,OAASye,QAAQC,YACjEJ,GAAO1F,WAAaA,GACpB0F,GAAOpF,SAAWA,GAElB,IAAAyF,GAAeL,GCviFT9d,GAAO,WAEP/D,GAAW,cAGXC,GAAqBlE,EAAAA,QAAE6C,GAAGmF,IAO1Boe,GAAiB,IAAIrkB,OAAUskB,YAE/BC,GAAsB,WACtB7X,GAAkB,OAIlB8X,GAAuB,sBAGvBC,GAAU,mBACVC,GAAY,qBAIZC,GAAoB,6BACpBC,GAAsB,+BAGtB7X,GAAuB,2BAEvB8X,GAAgB,iBAWhBve,GAAU,CACdqQ,OAAQ,EACRwE,MAAM,EACN2J,SAAU,eACVjU,UAAW,SACXkU,QAAS,UACTC,aAAc,MAGVne,GAAc,CAClB8P,OAAQ,2BACRwE,KAAM,UACN2J,SAAU,mBACVjU,UAAW,mBACXkU,QAAS,SACTC,aAAc,iBAOVC,GAAAA,WACJ,SAAAA,EAAYznB,EAAS2B,GACnBgC,KAAKkB,SAAW7E,EAChB2D,KAAK+jB,QAAU,KACf/jB,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKgkB,MAAQhkB,KAAKikB,kBAClBjkB,KAAKkkB,UAAYlkB,KAAKmkB,gBAEtBnkB,KAAKgH,gDAiBP5D,OAAA,WACE,IAAIpD,KAAKkB,SAASkjB,WAAYtnB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASohB,IAAxD,CAIA,IAAMiB,EAAWvnB,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASuJ,IAExCuY,EAASQ,cAELD,GAIJrkB,KAAK4M,MAAK,OAGZA,KAAA,SAAK2X,GACH,QADsB,IAAnBA,IAAAA,GAAY,KACXvkB,KAAKkB,SAASkjB,UAAYtnB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASohB,KAAwBtmB,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASuJ,KAAvG,CAIA,IAAM5B,EAAgB,CACpBA,cAAe3J,KAAKkB,UAEhBsjB,EAAY1nB,EAAAA,QAAEgF,MA3FR,mBA2F0B6H,GAChChI,EAASmiB,EAASW,sBAAsBzkB,KAAKkB,UAInD,GAFApE,EAAAA,QAAE6E,GAAQnE,QAAQgnB,IAEdA,EAAUjjB,qBAAd,CAKA,IAAKvB,KAAKkkB,WAAaK,EAAW,CAEhC,GAAsB,oBAAX3B,GACT,MAAM,IAAInjB,UAAU,gEAGtB,IAAIilB,EAAmB1kB,KAAKkB,SAEG,WAA3BlB,KAAKuG,QAAQmJ,UACfgV,EAAmB/iB,EACV9F,EAAK8B,UAAUqC,KAAKuG,QAAQmJ,aACrCgV,EAAmB1kB,KAAKuG,QAAQmJ,UAGa,oBAAlC1P,KAAKuG,QAAQmJ,UAAU9P,SAChC8kB,EAAmB1kB,KAAKuG,QAAQmJ,UAAU,KAOhB,iBAA1B1P,KAAKuG,QAAQod,UACf7mB,EAAAA,QAAE6E,GAAQ0I,SAhIiB,mBAmI7BrK,KAAK+jB,QAAU,IAAInB,GAAO8B,EAAkB1kB,KAAKgkB,MAAOhkB,KAAK2kB,oBAO3D,iBAAkBzoB,SAASgD,iBACuB,IAAlDpC,EAAAA,QAAE6E,GAAQC,QA7HU,eA6HmBgD,QACzC9H,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWzH,GAAG,YAAa,KAAM7F,EAAAA,QAAE8nB,MAGtD5kB,KAAKkB,SAAS2C,QACd7D,KAAKkB,SAAS6C,aAAa,iBAAiB,GAE5CjH,EAAAA,QAAEkD,KAAKgkB,OAAOhgB,YAAYuH,IAC1BzO,EAAAA,QAAE6E,GACCqC,YAAYuH,IACZ/N,QAAQV,EAAAA,QAAEgF,MAhJA,oBAgJmB6H,SAGlCgD,KAAA,WACE,IAAI3M,KAAKkB,SAASkjB,WAAYtnB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASohB,KAAyBtmB,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASuJ,IAAxG,CAIA,IAAM5B,EAAgB,CACpBA,cAAe3J,KAAKkB,UAEhB2jB,EAAY/nB,EAAAA,QAAEgF,MAAMwhB,GAAY3Z,GAChChI,EAASmiB,EAASW,sBAAsBzkB,KAAKkB,UAEnDpE,EAAAA,QAAE6E,GAAQnE,QAAQqnB,GAEdA,EAAUtjB,uBAIVvB,KAAK+jB,SACP/jB,KAAK+jB,QAAQhJ,UAGfje,EAAAA,QAAEkD,KAAKgkB,OAAOhgB,YAAYuH,IAC1BzO,EAAAA,QAAE6E,GACCqC,YAAYuH,IACZ/N,QAAQV,EAAAA,QAAEgF,MAAMyhB,GAAc5Z,SAGnClI,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5BjE,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAtMN,gBAuMXjI,KAAKkB,SAAW,KAChBlB,KAAKgkB,MAAQ,KACQ,OAAjBhkB,KAAK+jB,UACP/jB,KAAK+jB,QAAQhJ,UACb/a,KAAK+jB,QAAU,SAInBtK,OAAA,WACEzZ,KAAKkkB,UAAYlkB,KAAKmkB,gBACD,OAAjBnkB,KAAK+jB,SACP/jB,KAAK+jB,QAAQ9H,oBAKjBjV,mBAAA,WAAqB,IAAAjH,EAAAC,KACnBlD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjMJ,qBAiMoB,SAAAvC,GAC/BA,EAAMsC,iBACNtC,EAAM0kB,kBACN/kB,EAAKqD,eAIToD,WAAA,SAAWxI,GAaT,OAZAA,EAAMkK,EAAA,GACDlI,KAAK+kB,YAAY5f,QACjBrI,EAAAA,QAAEkD,KAAKkB,UAAUqB,OACjBvE,GAGLnC,EAAKiC,gBACHgH,GACA9G,EACAgC,KAAK+kB,YAAYrf,aAGZ1H,KAGTimB,gBAAA,WACE,IAAKjkB,KAAKgkB,MAAO,CACf,IAAMriB,EAASmiB,EAASW,sBAAsBzkB,KAAKkB,UAE/CS,IACF3B,KAAKgkB,MAAQriB,EAAOjF,cAAcgnB,KAItC,OAAO1jB,KAAKgkB,SAGdgB,cAAA,WACE,IAAMC,EAAkBnoB,EAAAA,QAAEkD,KAAKkB,SAAS3B,YACpCiX,EAzNiB,eAwOrB,OAZIyO,EAAgBjjB,SAnPE,UAoPpBwU,EAAY1Z,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASqhB,IA9NhB,UADH,YAkOP4B,EAAgBjjB,SAtPF,aAuPvBwU,EA/NkB,cAgOTyO,EAAgBjjB,SAvPH,YAwPtBwU,EAhOiB,aAiOR1Z,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASqhB,MAChC7M,EApOsB,cAuOjBA,KAGT2N,cAAA,WACE,OAAOrnB,EAAAA,QAAEkD,KAAKkB,UAAUU,QAAQ,WAAWgD,OAAS,KAGtDsgB,WAAA,WAAa,IAAA5c,EAAAtI,KACLwV,EAAS,GAef,MAbmC,mBAAxBxV,KAAKuG,QAAQiP,OACtBA,EAAO7V,GAAK,SAAA4C,GAMV,OALAA,EAAK0R,QAAL/L,EAAA,GACK3F,EAAK0R,QACL3L,EAAK/B,QAAQiP,OAAOjT,EAAK0R,QAAS3L,EAAKpH,WAGrCqB,GAGTiT,EAAOA,OAASxV,KAAKuG,QAAQiP,OAGxBA,KAGTmP,iBAAA,WACE,IAAMd,EAAe,CACnBrN,UAAWxW,KAAKglB,gBAChBhM,UAAW,CACTxD,OAAQxV,KAAKklB,aACblL,KAAM,CACJR,QAASxZ,KAAKuG,QAAQyT,MAExB6E,gBAAiB,CACf7I,kBAAmBhW,KAAKuG,QAAQod,YAYtC,MAN6B,WAAzB3jB,KAAKuG,QAAQqd,UACfC,EAAa7K,UAAUyJ,WAAa,CAClCjJ,SAAS,IAIbtR,EAAA,GACK2b,EACA7jB,KAAKuG,QAAQsd,iBAKbzhB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAQxB,GALKwB,IACHA,EAAO,IAAIuhB,EAAS9jB,KAHY,iBAAXhC,EAAsBA,EAAS,MAIpDlB,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,YAKJsmB,YAAP,SAAmBlkB,GACjB,IAAIA,GA/UyB,IA+UfA,EAAM+I,QACH,UAAf/I,EAAMoD,MAnVQ,IAmVYpD,EAAM+I,OAMlC,IAFA,IAAMgc,EAAU,GAAG3gB,MAAMlG,KAAKpC,SAASuI,iBAAiBmH,KAE/ClH,EAAI,EAAGC,EAAMwgB,EAAQvgB,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAM/C,EAASmiB,EAASW,sBAAsBU,EAAQzgB,IAChD0gB,EAAUtoB,EAAAA,QAAEqoB,EAAQzgB,IAAInC,KAAKxB,IAC7B4I,EAAgB,CACpBA,cAAewb,EAAQzgB,IAOzB,GAJItE,GAAwB,UAAfA,EAAMoD,OACjBmG,EAAc0b,WAAajlB,GAGxBglB,EAAL,CAIA,IAAME,EAAeF,EAAQpB,MAC7B,GAAKlnB,EAAAA,QAAE6E,GAAQK,SAASuJ,OAIpBnL,IAAyB,UAAfA,EAAMoD,MAChB,kBAAkB1E,KAAKsB,EAAMK,OAAO4D,UAA2B,UAAfjE,EAAMoD,MA9W5C,IA8WgEpD,EAAM+I,QAChFrM,EAAAA,QAAE6G,SAAShC,EAAQvB,EAAMK,SAF7B,CAMA,IAAMokB,EAAY/nB,EAAAA,QAAEgF,MAAMwhB,GAAY3Z,GACtC7M,EAAAA,QAAE6E,GAAQnE,QAAQqnB,GACdA,EAAUtjB,uBAMV,iBAAkBrF,SAASgD,iBAC7BpC,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWnC,IAAI,YAAa,KAAMnL,EAAAA,QAAE8nB,MAGvDO,EAAQzgB,GAAGX,aAAa,gBAAiB,SAErCqhB,EAAQrB,SACVqB,EAAQrB,QAAQhJ,UAGlBje,EAAAA,QAAEwoB,GAAcvjB,YAAYwJ,IAC5BzO,EAAAA,QAAE6E,GACCI,YAAYwJ,IACZ/N,QAAQV,EAAAA,QAAEgF,MAAMyhB,GAAc5Z,WAI9B8a,sBAAP,SAA6BpoB,GAC3B,IAAIsF,EACErF,EAAWT,EAAKO,uBAAuBC,GAM7C,OAJIC,IACFqF,EAASzF,SAASQ,cAAcJ,IAG3BqF,GAAUtF,EAAQkD,cAIpBgmB,uBAAP,SAA8BnlB,GAQ5B,KAAI,kBAAkBtB,KAAKsB,EAAMK,OAAO4D,SAjatB,KAkahBjE,EAAM+I,OAnaW,KAmagB/I,EAAM+I,QA/ZlB,KAgapB/I,EAAM+I,OAjaY,KAiaoB/I,EAAM+I,OAC3CrM,EAAAA,QAAEsD,EAAMK,QAAQmB,QAAQ8hB,IAAe9e,SAAWse,GAAepkB,KAAKsB,EAAM+I,UAI5EnJ,KAAKokB,WAAYtnB,EAAAA,QAAEkD,MAAMgC,SAASohB,IAAtC,CAIA,IAAMzhB,EAASmiB,EAASW,sBAAsBzkB,MACxCqkB,EAAWvnB,EAAAA,QAAE6E,GAAQK,SAASuJ,IAEpC,GAAK8Y,GAhbc,KAgbFjkB,EAAM+I,MAAvB,CAOA,GAHA/I,EAAMsC,iBACNtC,EAAM0kB,mBAEDT,GAvbc,KAubDjkB,EAAM+I,OAtbN,KAsbkC/I,EAAM+I,MAMxD,OA7biB,KAwbb/I,EAAM+I,OACRrM,EAAAA,QAAE6E,EAAOjF,cAAckP,KAAuBpO,QAAQ,cAGxDV,EAAAA,QAAEkD,MAAMxC,QAAQ,SAIlB,IAAMgoB,EAAQ,GAAGhhB,MAAMlG,KAAKqD,EAAO8C,iBAnaR,gEAoaxB2H,QAAO,SAAAqZ,GAAI,OAAI3oB,EAAAA,QAAE2oB,GAAM/kB,GAAG,eAE7B,GAAqB,IAAjB8kB,EAAM5gB,OAAV,CAIA,IAAIiD,EAAQ2d,EAAMpc,QAAQhJ,EAAMK,QApcX,KAscjBL,EAAM+I,OAA8BtB,EAAQ,GAC9CA,IAtcqB,KAycnBzH,EAAM+I,OAAgCtB,EAAQ2d,EAAM5gB,OAAS,GAC/DiD,IAGEA,EAAQ,IACVA,EAAQ,GAGV2d,EAAM3d,GAAOhE,yCA7Yf,WACE,MA9EY,6BAiFd,WACE,OAAOsB,4BAGT,WACE,OAAOO,SArBLoe,GAiaNhnB,EAAAA,QAAEZ,UACCyG,GAAG8gB,GAAwB7X,GAAsBkY,GAASyB,wBAC1D5iB,GAAG8gB,GAAwBC,GAAeI,GAASyB,wBACnD5iB,GAAM6gB,GAAAA,8BAAgDM,GAASQ,aAC/D3hB,GAAG6gB,GAAsB5X,IAAsB,SAAUxL,GACxDA,EAAMsC,iBACNtC,EAAM0kB,kBACNhB,GAAS1hB,iBAAiB9D,KAAKxB,EAAAA,QAAEkD,MAAO,aAEzC2C,GAAG6gB,GA5csB,kBA4cqB,SAAAva,GAC7CA,EAAE6b,qBAONhoB,EAAAA,QAAE6C,GAAGmF,IAAQgf,GAAS1hB,iBACtBtF,EAAAA,QAAE6C,GAAGmF,IAAMlC,YAAckhB,GACzBhnB,EAAAA,QAAE6C,GAAGmF,IAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,IAAQ9D,GACN8iB,GAAS1hB,kBCzflB,IAEMrB,GAAW,WAGXC,GAAqBlE,EAAAA,QAAE6C,GAAF,MAMrB+lB,GAAkB,aAClBC,GAAkB,OAClBpa,GAAkB,OAClBqa,GAAoB,eAIpBrC,GAAY,kBACZsC,GAAU,gBAEVC,GAAa,mBACbC,GAAY,kBACZC,GAAmB,yBACnBC,GAAqB,2BAErBC,GAAuB,6BAOvBC,GAAyB,oDAGzBhhB,GAAU,CACdihB,UAAU,EACV/gB,UAAU,EACVxB,OAAO,EACP+I,MAAM,GAGFlH,GAAc,CAClB0gB,SAAU,mBACV/gB,SAAU,UACVxB,MAAO,UACP+I,KAAM,WAOFyZ,GAAAA,WACJ,SAAAA,EAAYhqB,EAAS2B,GACnBgC,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKkB,SAAW7E,EAChB2D,KAAKsmB,QAAUjqB,EAAQK,cA7BH,iBA8BpBsD,KAAKumB,UAAY,KACjBvmB,KAAKwmB,UAAW,EAChBxmB,KAAKymB,oBAAqB,EAC1BzmB,KAAK0mB,sBAAuB,EAC5B1mB,KAAK8L,kBAAmB,EACxB9L,KAAK2mB,gBAAkB,6BAazBvjB,OAAA,SAAOuG,GACL,OAAO3J,KAAKwmB,SAAWxmB,KAAK2M,OAAS3M,KAAK4M,KAAKjD,MAGjDiD,KAAA,SAAKjD,GAAe,IAAA5J,EAAAC,KAClB,IAAIA,KAAKwmB,WAAYxmB,KAAK8L,iBAA1B,CAIA,IAAM0Y,EAAY1nB,EAAAA,QAAEgF,MAAM+jB,GAAY,CACpClc,cAAAA,IAGF7M,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgnB,GAErBA,EAAUjjB,uBAIdvB,KAAKwmB,UAAW,EAEZ1pB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,MAC5B3lB,KAAK8L,kBAAmB,GAG1B9L,KAAK4mB,kBACL5mB,KAAK6mB,gBAEL7mB,KAAK8mB,gBAEL9mB,KAAK+mB,kBACL/mB,KAAKgnB,kBAELlqB,EAAAA,QAAEkD,KAAKkB,UAAUyB,GACfqjB,GA/EwB,0BAiFxB,SAAA5lB,GAAK,OAAIL,EAAK4M,KAAKvM,MAGrBtD,EAAAA,QAAEkD,KAAKsmB,SAAS3jB,GAAGujB,IAAyB,WAC1CppB,EAAAA,QAAEiD,EAAKmB,UAAUhB,IA5FI,4BA4FuB,SAAAE,GACtCtD,EAAAA,QAAEsD,EAAMK,QAAQC,GAAGX,EAAKmB,YAC1BnB,EAAK2mB,sBAAuB,SAKlC1mB,KAAKinB,eAAc,WAAA,OAAMlnB,EAAKmnB,aAAavd,WAG7CgD,KAAA,SAAKvM,GAAO,IAAAkI,EAAAtI,KAKV,GAJII,GACFA,EAAMsC,iBAGH1C,KAAKwmB,WAAYxmB,KAAK8L,iBAA3B,CAIA,IAAM+Y,EAAY/nB,EAAAA,QAAEgF,MAxHR,iBA4HZ,GAFAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQqnB,GAEpB7kB,KAAKwmB,WAAY3B,EAAUtjB,qBAAhC,CAIAvB,KAAKwmB,UAAW,EAChB,IAAMW,EAAarqB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IAgB7C,GAdIwB,IACFnnB,KAAK8L,kBAAmB,GAG1B9L,KAAK+mB,kBACL/mB,KAAKgnB,kBAELlqB,EAAAA,QAAEZ,UAAU+L,IAAI6d,IAEhBhpB,EAAAA,QAAEkD,KAAKkB,UAAUa,YAAYwJ,IAE7BzO,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAI+d,IACrBlpB,EAAAA,QAAEkD,KAAKsmB,SAASre,IAAIie,IAEhBiB,EAAY,CACd,IAAMtqB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,gBAAgB,SAAAwE,GAAK,OAAIkI,EAAK8e,WAAWhnB,MAClDP,qBAAqBhD,QAExBmD,KAAKonB,kBAIT3lB,QAAA,WACE,CAAC6C,OAAQtE,KAAKkB,SAAUlB,KAAKsmB,SAC1BjN,SAAQ,SAAAgO,GAAW,OAAIvqB,EAAAA,QAAEuqB,GAAapf,IA3K9B,gBAkLXnL,EAAAA,QAAEZ,UAAU+L,IAAI6d,IAEhBhpB,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAE5Bf,KAAKuG,QAAU,KACfvG,KAAKkB,SAAW,KAChBlB,KAAKsmB,QAAU,KACftmB,KAAKumB,UAAY,KACjBvmB,KAAKwmB,SAAW,KAChBxmB,KAAKymB,mBAAqB,KAC1BzmB,KAAK0mB,qBAAuB,KAC5B1mB,KAAK8L,iBAAmB,KACxB9L,KAAK2mB,gBAAkB,QAGzBW,aAAA,WACEtnB,KAAK8mB,mBAIPtgB,WAAA,SAAWxI,GAMT,OALAA,EAAMkK,EAAA,GACD/C,GACAnH,GAELnC,EAAKiC,gBA9MI,QA8MkBE,EAAQ0H,IAC5B1H,KAGTupB,2BAAA,WAA6B,IAAA9e,EAAAzI,KACrBwnB,EAAqB1qB,EAAAA,QAAEgF,MAlMP,0BAqMtB,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgqB,IACrBA,EAAmBjmB,qBAAvB,CAIA,IAAMkmB,EAAqBznB,KAAKkB,SAASwmB,aAAexrB,SAASgD,gBAAgBmV,aAE5EoT,IACHznB,KAAKkB,SAASiM,MAAMqC,UAAY,UAGlCxP,KAAKkB,SAASwC,UAAUmB,IAAI+gB,IAE5B,IAAM+B,EAA0B9rB,EAAKe,iCAAiCoD,KAAKsmB,SAC3ExpB,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAIpM,EAAKD,gBAE1BkB,EAAAA,QAAEkD,KAAKkB,UAAUhB,IAAIrE,EAAKD,gBAAgB,WACxC6M,EAAKvH,SAASwC,UAAUvB,OAAOyjB,IAC1B6B,GACH3qB,EAAAA,QAAE2L,EAAKvH,UAAUhB,IAAIrE,EAAKD,gBAAgB,WACxC6M,EAAKvH,SAASiM,MAAMqC,UAAY,MAE/B3P,qBAAqB4I,EAAKvH,SAAUymB,MAGxC9nB,qBAAqB8nB,GACxB3nB,KAAKkB,SAAS2C,YAGhBqjB,aAAA,SAAavd,GAAe,IAAAgB,EAAA3K,KACpBmnB,EAAarqB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IACvCiC,EAAY5nB,KAAKsmB,QAAUtmB,KAAKsmB,QAAQ5pB,cAtNtB,eAsN2D,KAE9EsD,KAAKkB,SAAS3B,YACfS,KAAKkB,SAAS3B,WAAW1B,WAAa+S,KAAKiX,cAE7C3rB,SAASkT,KAAK0Y,YAAY9nB,KAAKkB,UAGjClB,KAAKkB,SAASiM,MAAMyW,QAAU,QAC9B5jB,KAAKkB,SAAS8Z,gBAAgB,eAC9Bhb,KAAKkB,SAAS6C,aAAa,cAAc,GACzC/D,KAAKkB,SAAS6C,aAAa,OAAQ,UAE/BjH,EAAAA,QAAEkD,KAAKsmB,SAAStkB,SAzPM,4BAyP6B4lB,EACrDA,EAAU9V,UAAY,EAEtB9R,KAAKkB,SAAS4Q,UAAY,EAGxBqV,GACFtrB,EAAKwB,OAAO2C,KAAKkB,UAGnBpE,EAAAA,QAAEkD,KAAKkB,UAAUmJ,SAASkB,IAEtBvL,KAAKuG,QAAQ1C,OACf7D,KAAK+nB,gBAGP,IAAMC,EAAalrB,EAAAA,QAAEgF,MA7PR,iBA6P2B,CACtC6H,cAAAA,IAGIse,EAAqB,WACrBtd,EAAKpE,QAAQ1C,OACf8G,EAAKzJ,SAAS2C,QAGhB8G,EAAKmB,kBAAmB,EACxBhP,EAAAA,QAAE6N,EAAKzJ,UAAU1D,QAAQwqB,IAG3B,GAAIb,EAAY,CACd,IAAMtqB,EAAqBhB,EAAKe,iCAAiCoD,KAAKsmB,SAEtExpB,EAAAA,QAAEkD,KAAKsmB,SACJpmB,IAAIrE,EAAKD,eAAgBqsB,GACzBpoB,qBAAqBhD,QAExBorB,OAIJF,cAAA,WAAgB,IAAAG,EAAAloB,KACdlD,EAAAA,QAAEZ,UACC+L,IAAI6d,IACJnjB,GAAGmjB,IAAe,SAAA1lB,GACblE,WAAakE,EAAMK,QACnBynB,EAAKhnB,WAAad,EAAMK,QACsB,IAA9C3D,EAAAA,QAAEorB,EAAKhnB,UAAUinB,IAAI/nB,EAAMK,QAAQmE,QACrCsjB,EAAKhnB,SAAS2C,cAKtBkjB,gBAAA,WAAkB,IAAAqB,EAAApoB,KACZA,KAAKwmB,SACP1pB,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAAGsjB,IAAuB,SAAA7lB,GACrCgoB,EAAK7hB,QAAQlB,UAlTF,KAkTcjF,EAAM+I,OACjC/I,EAAMsC,iBACN0lB,EAAKzb,QACKyb,EAAK7hB,QAAQlB,UArTV,KAqTsBjF,EAAM+I,OACzCif,EAAKb,gCAGCvnB,KAAKwmB,UACf1pB,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAIge,OAIzBe,gBAAA,WAAkB,IAAAqB,EAAAroB,KACZA,KAAKwmB,SACP1pB,EAAAA,QAAEwH,QAAQ3B,GAAGojB,IAAc,SAAA3lB,GAAK,OAAIioB,EAAKf,aAAalnB,MAEtDtD,EAAAA,QAAEwH,QAAQ2D,IAAI8d,OAIlBqB,WAAA,WAAa,IAAAkB,EAAAtoB,KACXA,KAAKkB,SAASiM,MAAMyW,QAAU,OAC9B5jB,KAAKkB,SAAS6C,aAAa,eAAe,GAC1C/D,KAAKkB,SAAS8Z,gBAAgB,cAC9Bhb,KAAKkB,SAAS8Z,gBAAgB,QAC9Bhb,KAAK8L,kBAAmB,EACxB9L,KAAKinB,eAAc,WACjBnqB,EAAAA,QAAEZ,SAASkT,MAAMrN,YAAY2jB,IAC7B4C,EAAKC,oBACLD,EAAKE,kBACL1rB,EAAAA,QAAEwrB,EAAKpnB,UAAU1D,QAAQ+lB,UAI7BkF,gBAAA,WACMzoB,KAAKumB,YACPzpB,EAAAA,QAAEkD,KAAKumB,WAAWpkB,SAClBnC,KAAKumB,UAAY,SAIrBU,cAAA,SAAc1L,GAAU,IAAAmN,EAAA1oB,KAChB2oB,EAAU7rB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IACxCA,GAAkB,GAEpB,GAAI3lB,KAAKwmB,UAAYxmB,KAAKuG,QAAQ6f,SAAU,CAiC1C,GAhCApmB,KAAKumB,UAAYrqB,SAAS0sB,cAAc,OACxC5oB,KAAKumB,UAAUsC,UA7VO,iBA+VlBF,GACF3oB,KAAKumB,UAAU7iB,UAAUmB,IAAI8jB,GAG/B7rB,EAAAA,QAAEkD,KAAKumB,WAAWuC,SAAS5sB,SAASkT,MAEpCtS,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAAGqjB,IAAqB,SAAA5lB,GACnCsoB,EAAKhC,qBACPgC,EAAKhC,sBAAuB,EAI1BtmB,EAAMK,SAAWL,EAAMyN,gBAIG,WAA1B6a,EAAKniB,QAAQ6f,SACfsC,EAAKnB,6BAELmB,EAAK/b,WAILgc,GACF9sB,EAAKwB,OAAO2C,KAAKumB,WAGnBzpB,EAAAA,QAAEkD,KAAKumB,WAAWlc,SAASkB,KAEtBgQ,EACH,OAGF,IAAKoN,EAEH,YADApN,IAIF,IAAMwN,EAA6BltB,EAAKe,iCAAiCoD,KAAKumB,WAE9EzpB,EAAAA,QAAEkD,KAAKumB,WACJrmB,IAAIrE,EAAKD,eAAgB2f,GACzB1b,qBAAqBkpB,QACnB,IAAK/oB,KAAKwmB,UAAYxmB,KAAKumB,UAAW,CAC3CzpB,EAAAA,QAAEkD,KAAKumB,WAAWxkB,YAAYwJ,IAE9B,IAAMyd,EAAiB,WACrBN,EAAKD,kBACDlN,GACFA,KAIJ,GAAIze,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IAAkB,CAC9C,IAAMoD,EAA6BltB,EAAKe,iCAAiCoD,KAAKumB,WAE9EzpB,EAAAA,QAAEkD,KAAKumB,WACJrmB,IAAIrE,EAAKD,eAAgBotB,GACzBnpB,qBAAqBkpB,QAExBC,SAEOzN,GACTA,OASJuL,cAAA,WACE,IAAMW,EAAqBznB,KAAKkB,SAASwmB,aAAexrB,SAASgD,gBAAgBmV,cAE5ErU,KAAKymB,oBAAsBgB,IAC9BznB,KAAKkB,SAASiM,MAAM8b,YAAiBjpB,KAAK2mB,gBAA1C,MAGE3mB,KAAKymB,qBAAuBgB,IAC9BznB,KAAKkB,SAASiM,MAAM+b,aAAkBlpB,KAAK2mB,gBAA3C,SAIJ4B,kBAAA,WACEvoB,KAAKkB,SAASiM,MAAM8b,YAAc,GAClCjpB,KAAKkB,SAASiM,MAAM+b,aAAe,MAGrCtC,gBAAA,WACE,IAAMhV,EAAO1V,SAASkT,KAAK7B,wBAC3BvN,KAAKymB,mBAAqBzqB,KAAKmkB,MAAMvO,EAAKO,KAAOP,EAAKQ,OAAS9N,OAAOgR,WACtEtV,KAAK2mB,gBAAkB3mB,KAAKmpB,wBAG9BtC,cAAA,WAAgB,IAAAuC,EAAAppB,KACd,GAAIA,KAAKymB,mBAAoB,CAG3B,IAAM4C,EAAe,GAAG7kB,MAAMlG,KAAKpC,SAASuI,iBAAiB0hB,KACvDmD,EAAgB,GAAG9kB,MAAMlG,KAAKpC,SAASuI,iBA3anB,gBA8a1B3H,EAAAA,QAAEusB,GAAchnB,MAAK,SAACwF,EAAOxL,GAC3B,IAAMktB,EAAgBltB,EAAQ8Q,MAAM+b,aAC9BM,EAAoB1sB,EAAAA,QAAET,GAASU,IAAI,iBACzCD,EAAAA,QAAET,GACCkG,KAAK,gBAAiBgnB,GACtBxsB,IAAI,gBAAoBG,WAAWssB,GAAqBJ,EAAKzC,gBAFhE,SAMF7pB,EAAAA,QAAEwsB,GAAejnB,MAAK,SAACwF,EAAOxL,GAC5B,IAAMotB,EAAeptB,EAAQ8Q,MAAM0K,YAC7B6R,EAAmB5sB,EAAAA,QAAET,GAASU,IAAI,gBACxCD,EAAAA,QAAET,GACCkG,KAAK,eAAgBknB,GACrB1sB,IAAI,eAAmBG,WAAWwsB,GAAoBN,EAAKzC,gBAF9D,SAMF,IAAM4C,EAAgBrtB,SAASkT,KAAKjC,MAAM+b,aACpCM,EAAoB1sB,EAAAA,QAAEZ,SAASkT,MAAMrS,IAAI,iBAC/CD,EAAAA,QAAEZ,SAASkT,MACR7M,KAAK,gBAAiBgnB,GACtBxsB,IAAI,gBAAoBG,WAAWssB,GAAqBxpB,KAAK2mB,gBAFhE,MAKF7pB,EAAAA,QAAEZ,SAASkT,MAAM/E,SAASqb,OAG5B8C,gBAAA,WAEE,IAAMa,EAAe,GAAG7kB,MAAMlG,KAAKpC,SAASuI,iBAAiB0hB,KAC7DrpB,EAAAA,QAAEusB,GAAchnB,MAAK,SAACwF,EAAOxL,GAC3B,IAAM0Z,EAAUjZ,EAAAA,QAAET,GAASkG,KAAK,iBAChCzF,EAAAA,QAAET,GAASqF,WAAW,iBACtBrF,EAAQ8Q,MAAM+b,aAAenT,GAAoB,MAInD,IAAM4T,EAAW,GAAGnlB,MAAMlG,KAAKpC,SAASuI,iBAAT,gBAC/B3H,EAAAA,QAAE6sB,GAAUtnB,MAAK,SAACwF,EAAOxL,GACvB,IAAMutB,EAAS9sB,EAAAA,QAAET,GAASkG,KAAK,gBACT,oBAAXqnB,GACT9sB,EAAAA,QAAET,GAASU,IAAI,eAAgB6sB,GAAQloB,WAAW,mBAKtD,IAAMqU,EAAUjZ,EAAAA,QAAEZ,SAASkT,MAAM7M,KAAK,iBACtCzF,EAAAA,QAAEZ,SAASkT,MAAM1N,WAAW,iBAC5BxF,SAASkT,KAAKjC,MAAM+b,aAAenT,GAAoB,MAGzDoT,mBAAA,WACE,IAAMU,EAAY3tB,SAAS0sB,cAAc,OACzCiB,EAAUhB,UA7fwB,0BA8flC3sB,SAASkT,KAAK0Y,YAAY+B,GAC1B,IAAMC,EAAiBD,EAAUtc,wBAAwBwF,MAAQ8W,EAAUzV,YAE3E,OADAlY,SAASkT,KAAKgM,YAAYyO,GACnBC,KAIF1nB,iBAAP,SAAwBpE,EAAQ2L,GAC9B,OAAO3J,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAClBwF,EAAO2B,EAAA,GACR/C,GACArI,EAAAA,QAAEkD,MAAMuC,OACW,iBAAXvE,GAAuBA,EAASA,EAAS,IAQtD,GALKuE,IACHA,EAAO,IAAI8jB,EAAMrmB,KAAMuG,GACvBzJ,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,GAAQ2L,QACJpD,EAAQqG,MACjBrK,EAAKqK,KAAKjD,oCA/dhB,WACE,MApEY,6BAuEd,WACE,OAAOxE,SAnBLkhB,GAufNvpB,EAAAA,QAAEZ,UAAUyG,GAlhBc,0BAIG,yBA8gB8B,SAAUvC,GAAO,IACtEK,EADsEspB,EAAA/pB,KAEpE1D,EAAWT,EAAKO,uBAAuB4D,MAEzC1D,IACFmE,EAASvE,SAASQ,cAAcJ,IAGlC,IAAM0B,EAASlB,EAAAA,QAAE2D,GAAQ8B,KAAKxB,IAC5B,SADamH,EAAA,GAERpL,EAAAA,QAAE2D,GAAQ8B,OACVzF,EAAAA,QAAEkD,MAAMuC,QAGM,MAAjBvC,KAAKqE,SAAoC,SAAjBrE,KAAKqE,SAC/BjE,EAAMsC,iBAGR,IAAMsL,EAAUlR,EAAAA,QAAE2D,GAAQP,IAAI2lB,IAAY,SAAArB,GACpCA,EAAUjjB,sBAKdyM,EAAQ9N,IAAIqjB,IAAc,WACpBzmB,EAAAA,QAAEitB,GAAMrpB,GAAG,aACbqpB,EAAKlmB,cAKXwiB,GAAMjkB,iBAAiB9D,KAAKxB,EAAAA,QAAE2D,GAASzC,EAAQgC,SAOjDlD,EAAAA,QAAE6C,GAAF,MAAa0mB,GAAMjkB,iBACnBtF,EAAAA,QAAE6C,GAAF,MAAWiD,YAAcyjB,GACzBvpB,EAAAA,QAAE6C,GAAF,MAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,MAAaqB,GACNqlB,GAAMjkB,kBC9lBf,IAAM4nB,GAAW,CACf,aACA,OACA,OACA,WACA,WACA,SACA,MACA,cA4CIC,GAAmB,iEAOnBC,GAAmB,qIAyBlB,SAASC,GAAaC,EAAYC,EAAWC,GAClD,GAA0B,IAAtBF,EAAWxlB,OACb,OAAOwlB,EAGT,GAAIE,GAAoC,mBAAfA,EACvB,OAAOA,EAAWF,GAQpB,IALA,IACMG,GADY,IAAIjmB,OAAOkmB,WACKC,gBAAgBL,EAAY,aACxDM,EAAgBvsB,OAAOyY,KAAKyT,GAC5BV,EAAW,GAAGnlB,MAAMlG,KAAKisB,EAAgBnb,KAAK3K,iBAAiB,MAZPkmB,EAAA,SAcrDjmB,EAAOC,GACd,IAAMiR,EAAK+T,EAASjlB,GACdkmB,EAAShV,EAAG3G,SAASrQ,cAE3B,IAA0D,IAAtD8rB,EAActhB,QAAQwM,EAAG3G,SAASrQ,eAGpC,OAFAgX,EAAGrW,WAAW6b,YAAYxF,GAE1B,WAGF,IAAMiV,EAAgB,GAAGrmB,MAAMlG,KAAKsX,EAAGgE,YAEjCkR,EAAwB,GAAGxN,OAAO+M,EAAU,MAAQ,GAAIA,EAAUO,IAAW,IAEnFC,EAAcxR,SAAQ,SAAAjM,IAnD1B,SAA0BA,EAAM2d,GAC9B,IAAMC,EAAW5d,EAAK6B,SAASrQ,cAE/B,IAAgD,IAA5CmsB,EAAqB3hB,QAAQ4hB,GAC/B,OAAoC,IAAhChB,GAAS5gB,QAAQ4hB,IACZttB,QAAQusB,GAAiBnrB,KAAKsO,EAAK6d,YAAcf,GAAiBprB,KAAKsO,EAAK6d,YASvF,IAHA,IAAMC,EAASH,EAAqB3e,QAAO,SAAA+e,GAAS,OAAIA,aAAqBtsB,UAGpE6F,EAAI,EAAGC,EAAMumB,EAAOtmB,OAAQF,EAAIC,EAAKD,IAC5C,GAAIwmB,EAAOxmB,GAAG5F,KAAKksB,GACjB,OAAO,EAIX,OAAO,GAgCEI,CAAiBhe,EAAM0d,IAC1BlV,EAAGoF,gBAAgB5N,EAAK6B,cAhBrBvK,EAAI,EAAGC,EAAMglB,EAAS/kB,OAAQF,EAAIC,EAAKD,IAAKimB,EAA5CjmB,GAqBT,OAAO6lB,EAAgBnb,KAAKic,UC9G9B,IAAMvmB,GAAO,UAEP/D,GAAW,aAEXC,GAAqBlE,EAAAA,QAAE6C,GAAF,QAErB2rB,GAAqB,IAAIzsB,OAAJ,wBAAyC,KAC9D0sB,GAAwB,CAAC,WAAY,YAAa,cAElD5F,GAAkB,OAClBpa,GAAkB,OAElBigB,GAAmB,OACnBC,GAAkB,MAKlBC,GAAgB,QAChBC,GAAgB,QAIhBC,GAAgB,CACpBC,KAAM,OACNC,IAAK,MACLC,MAAO,QACPC,OAAQ,SACRC,KAAM,QAGF9mB,GAAU,CACd+mB,WAAW,EACXC,SAAU,uGAGV3uB,QAAS,cACT4uB,MAAO,GACPC,MAAO,EACP5a,MAAM,EACNnV,UAAU,EACVka,UAAW,MACXhB,OAAQ,EACR8W,WAAW,EACXC,kBAAmB,OACnB5I,SAAU,eACV6I,YAAa,GACbC,UAAU,EACVnC,WAAY,KACZD,UD7C8B,CAE9B,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAJP,kBAK7BrT,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC/BF,KAAM,GACNG,EAAG,GACHyV,GAAI,GACJC,IAAK,GACLC,KAAM,GACNC,IAAK,GACLC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJ3oB,EAAG,GACH4oB,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChDC,GAAI,GACJC,GAAI,GACJC,EAAG,GACHC,IAAK,GACLC,EAAG,GACHC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,OAAQ,GACRC,EAAG,GACHC,GAAI,ICeJrK,aAAc,MAGVne,GAAc,CAClBwmB,UAAW,UACXC,SAAU,SACVC,MAAO,4BACP5uB,QAAS,SACT6uB,MAAO,kBACP5a,KAAM,UACNnV,SAAU,mBACVka,UAAW,oBACXhB,OAAQ,2BACR8W,UAAW,2BACXC,kBAAmB,iBACnB5I,SAAU,mBACV6I,YAAa,oBACbC,SAAU,UACVnC,WAAY,kBACZD,UAAW,SACXxG,aAAc,iBAGV/hB,GAAQ,CACZqsB,KAAI,kBACJC,OAAM,oBACNC,KAAI,kBACJC,MAAK,mBACLC,SAAQ,sBACRC,MAAK,mBACLC,QAAO,qBACPC,SAAQ,sBACRC,WAAU,wBACVC,WAAU,yBAONC,GAAAA,WACJ,SAAAA,EAAYxyB,EAAS2B,GACnB,GAAsB,oBAAX4kB,GACT,MAAM,IAAInjB,UAAU,+DAItBO,KAAK8uB,YAAa,EAClB9uB,KAAK+uB,SAAW,EAChB/uB,KAAKgvB,YAAc,GACnBhvB,KAAKivB,eAAiB,GACtBjvB,KAAK+jB,QAAU,KAGf/jB,KAAK3D,QAAUA,EACf2D,KAAKhC,OAASgC,KAAKwG,WAAWxI,GAC9BgC,KAAKkvB,IAAM,KAEXlvB,KAAKmvB,2CAiCPC,OAAA,WACEpvB,KAAK8uB,YAAa,KAGpBO,QAAA,WACErvB,KAAK8uB,YAAa,KAGpBQ,cAAA,WACEtvB,KAAK8uB,YAAc9uB,KAAK8uB,cAG1B1rB,OAAA,SAAOhD,GACL,GAAKJ,KAAK8uB,WAIV,GAAI1uB,EAAO,CACT,IAAMmvB,EAAUvvB,KAAK+kB,YAAYhkB,SAC7BqkB,EAAUtoB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,GAErCnK,IACHA,EAAU,IAAIplB,KAAK+kB,YACjB3kB,EAAMyN,cACN7N,KAAKwvB,sBAEP1yB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,EAASnK,IAGvCA,EAAQ6J,eAAeQ,OAASrK,EAAQ6J,eAAeQ,MAEnDrK,EAAQsK,uBACVtK,EAAQuK,OAAO,KAAMvK,GAErBA,EAAQwK,OAAO,KAAMxK,OAElB,CACL,GAAItoB,EAAAA,QAAEkD,KAAK6vB,iBAAiB7tB,SAASuJ,IAEnC,YADAvL,KAAK4vB,OAAO,KAAM5vB,MAIpBA,KAAK2vB,OAAO,KAAM3vB,UAItByB,QAAA,WACEuH,aAAahJ,KAAK+uB,UAElBjyB,EAAAA,QAAE4E,WAAW1B,KAAK3D,QAAS2D,KAAK+kB,YAAYhkB,UAE5CjE,EAAAA,QAAEkD,KAAK3D,SAAS4L,IAAIjI,KAAK+kB,YAAY+K,WACrChzB,EAAAA,QAAEkD,KAAK3D,SAASuF,QAAQ,UAAUqG,IAAI,gBAAiBjI,KAAK+vB,mBAExD/vB,KAAKkvB,KACPpyB,EAAAA,QAAEkD,KAAKkvB,KAAK/sB,SAGdnC,KAAK8uB,WAAa,KAClB9uB,KAAK+uB,SAAW,KAChB/uB,KAAKgvB,YAAc,KACnBhvB,KAAKivB,eAAiB,KAClBjvB,KAAK+jB,SACP/jB,KAAK+jB,QAAQhJ,UAGf/a,KAAK+jB,QAAU,KACf/jB,KAAK3D,QAAU,KACf2D,KAAKhC,OAAS,KACdgC,KAAKkvB,IAAM,QAGbtiB,KAAA,WAAO,IAAA7M,EAAAC,KACL,GAAuC,SAAnClD,EAAAA,QAAEkD,KAAK3D,SAASU,IAAI,WACtB,MAAM,IAAIgC,MAAM,uCAGlB,IAAMylB,EAAY1nB,EAAAA,QAAEgF,MAAM9B,KAAK+kB,YAAYjjB,MAAMusB,MACjD,GAAIruB,KAAKgwB,iBAAmBhwB,KAAK8uB,WAAY,CAC3ChyB,EAAAA,QAAEkD,KAAK3D,SAASmB,QAAQgnB,GAExB,IAAMyL,EAAap0B,EAAKoD,eAAee,KAAK3D,SACtC6zB,EAAapzB,EAAAA,QAAE6G,SACJ,OAAfssB,EAAsBA,EAAajwB,KAAK3D,QAAQwS,cAAc3P,gBAC9Dc,KAAK3D,SAGP,GAAImoB,EAAUjjB,uBAAyB2uB,EACrC,OAGF,IAAMhB,EAAMlvB,KAAK6vB,gBACXM,EAAQt0B,EAAKC,OAAOkE,KAAK+kB,YAAYjgB,MAE3CoqB,EAAInrB,aAAa,KAAMosB,GACvBnwB,KAAK3D,QAAQ0H,aAAa,mBAAoBosB,GAE9CnwB,KAAKowB,aAEDpwB,KAAKhC,OAAOkuB,WACdpvB,EAAAA,QAAEoyB,GAAK7kB,SAASsb,IAGlB,IAAMnP,EAA6C,mBAA1BxW,KAAKhC,OAAOwY,UACnCxW,KAAKhC,OAAOwY,UAAUlY,KAAK0B,KAAMkvB,EAAKlvB,KAAK3D,SAC3C2D,KAAKhC,OAAOwY,UAER6Z,EAAarwB,KAAKswB,eAAe9Z,GACvCxW,KAAKuwB,mBAAmBF,GAExB,IAAM/D,EAAYtsB,KAAKwwB,gBACvB1zB,EAAAA,QAAEoyB,GAAK3sB,KAAKvC,KAAK+kB,YAAYhkB,SAAUf,MAElClD,EAAAA,QAAE6G,SAAS3D,KAAK3D,QAAQwS,cAAc3P,gBAAiBc,KAAKkvB,MAC/DpyB,EAAAA,QAAEoyB,GAAKpG,SAASwD,GAGlBxvB,EAAAA,QAAEkD,KAAK3D,SAASmB,QAAQwC,KAAK+kB,YAAYjjB,MAAMysB,UAE/CvuB,KAAK+jB,QAAU,IAAInB,GAAO5iB,KAAK3D,QAAS6yB,EAAKlvB,KAAK2kB,iBAAiB0L,IAEnEvzB,EAAAA,QAAEoyB,GAAK7kB,SAASkB,IAChBzO,EAAAA,QAAEoyB,GAAK7kB,SAASrK,KAAKhC,OAAOwuB,aAMxB,iBAAkBtwB,SAASgD,iBAC7BpC,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWzH,GAAG,YAAa,KAAM7F,EAAAA,QAAE8nB,MAGtD,IAAM6L,EAAW,WACX1wB,EAAK/B,OAAOkuB,WACdnsB,EAAK2wB,iBAGP,IAAMC,EAAiB5wB,EAAKivB,YAC5BjvB,EAAKivB,YAAc,KAEnBlyB,EAAAA,QAAEiD,EAAK1D,SAASmB,QAAQuC,EAAKglB,YAAYjjB,MAAMwsB,OAE3CqC,IAAmBlF,IACrB1rB,EAAK6vB,OAAO,KAAM7vB,IAItB,GAAIjD,EAAAA,QAAEkD,KAAKkvB,KAAKltB,SAAS2jB,IAAkB,CACzC,IAAM9oB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkvB,KAEtEpyB,EAAAA,QAAEkD,KAAKkvB,KACJhvB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,QAKN9jB,KAAA,SAAK4O,GAAU,IAAAjT,EAAAtI,KACPkvB,EAAMlvB,KAAK6vB,gBACXhL,EAAY/nB,EAAAA,QAAEgF,MAAM9B,KAAK+kB,YAAYjjB,MAAMqsB,MAC3CsC,EAAW,WACXnoB,EAAK0mB,cAAgBxD,IAAoB0D,EAAI3vB,YAC/C2vB,EAAI3vB,WAAW6b,YAAY8T,GAG7B5mB,EAAKsoB,iBACLtoB,EAAKjM,QAAQ2e,gBAAgB,oBAC7Ble,EAAAA,QAAEwL,EAAKjM,SAASmB,QAAQ8K,EAAKyc,YAAYjjB,MAAMssB,QAC1B,OAAjB9lB,EAAKyb,SACPzb,EAAKyb,QAAQhJ,UAGXQ,GACFA,KAMJ,GAFAze,EAAAA,QAAEkD,KAAK3D,SAASmB,QAAQqnB,IAEpBA,EAAUtjB,qBAAd,CAgBA,GAZAzE,EAAAA,QAAEoyB,GAAKntB,YAAYwJ,IAIf,iBAAkBrP,SAASgD,iBAC7BpC,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWnC,IAAI,YAAa,KAAMnL,EAAAA,QAAE8nB,MAGvD5kB,KAAKivB,eAAL,OAAqC,EACrCjvB,KAAKivB,eAAL,OAAqC,EACrCjvB,KAAKivB,eAAL,OAAqC,EAEjCnyB,EAAAA,QAAEkD,KAAKkvB,KAAKltB,SAAS2jB,IAAkB,CACzC,IAAM9oB,EAAqBhB,EAAKe,iCAAiCsyB,GAEjEpyB,EAAAA,QAAEoyB,GACChvB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,IAGFzwB,KAAKgvB,YAAc,OAGrBvV,OAAA,WACuB,OAAjBzZ,KAAK+jB,SACP/jB,KAAK+jB,QAAQ9H,oBAKjB+T,cAAA,WACE,OAAOtyB,QAAQsC,KAAK6wB,eAGtBN,mBAAA,SAAmBF,GACjBvzB,EAAAA,QAAEkD,KAAK6vB,iBAAiBxlB,SAAYymB,cAAgBT,MAGtDR,cAAA,WAEE,OADA7vB,KAAKkvB,IAAMlvB,KAAKkvB,KAAOpyB,EAAAA,QAAEkD,KAAKhC,OAAOmuB,UAAU,GACxCnsB,KAAKkvB,OAGdkB,WAAA,WACE,IAAMlB,EAAMlvB,KAAK6vB,gBACjB7vB,KAAK+wB,kBAAkBj0B,EAAAA,QAAEoyB,EAAIzqB,iBAtWF,mBAsW6CzE,KAAK6wB,YAC7E/zB,EAAAA,QAAEoyB,GAAKntB,YAAe4jB,gBAGxBoL,kBAAA,SAAkBzuB,EAAU0uB,GACH,iBAAZA,IAAyBA,EAAQnzB,WAAYmzB,EAAQpxB,OAa5DI,KAAKhC,OAAOyT,MACVzR,KAAKhC,OAAOyuB,WACduE,EAAU7G,GAAa6G,EAAShxB,KAAKhC,OAAOqsB,UAAWrqB,KAAKhC,OAAOssB,aAGrEhoB,EAASmP,KAAKuf,IAEd1uB,EAAS2uB,KAAKD,GAlBVhxB,KAAKhC,OAAOyT,KACT3U,EAAAA,QAAEk0B,GAASrvB,SAASjB,GAAG4B,IAC1BA,EAAS4uB,QAAQC,OAAOH,GAG1B1uB,EAAS2uB,KAAKn0B,EAAAA,QAAEk0B,GAASC,WAiB/BJ,SAAA,WACE,IAAIzE,EAAQpsB,KAAK3D,QAAQE,aAAa,uBAQtC,OANK6vB,IACHA,EAAqC,mBAAtBpsB,KAAKhC,OAAOouB,MACzBpsB,KAAKhC,OAAOouB,MAAM9tB,KAAK0B,KAAK3D,SAC5B2D,KAAKhC,OAAOouB,OAGTA,KAITzH,iBAAA,SAAiB0L,GAAY,IAAA5nB,EAAAzI,KAuB3B,OAAAkI,EAAA,GAtBwB,CACtBsO,UAAW6Z,EACXrX,UAAW,CACTxD,OAAQxV,KAAKklB,aACblL,KAAM,CACJsG,SAAUtgB,KAAKhC,OAAOuuB,mBAExB9M,MAAO,CACLpjB,QAxZa,UA0ZfwiB,gBAAiB,CACf7I,kBAAmBhW,KAAKhC,OAAO2lB,WAGnCtJ,SAAU,SAAA9X,GACJA,EAAK0X,oBAAsB1X,EAAKiU,WAClC/N,EAAK2oB,6BAA6B7uB,IAGtC6X,SAAU,SAAA7X,GAAI,OAAIkG,EAAK2oB,6BAA6B7uB,KAKjDvC,KAAKhC,OAAO6lB,iBAInBqB,WAAA,WAAa,IAAAva,EAAA3K,KACLwV,EAAS,GAef,MAbkC,mBAAvBxV,KAAKhC,OAAOwX,OACrBA,EAAO7V,GAAK,SAAA4C,GAMV,OALAA,EAAK0R,QAAL/L,EAAA,GACK3F,EAAK0R,QACLtJ,EAAK3M,OAAOwX,OAAOjT,EAAK0R,QAAStJ,EAAKtO,UAGpCkG,GAGTiT,EAAOA,OAASxV,KAAKhC,OAAOwX,OAGvBA,KAGTgb,cAAA,WACE,OAA8B,IAA1BxwB,KAAKhC,OAAOsuB,UACPpwB,SAASkT,KAGdvT,EAAK8B,UAAUqC,KAAKhC,OAAOsuB,WACtBxvB,EAAAA,QAAEkD,KAAKhC,OAAOsuB,WAGhBxvB,EAAAA,QAAEZ,UAAUyc,KAAK3Y,KAAKhC,OAAOsuB,cAGtCgE,eAAA,SAAe9Z,GACb,OAAOoV,GAAcpV,EAAUxX,kBAGjCmwB,cAAA,WAAgB,IAAAjH,EAAAloB,KACGA,KAAKhC,OAAOR,QAAQJ,MAAM,KAElCic,SAAQ,SAAA7b,GACf,GAAgB,UAAZA,EACFV,EAAAA,QAAEorB,EAAK7rB,SAASsG,GACdulB,EAAKnD,YAAYjjB,MAAM0sB,MACvBtG,EAAKlqB,OAAO1B,UACZ,SAAA8D,GAAK,OAAI8nB,EAAK9kB,OAAOhD,WAElB,GApdU,WAodN5C,EAA4B,CACrC,IAAM6zB,EAAU7zB,IAAYkuB,GAC1BxD,EAAKnD,YAAYjjB,MAAM6sB,WACvBzG,EAAKnD,YAAYjjB,MAAM2sB,QACnB6C,EAAW9zB,IAAYkuB,GAC3BxD,EAAKnD,YAAYjjB,MAAM8sB,WACvB1G,EAAKnD,YAAYjjB,MAAM4sB,SAEzB5xB,EAAAA,QAAEorB,EAAK7rB,SACJsG,GAAG0uB,EAASnJ,EAAKlqB,OAAO1B,UAAU,SAAA8D,GAAK,OAAI8nB,EAAKyH,OAAOvvB,MACvDuC,GAAG2uB,EAAUpJ,EAAKlqB,OAAO1B,UAAU,SAAA8D,GAAK,OAAI8nB,EAAK0H,OAAOxvB,UAI/DJ,KAAK+vB,kBAAoB,WACnB7H,EAAK7rB,SACP6rB,EAAKvb,QAIT7P,EAAAA,QAAEkD,KAAK3D,SAASuF,QAAQ,UAAUe,GAAG,gBAAiB3C,KAAK+vB,mBAEvD/vB,KAAKhC,OAAO1B,SACd0D,KAAKhC,OAALkK,EAAA,GACKlI,KAAKhC,OADV,CAEER,QAAS,SACTlB,SAAU,KAGZ0D,KAAKuxB,eAITA,UAAA,WACE,IAAMC,SAAmBxxB,KAAK3D,QAAQE,aAAa,wBAE/CyD,KAAK3D,QAAQE,aAAa,UAA0B,WAAdi1B,KACxCxxB,KAAK3D,QAAQ0H,aACX,sBACA/D,KAAK3D,QAAQE,aAAa,UAAY,IAGxCyD,KAAK3D,QAAQ0H,aAAa,QAAS,QAIvC4rB,OAAA,SAAOvvB,EAAOglB,GACZ,IAAMmK,EAAUvvB,KAAK+kB,YAAYhkB,UACjCqkB,EAAUA,GAAWtoB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,MAG/CnK,EAAU,IAAIplB,KAAK+kB,YACjB3kB,EAAMyN,cACN7N,KAAKwvB,sBAEP1yB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,EAASnK,IAGnChlB,IACFglB,EAAQ6J,eACS,YAAf7uB,EAAMoD,KAAqBmoB,GAAgBD,KACzC,GAGF5uB,EAAAA,QAAEsoB,EAAQyK,iBAAiB7tB,SAASuJ,KAAoB6Z,EAAQ4J,cAAgBxD,GAClFpG,EAAQ4J,YAAcxD,IAIxBxiB,aAAaoc,EAAQ2J,UAErB3J,EAAQ4J,YAAcxD,GAEjBpG,EAAQpnB,OAAOquB,OAAUjH,EAAQpnB,OAAOquB,MAAMzf,KAKnDwY,EAAQ2J,SAAW5uB,YAAW,WACxBilB,EAAQ4J,cAAgBxD,IAC1BpG,EAAQxY,SAETwY,EAAQpnB,OAAOquB,MAAMzf,MARtBwY,EAAQxY,WAWZgjB,OAAA,SAAOxvB,EAAOglB,GACZ,IAAMmK,EAAUvvB,KAAK+kB,YAAYhkB,UACjCqkB,EAAUA,GAAWtoB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,MAG/CnK,EAAU,IAAIplB,KAAK+kB,YACjB3kB,EAAMyN,cACN7N,KAAKwvB,sBAEP1yB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,EAASnK,IAGnChlB,IACFglB,EAAQ6J,eACS,aAAf7uB,EAAMoD,KAAsBmoB,GAAgBD,KAC1C,GAGFtG,EAAQsK,yBAIZ1mB,aAAaoc,EAAQ2J,UAErB3J,EAAQ4J,YAAcvD,GAEjBrG,EAAQpnB,OAAOquB,OAAUjH,EAAQpnB,OAAOquB,MAAM1f,KAKnDyY,EAAQ2J,SAAW5uB,YAAW,WACxBilB,EAAQ4J,cAAgBvD,IAC1BrG,EAAQzY,SAETyY,EAAQpnB,OAAOquB,MAAM1f,MARtByY,EAAQzY,WAWZ+iB,qBAAA,WACE,IAAK,IAAMlyB,KAAWwC,KAAKivB,eACzB,GAAIjvB,KAAKivB,eAAezxB,GACtB,OAAO,EAIX,OAAO,KAGTgJ,WAAA,SAAWxI,GACT,IAAMyzB,EAAiB30B,EAAAA,QAAEkD,KAAK3D,SAASkG,OAwCvC,OAtCApE,OAAOyY,KAAK6a,GACTpY,SAAQ,SAAAqY,IAC0C,IAA7CnG,GAAsBniB,QAAQsoB,WACzBD,EAAeC,MAUA,iBAN5B1zB,EAAMkK,EAAA,GACDlI,KAAK+kB,YAAY5f,QACjBssB,EACmB,iBAAXzzB,GAAuBA,EAASA,EAAS,KAGpCquB,QAChBruB,EAAOquB,MAAQ,CACbzf,KAAM5O,EAAOquB,MACb1f,KAAM3O,EAAOquB,QAIW,iBAAjBruB,EAAOouB,QAChBpuB,EAAOouB,MAAQpuB,EAAOouB,MAAM1tB,YAGA,iBAAnBV,EAAOgzB,UAChBhzB,EAAOgzB,QAAUhzB,EAAOgzB,QAAQtyB,YAGlC7C,EAAKiC,gBACHgH,GACA9G,EACAgC,KAAK+kB,YAAYrf,aAGf1H,EAAOyuB,WACTzuB,EAAOmuB,SAAWhC,GAAansB,EAAOmuB,SAAUnuB,EAAOqsB,UAAWrsB,EAAOssB,aAGpEtsB,KAGTwxB,mBAAA,WACE,IAAMxxB,EAAS,GAEf,GAAIgC,KAAKhC,OACP,IAAK,IAAM0V,KAAO1T,KAAKhC,OACjBgC,KAAK+kB,YAAY5f,QAAQuO,KAAS1T,KAAKhC,OAAO0V,KAChD1V,EAAO0V,GAAO1T,KAAKhC,OAAO0V,IAKhC,OAAO1V,KAGT4yB,eAAA,WACE,IAAMe,EAAO70B,EAAAA,QAAEkD,KAAK6vB,iBACd+B,EAAWD,EAAKvkB,KAAK,SAASzO,MAAM2sB,IACzB,OAAbsG,GAAqBA,EAAShtB,QAChC+sB,EAAK5vB,YAAY6vB,EAASC,KAAK,QAInCT,6BAAA,SAA6BU,GAC3B9xB,KAAKkvB,IAAM4C,EAAW7e,SAAS6C,OAC/B9V,KAAK4wB,iBACL5wB,KAAKuwB,mBAAmBvwB,KAAKswB,eAAewB,EAAWtb,eAGzDka,eAAA,WACE,IAAMxB,EAAMlvB,KAAK6vB,gBACXkC,EAAsB/xB,KAAKhC,OAAOkuB,UAEA,OAApCgD,EAAI3yB,aAAa,iBAIrBO,EAAAA,QAAEoyB,GAAKntB,YAAY4jB,IACnB3lB,KAAKhC,OAAOkuB,WAAY,EACxBlsB,KAAK2M,OACL3M,KAAK4M,OACL5M,KAAKhC,OAAOkuB,UAAY6F,MAInB3vB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,IACnBwF,EAA4B,iBAAXvI,GAAuBA,EAE9C,IAAKuE,IAAQ,eAAezD,KAAKd,MAI5BuE,IACHA,EAAO,IAAIssB,EAAQ7uB,KAAMuG,GACzBjE,EAASC,KAAKxB,GAAUwB,IAGJ,iBAAXvE,GAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA1mBX,WACE,MAhHY,6BAmHd,WACE,OAAOmH,qBAGT,WACE,OAAOL,yBAGT,WACE,OAAO/D,sBAGT,WACE,OAAOe,0BAGT,WACE,MAlIW,uCAqIb,WACE,OAAO4D,SA/CLmpB,GA0oBN/xB,EAAAA,QAAE6C,GAAF,QAAakvB,GAAQzsB,iBACrBtF,EAAAA,QAAE6C,GAAF,QAAWiD,YAAcisB,GACzB/xB,EAAAA,QAAE6C,GAAF,QAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,QAAaqB,GACN6tB,GAAQzsB,kBC1uBjB,IAEMrB,GAAW,aAEXC,GAAqBlE,EAAAA,QAAE6C,GAAF,QAErB2rB,GAAqB,IAAIzsB,OAAJ,wBAAyC,KAQ9DsG,GAAO+C,EAAA,GACR2mB,GAAQ1pB,QADA,CAEXqR,UAAW,QACXhZ,QAAS,QACTwzB,QAAS,GACT7E,SAAU,wIAMNzmB,GAAWwC,EAAA,GACZ2mB,GAAQnpB,YADI,CAEfsrB,QAAS,8BAGLlvB,GAAQ,CACZqsB,KAAI,kBACJC,OAAM,oBACNC,KAAI,kBACJC,MAAK,mBACLC,SAAQ,sBACRC,MAAK,mBACLC,QAAO,qBACPC,SAAQ,sBACRC,WAAU,wBACVC,WAAU,yBAONoD,GAAAA,SAAAA,wKA+BJhC,cAAA,WACE,OAAOhwB,KAAK6wB,YAAc7wB,KAAKiyB,iBAGjC1B,mBAAA,SAAmBF,GACjBvzB,EAAAA,QAAEkD,KAAK6vB,iBAAiBxlB,SAAYymB,cAAgBT,MAGtDR,cAAA,WAEE,OADA7vB,KAAKkvB,IAAMlvB,KAAKkvB,KAAOpyB,EAAAA,QAAEkD,KAAKhC,OAAOmuB,UAAU,GACxCnsB,KAAKkvB,OAGdkB,WAAA,WACE,IAAMuB,EAAO70B,EAAAA,QAAEkD,KAAK6vB,iBAGpB7vB,KAAK+wB,kBAAkBY,EAAKhZ,KApFT,mBAoF+B3Y,KAAK6wB,YACvD,IAAIG,EAAUhxB,KAAKiyB,cACI,mBAAZjB,IACTA,EAAUA,EAAQ1yB,KAAK0B,KAAK3D,UAG9B2D,KAAK+wB,kBAAkBY,EAAKhZ,KAzFP,iBAyF+BqY,GAEpDW,EAAK5vB,YAAe4jB,gBAItBsM,YAAA,WACE,OAAOjyB,KAAK3D,QAAQE,aAAa,iBAC/ByD,KAAKhC,OAAOgzB,WAGhBJ,eAAA,WACE,IAAMe,EAAO70B,EAAAA,QAAEkD,KAAK6vB,iBACd+B,EAAWD,EAAKvkB,KAAK,SAASzO,MAAM2sB,IACzB,OAAbsG,GAAqBA,EAAShtB,OAAS,GACzC+sB,EAAK5vB,YAAY6vB,EAASC,KAAK,QAK5BzvB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAClBwF,EAA4B,iBAAXvI,EAAsBA,EAAS,KAEtD,IAAKuE,IAAQ,eAAezD,KAAKd,MAI5BuE,IACHA,EAAO,IAAIyvB,EAAQhyB,KAAMuG,GACzBzJ,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,GAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA3FX,WACE,MAjDY,6BAoDd,WACE,OAAOmH,qBAGT,WACE,MA1DS,gCA6DX,WACE,OAAOpE,sBAGT,WACE,OAAOe,0BAGT,WACE,MAnEW,uCAsEb,WACE,OAAO4D,SA3BLssB,CAAgBnD,IAuGtB/xB,EAAAA,QAAE6C,GAAF,QAAaqyB,GAAQ5vB,iBACrBtF,EAAAA,QAAE6C,GAAF,QAAWiD,YAAcovB,GACzBl1B,EAAAA,QAAE6C,GAAF,QAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,QAAaqB,GACNgxB,GAAQ5vB,kBC1JjB,IAAM0C,GAAO,YAEP/D,GAAW,eAGXC,GAAqBlE,EAAAA,QAAE6C,GAAGmF,IAG1BhC,GAAoB,SAOpBovB,GAAkB,WAGlBC,GAA0B,oBAQ1BhtB,GAAU,CACdqQ,OAAQ,GACR4c,OAAQ,OACR3xB,OAAQ,IAGJiF,GAAc,CAClB8P,OAAQ,SACR4c,OAAQ,SACR3xB,OAAQ,oBAOJ4xB,GAAAA,WACJ,SAAAA,EAAYh2B,EAAS2B,GAAQ,IAAA+B,EAAAC,KAC3BA,KAAKkB,SAAW7E,EAChB2D,KAAKsyB,eAAqC,SAApBj2B,EAAQgI,QAAqBC,OAASjI,EAC5D2D,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKsM,UAAetM,KAAKuG,QAAQ9F,OAAbT,cACKA,KAAKuG,QAAQ9F,OADlBT,qBAEKA,KAAKuG,QAAQ9F,OAFrB,kBAGjBT,KAAKuyB,SAAW,GAChBvyB,KAAKwyB,SAAW,GAChBxyB,KAAKyyB,cAAgB,KACrBzyB,KAAK0yB,cAAgB,EAErB51B,EAAAA,QAAEkD,KAAKsyB,gBAAgB3vB,GA5CT,uBA4C0B,SAAAvC,GAAK,OAAIL,EAAK4yB,SAASvyB,MAE/DJ,KAAK4yB,UACL5yB,KAAK2yB,sCAaPC,QAAA,WAAU,IAAAtqB,EAAAtI,KACF6yB,EAAa7yB,KAAKsyB,iBAAmBtyB,KAAKsyB,eAAehuB,OA1D7C,SA2DA4tB,GAEZY,EAAuC,SAAxB9yB,KAAKuG,QAAQ6rB,OAChCS,EAAa7yB,KAAKuG,QAAQ6rB,OAEtBW,EAAaD,IAAiBZ,GAClClyB,KAAKgzB,gBAAkB,EAEzBhzB,KAAKuyB,SAAW,GAChBvyB,KAAKwyB,SAAW,GAEhBxyB,KAAK0yB,cAAgB1yB,KAAKizB,mBAEV,GAAGzuB,MAAMlG,KAAKpC,SAASuI,iBAAiBzE,KAAKsM,YAG1DuK,KAAI,SAAAxa,GACH,IAAIoE,EACEyyB,EAAiBr3B,EAAKO,uBAAuBC,GAMnD,GAJI62B,IACFzyB,EAASvE,SAASQ,cAAcw2B,IAG9BzyB,EAAQ,CACV,IAAM0yB,EAAY1yB,EAAO8M,wBACzB,GAAI4lB,EAAUpgB,OAASogB,EAAUrgB,OAE/B,MAAO,CACLhW,EAAAA,QAAE2D,GAAQqyB,KAAgB7gB,IAAM8gB,EAChCG,GAKN,OAAO,QAER9mB,QAAO,SAAAqZ,GAAI,OAAIA,KACf1O,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE,GAAKC,EAAE,MACxBoC,SAAQ,SAAAoM,GACPnd,EAAKiqB,SAAShmB,KAAKkZ,EAAK,IACxBnd,EAAKkqB,SAASjmB,KAAKkZ,EAAK,UAI9BhkB,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5BjE,EAAAA,QAAEkD,KAAKsyB,gBAAgBrqB,IArHZ,iBAuHXjI,KAAKkB,SAAW,KAChBlB,KAAKsyB,eAAiB,KACtBtyB,KAAKuG,QAAU,KACfvG,KAAKsM,UAAY,KACjBtM,KAAKuyB,SAAW,KAChBvyB,KAAKwyB,SAAW,KAChBxyB,KAAKyyB,cAAgB,KACrBzyB,KAAK0yB,cAAgB,QAIvBlsB,WAAA,SAAWxI,GAMT,GAA6B,iBAL7BA,EAAMkK,EAAA,GACD/C,GACmB,iBAAXnH,GAAuBA,EAASA,EAAS,KAGpCyC,QAAuB5E,EAAK8B,UAAUK,EAAOyC,QAAS,CACtE,IAAIuL,EAAKlP,EAAAA,QAAEkB,EAAOyC,QAAQ2M,KAAK,MAC1BpB,IACHA,EAAKnQ,EAAKC,OAAOgJ,IACjBhI,EAAAA,QAAEkB,EAAOyC,QAAQ2M,KAAK,KAAMpB,IAG9BhO,EAAOyC,OAAP,IAAoBuL,EAKtB,OAFAnQ,EAAKiC,gBAAgBgH,GAAM9G,EAAQ0H,IAE5B1H,KAGTg1B,cAAA,WACE,OAAOhzB,KAAKsyB,iBAAmBhuB,OAC7BtE,KAAKsyB,eAAec,YAAcpzB,KAAKsyB,eAAexgB,aAG1DmhB,iBAAA,WACE,OAAOjzB,KAAKsyB,eAAe5K,cAAgB1rB,KAAK4W,IAC9C1W,SAASkT,KAAKsY,aACdxrB,SAASgD,gBAAgBwoB,iBAI7B2L,iBAAA,WACE,OAAOrzB,KAAKsyB,iBAAmBhuB,OAC7BA,OAAOiR,YAAcvV,KAAKsyB,eAAe/kB,wBAAwBuF,UAGrE6f,SAAA,WACE,IAAM7gB,EAAY9R,KAAKgzB,gBAAkBhzB,KAAKuG,QAAQiP,OAChDkS,EAAe1nB,KAAKizB,mBACpBK,EAAYtzB,KAAKuG,QAAQiP,OAASkS,EAAe1nB,KAAKqzB,mBAM5D,GAJIrzB,KAAK0yB,gBAAkBhL,GACzB1nB,KAAK4yB,UAGH9gB,GAAawhB,EAAjB,CACE,IAAM7yB,EAAST,KAAKwyB,SAASxyB,KAAKwyB,SAAS5tB,OAAS,GAEhD5E,KAAKyyB,gBAAkBhyB,GACzBT,KAAKuzB,UAAU9yB,OAJnB,CAUA,GAAIT,KAAKyyB,eAAiB3gB,EAAY9R,KAAKuyB,SAAS,IAAMvyB,KAAKuyB,SAAS,GAAK,EAG3E,OAFAvyB,KAAKyyB,cAAgB,UACrBzyB,KAAKwzB,SAIP,IAAK,IAAI9uB,EAAI1E,KAAKuyB,SAAS3tB,OAAQF,KACV1E,KAAKyyB,gBAAkBzyB,KAAKwyB,SAAS9tB,IACxDoN,GAAa9R,KAAKuyB,SAAS7tB,KACM,oBAAzB1E,KAAKuyB,SAAS7tB,EAAI,IACtBoN,EAAY9R,KAAKuyB,SAAS7tB,EAAI,KAGpC1E,KAAKuzB,UAAUvzB,KAAKwyB,SAAS9tB,QAKnC6uB,UAAA,SAAU9yB,GACRT,KAAKyyB,cAAgBhyB,EAErBT,KAAKwzB,SAEL,IAAMC,EAAUzzB,KAAKsM,UAClBlP,MAAM,KACNyZ,KAAI,SAAAva,GAAQ,OAAOA,EAAP,iBAAgCmE,EAAhC,MAA4CnE,EAA5C,UAA8DmE,EAA9D,QAETizB,EAAQ52B,EAAAA,QAAE,GAAG0H,MAAMlG,KAAKpC,SAASuI,iBAAiBgvB,EAAQ5B,KAAK,QAEjE6B,EAAM1xB,SApNmB,kBAqN3B0xB,EAAM9xB,QAtMc,aAuMjB+W,KArMwB,oBAsMxBtO,SAASvH,IACZ4wB,EAAMrpB,SAASvH,MAGf4wB,EAAMrpB,SAASvH,IAGf4wB,EAAMC,QAAQxB,IACX9qB,KAAQusB,+BACRvpB,SAASvH,IAEZ4wB,EAAMC,QAAQxB,IACX9qB,KAtNkB,aAuNlB+C,SAxNkB,aAyNlBC,SAASvH,KAGdhG,EAAAA,QAAEkD,KAAKsyB,gBAAgB90B,QArOP,wBAqO+B,CAC7CmM,cAAelJ,OAInB+yB,OAAA,WACE,GAAGhvB,MAAMlG,KAAKpC,SAASuI,iBAAiBzE,KAAKsM,YAC1CF,QAAO,SAAAkE,GAAI,OAAIA,EAAK5M,UAAUC,SAASb,OACvCuW,SAAQ,SAAA/I,GAAI,OAAIA,EAAK5M,UAAUvB,OAAOW,UAIpCV,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAQxB,GALKwB,IACHA,EAAO,IAAI8vB,EAAUryB,KAHW,iBAAXhC,GAAuBA,GAI5ClB,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA5MX,WACE,MA9DY,6BAiEd,WACE,OAAOmH,SAzBLktB,GA0ONv1B,EAAAA,QAAEwH,QAAQ3B,GAxQe,8BAwQS,WAIhC,IAHA,IAAMkxB,EAAa,GAAGrvB,MAAMlG,KAAKpC,SAASuI,iBApQlB,wBAuQfC,EAFgBmvB,EAAWjvB,OAELF,KAAM,CACnC,IAAMovB,EAAOh3B,EAAAA,QAAE+2B,EAAWnvB,IAC1B2tB,GAAUjwB,iBAAiB9D,KAAKw1B,EAAMA,EAAKvxB,YAQ/CzF,EAAAA,QAAE6C,GAAGmF,IAAQutB,GAAUjwB,iBACvBtF,EAAAA,QAAE6C,GAAGmF,IAAMlC,YAAcyvB,GACzBv1B,EAAAA,QAAE6C,GAAGmF,IAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,IAAQ9D,GACNqxB,GAAUjwB,kBCtSnB,IAEMrB,GAAW,SAGXC,GAAqBlE,EAAAA,QAAE6C,GAAF,IAGrBmD,GAAoB,SAEpB6iB,GAAkB,OAClBpa,GAAkB,OAUlBwoB,GAAkB,UAClBC,GAAqB,iBASrBC,GAAAA,WACJ,SAAAA,EAAY53B,GACV2D,KAAKkB,SAAW7E,6BASlBuQ,KAAA,WAAO,IAAA7M,EAAAC,KACL,KAAIA,KAAKkB,SAAS3B,YACdS,KAAKkB,SAAS3B,WAAW1B,WAAa+S,KAAKiX,cAC3C/qB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASc,KAC1BhG,EAAAA,QAAEkD,KAAKkB,UAAUc,SArCG,aAkCxB,CAOA,IAAIvB,EACAyzB,EACEC,EAAcr3B,EAAAA,QAAEkD,KAAKkB,UAAUU,QAhCT,qBAgC0C,GAChEtF,EAAWT,EAAKO,uBAAuB4D,KAAKkB,UAElD,GAAIizB,EAAa,CACf,IAAMC,EAAwC,OAAzBD,EAAYllB,UAA8C,OAAzBklB,EAAYllB,SAAoB+kB,GAAqBD,GAE3GG,GADAA,EAAWp3B,EAAAA,QAAEu3B,UAAUv3B,EAAAA,QAAEq3B,GAAaxb,KAAKyb,KACvBF,EAAStvB,OAAS,GAGxC,IAAMigB,EAAY/nB,EAAAA,QAAEgF,MAhDR,cAgD0B,CACpC6H,cAAe3J,KAAKkB,WAGhBsjB,EAAY1nB,EAAAA,QAAEgF,MAlDR,cAkD0B,CACpC6H,cAAeuqB,IASjB,GANIA,GACFp3B,EAAAA,QAAEo3B,GAAU12B,QAAQqnB,GAGtB/nB,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgnB,IAErBA,EAAUjjB,uBACVsjB,EAAUtjB,qBADd,CAKIjF,IACFmE,EAASvE,SAASQ,cAAcJ,IAGlC0D,KAAKuzB,UACHvzB,KAAKkB,SACLizB,GAGF,IAAM1D,EAAW,WACf,IAAM6D,EAAcx3B,EAAAA,QAAEgF,MA5EV,gBA4E8B,CACxC6H,cAAe5J,EAAKmB,WAGhB8mB,EAAalrB,EAAAA,QAAEgF,MA9EV,eA8E6B,CACtC6H,cAAeuqB,IAGjBp3B,EAAAA,QAAEo3B,GAAU12B,QAAQ82B,GACpBx3B,EAAAA,QAAEiD,EAAKmB,UAAU1D,QAAQwqB,IAGvBvnB,EACFT,KAAKuzB,UAAU9yB,EAAQA,EAAOlB,WAAYkxB,GAE1CA,SAIJhvB,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5Bf,KAAKkB,SAAW,QAIlBqyB,UAAA,SAAUl3B,EAASiwB,EAAW/Q,GAAU,IAAAjT,EAAAtI,KAKhCu0B,IAJiBjI,GAAqC,OAAvBA,EAAUrd,UAA4C,OAAvBqd,EAAUrd,SAE5EnS,EAAAA,QAAEwvB,GAAWliB,SAAS2pB,IADtBj3B,EAAAA,QAAEwvB,GAAW3T,KAAKqb,KAGU,GACxBvmB,EAAkB8N,GAAagZ,GAAUz3B,EAAAA,QAAEy3B,GAAQvyB,SAAS2jB,IAC5D8K,EAAW,WAAA,OAAMnoB,EAAKksB,oBAC1Bn4B,EACAk4B,EACAhZ,IAGF,GAAIgZ,GAAU9mB,EAAiB,CAC7B,IAAM5Q,EAAqBhB,EAAKe,iCAAiC23B,GAEjEz3B,EAAAA,QAAEy3B,GACCxyB,YAAYwJ,IACZrL,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,OAIJ+D,oBAAA,SAAoBn4B,EAASk4B,EAAQhZ,GACnC,GAAIgZ,EAAQ,CACVz3B,EAAAA,QAAEy3B,GAAQxyB,YAAYe,IAEtB,IAAM2xB,EAAgB33B,EAAAA,QAAEy3B,EAAOh1B,YAAYoZ,KAvHV,4BAyH/B,GAEE8b,GACF33B,EAAAA,QAAE23B,GAAe1yB,YAAYe,IAGK,QAAhCyxB,EAAOh4B,aAAa,SACtBg4B,EAAOxwB,aAAa,iBAAiB,GAIzCjH,EAAAA,QAAET,GAASgO,SAASvH,IACiB,QAAjCzG,EAAQE,aAAa,SACvBF,EAAQ0H,aAAa,iBAAiB,GAGxClI,EAAKwB,OAAOhB,GAERA,EAAQqH,UAAUC,SAASgiB,KAC7BtpB,EAAQqH,UAAUmB,IAAI0G,IAGxB,IAAI5J,EAAStF,EAAQkD,WAKrB,GAJIoC,GAA8B,OAApBA,EAAOsN,WACnBtN,EAASA,EAAOpC,YAGdoC,GAAU7E,EAAAA,QAAE6E,GAAQK,SAtKK,iBAsK+B,CAC1D,IAAM0yB,EAAkB53B,EAAAA,QAAET,GAASuF,QA3Jf,aA2J0C,GAE9D,GAAI8yB,EAAiB,CACnB,IAAMC,EAAqB,GAAGnwB,MAAMlG,KAAKo2B,EAAgBjwB,iBAzJhC,qBA2JzB3H,EAAAA,QAAE63B,GAAoBtqB,SAASvH,IAGjCzG,EAAQ0H,aAAa,iBAAiB,GAGpCwX,GACFA,OAKGnZ,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMuyB,EAAQ93B,EAAAA,QAAEkD,MACZuC,EAAOqyB,EAAMryB,KAAKxB,IAOtB,GALKwB,IACHA,EAAO,IAAI0xB,EAAIj0B,MACf40B,EAAMryB,KAAKxB,GAAUwB,IAGD,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCAzKX,WACE,MArCY,cA8BVi2B,GAyLNn3B,EAAAA,QAAEZ,UACCyG,GAxMuB,wBAMG,mEAkMqB,SAAUvC,GACxDA,EAAMsC,iBACNuxB,GAAI7xB,iBAAiB9D,KAAKxB,EAAAA,QAAEkD,MAAO,WAOvClD,EAAAA,QAAE6C,GAAF,IAAas0B,GAAI7xB,iBACjBtF,EAAAA,QAAE6C,GAAF,IAAWiD,YAAcqxB,GACzBn3B,EAAAA,QAAE6C,GAAF,IAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,IAAaqB,GACNizB,GAAI7xB,kBCtOb,IAEMrB,GAAW,WAEXC,GAAqBlE,EAAAA,QAAE6C,GAAF,MAGrBk1B,GAAkB,OAClBtpB,GAAkB,OAClBupB,GAAqB,UAErB9O,GAAmB,yBAQnB7gB,GAAU,CACd+mB,WAAW,EACX6I,UAAU,EACV1I,MAAO,KAGH3mB,GAAc,CAClBwmB,UAAW,UACX6I,SAAU,UACV1I,MAAO,UAOH2I,GAAAA,WACJ,SAAAA,EAAY34B,EAAS2B,GACnBgC,KAAKkB,SAAW7E,EAChB2D,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAK+uB,SAAW,KAChB/uB,KAAKmvB,2CAiBPviB,KAAA,WAAO,IAAA7M,EAAAC,KACCwkB,EAAY1nB,EAAAA,QAAEgF,MA5CR,iBA+CZ,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgnB,IACrBA,EAAUjjB,qBAAd,CAIAvB,KAAKi1B,gBAEDj1B,KAAKuG,QAAQ2lB,WACflsB,KAAKkB,SAASwC,UAAUmB,IA9DN,QAiEpB,IAAM4rB,EAAW,WACf1wB,EAAKmB,SAASwC,UAAUvB,OAAO2yB,IAC/B/0B,EAAKmB,SAASwC,UAAUmB,IAAI0G,IAE5BzO,EAAAA,QAAEiD,EAAKmB,UAAU1D,QA5DN,kBA8DPuC,EAAKwG,QAAQwuB,WACfh1B,EAAKgvB,SAAW5uB,YAAW,WACzBJ,EAAK4M,SACJ5M,EAAKwG,QAAQ8lB,SAOpB,GAHArsB,KAAKkB,SAASwC,UAAUvB,OAAO0yB,IAC/Bh5B,EAAKwB,OAAO2C,KAAKkB,UACjBlB,KAAKkB,SAASwC,UAAUmB,IAAIiwB,IACxB90B,KAAKuG,QAAQ2lB,UAAW,CAC1B,IAAMrvB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,QAIJ9jB,KAAA,WACE,GAAK3M,KAAKkB,SAASwC,UAAUC,SAAS4H,IAAtC,CAIA,IAAMsZ,EAAY/nB,EAAAA,QAAEgF,MA3FR,iBA6FZhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQqnB,GACrBA,EAAUtjB,sBAIdvB,KAAKk1B,aAGPzzB,QAAA,WACEzB,KAAKi1B,gBAEDj1B,KAAKkB,SAASwC,UAAUC,SAAS4H,KACnCvL,KAAKkB,SAASwC,UAAUvB,OAAOoJ,IAGjCzO,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAI+d,IAErBlpB,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5Bf,KAAKkB,SAAW,KAChBlB,KAAKuG,QAAU,QAIjBC,WAAA,SAAWxI,GAaT,OAZAA,EAAMkK,EAAA,GACD/C,GACArI,EAAAA,QAAEkD,KAAKkB,UAAUqB,OACE,iBAAXvE,GAAuBA,EAASA,EAAS,IAGtDnC,EAAKiC,gBAvII,QAyIPE,EACAgC,KAAK+kB,YAAYrf,aAGZ1H,KAGTmxB,cAAA,WAAgB,IAAA7mB,EAAAtI,KACdlD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAAGqjB,GAhIM,0BAgIsC,WAAA,OAAM1d,EAAKqE,aAG7EuoB,OAAA,WAAS,IAAAzsB,EAAAzI,KACDywB,EAAW,WACfhoB,EAAKvH,SAASwC,UAAUmB,IAAIgwB,IAC5B/3B,EAAAA,QAAE2L,EAAKvH,UAAU1D,QA1IL,oBA8Id,GADAwC,KAAKkB,SAASwC,UAAUvB,OAAOoJ,IAC3BvL,KAAKuG,QAAQ2lB,UAAW,CAC1B,IAAMrvB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,OAIJwE,cAAA,WACEjsB,aAAahJ,KAAK+uB,UAClB/uB,KAAK+uB,SAAW,QAIX3sB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,IAQzB,GALKwB,IACHA,EAAO,IAAIyyB,EAAMh1B,KAHe,iBAAXhC,GAAuBA,GAI5CsE,EAASC,KAAKxB,GAAUwB,IAGJ,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,GAAQgC,wCAhJnB,WACE,MA5CY,iCA+Cd,WACE,OAAO0F,wBAGT,WACE,OAAOP,SAlBL6vB,GAmKNl4B,EAAAA,QAAE6C,GAAF,MAAaq1B,GAAM5yB,iBACnBtF,EAAAA,QAAE6C,GAAF,MAAWiD,YAAcoyB,GACzBl4B,EAAAA,QAAE6C,GAAF,MAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,MAAaqB,GACNg0B,GAAM5yB","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Private TransitionEnd Helpers\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * Public Util API\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\n/**\n * Class definition\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n // Public\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\n/**\n * Class definition\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n // Public\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n this.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ?\n 0 :\n event.originalEvent.touches[0].clientX - this.touchStartX\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n // Check for Popper dependency\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element)\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n // eslint-disable-next-line unicorn/prefer-spread\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '' +\n '' +\n '',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element)\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '' +\n '' +\n '' +\n ''\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both and
{{- site.data.locales[site.lang].panel.toc -}}
-
-{{- site.data.locales[include.lang].panel.toc -}}
+ +
-
+
+
+
+
+
- {% elsif page.layout == 'category' or page.layout == 'tag' %}
-
-
- {{ site.data.locales[site.lang].tabs[item] | default: page.title }}
-
-
- {% endif %}
-
- {% endfor %}
-
- {% endif %}
-
-
-
-
+
+
-
{% if page.layout == 'home' %}
- {{- site.data.locales[site.lang].title | default: site.title -}}
+ {{- site.data.locales[include.lang].title | default: site.title -}}
{% elsif page.collection == 'tabs' or page.layout == 'page' %}
{%- capture tab_key -%}{{ page.url | split: '/' }}{%- endcapture -%}
- {{- site.data.locales[site.lang].tabs[tab_key] | default: page.title -}}
+ {{- site.data.locales[include.lang].tabs[tab_key] | default: page.title -}}
{% else %}
- {{- site.data.locales[site.lang].layout[page.layout] | default: page.layout | capitalize -}}
+ {{- site.data.locales[include.lang].layout[page.layout] | default: page.layout | capitalize -}}
{% endif %}
-
-
+
- {{ site.data.locales[site.lang].search.cancel }}
- {{- site.data.locales[site.lang].panel.trending_tags -}}
-
-
- {% for tag_name in trending_tags %}
- {% assign url = tag_name | slugify | url_encode | prepend: "/tags/" | append: "/" %}
- {{ tag_name }}
- {% endfor %}
-
+
+
+
{% endif %}
diff --git a/_includes/update-list.html b/_includes/update-list.html
index a4edd11e..93684c3e 100644
--- a/_includes/update-list.html
+++ b/_includes/update-list.html
@@ -1,40 +1,40 @@
-{% comment %}
- Get the last 5 posts from lastmod list.
-{% endcomment %}
+
{% assign MAX_SIZE = 5 %}
-{% assign all_list = "" | split: "" %}
+{% assign all_list = '' | split: '' %}
{% for post in site.posts %}
- {% if post.last_modified_at %}
- {% capture elem %}
- {{- post.last_modified_at | date: "%Y%m%d%H%M%S" -}}::{{- forloop.index0 -}}
- {% endcapture %}
- {% assign all_list = all_list | push: elem %}
- {% endif %}
+ {% assign datetime = post.last_modified_at | default: post.date %}
+
+ {% capture elem %}
+ {{- datetime | date: "%Y%m%d%H%M%S" -}}::{{- forloop.index0 -}}
+ {% endcapture %}
+
+ {% assign all_list = all_list | push: elem %}
{% endfor %}
{% assign all_list = all_list | sort | reverse %}
-{% assign update_list = "" | split: "" %}
+{% assign update_list = '' | split: '' %}
-{% for entry in all_list limit:MAX_SIZE %}
+{% for entry in all_list limit: MAX_SIZE %}
{% assign update_list = update_list | push: entry %}
{% endfor %}
{% if update_list.size > 0 %}
-
- {{- site.data.locales[include.lang].panel.trending_tags -}}
+
+ {% for tag_name in trending_tags %}
+ {% assign url = tag_name | slugify | url_encode | prepend: '/tags/' | append: '/' %}
+ {{ tag_name }}
+ {% endfor %}
-
-
-
+
+
{% endif %}
diff --git a/_javascript/categories.js b/_javascript/categories.js
new file mode 100644
index 00000000..ce87d671
--- /dev/null
+++ b/_javascript/categories.js
@@ -0,0 +1,7 @@
+import { basic, initSidebar, initTopbar } from './modules/layouts';
+import { categoryCollapse } from './modules/components';
+
+basic();
+initSidebar();
+initTopbar();
+categoryCollapse();
diff --git a/_javascript/commons.js b/_javascript/commons.js
new file mode 100644
index 00000000..6a17fb93
--- /dev/null
+++ b/_javascript/commons.js
@@ -0,0 +1,5 @@
+import { basic, initSidebar, initTopbar } from './modules/layouts';
+
+initSidebar();
+initTopbar();
+basic();
diff --git a/_javascript/commons/back-to-top.js b/_javascript/commons/back-to-top.js
deleted file mode 100644
index e8761475..00000000
--- a/_javascript/commons/back-to-top.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Reference: https://bootsnipp.com/snippets/featured/link-to-top-page
- */
-$(function() {
- $(window).scroll(() => {
- if ($(this).scrollTop() > 50 &&
- $("#sidebar-trigger").css("display") === "none") {
- $("#back-to-top").fadeIn();
- } else {
- $("#back-to-top").fadeOut();
- }
- });
-
- $("#back-to-top").click(() => {
- $("body,html").animate({
- scrollTop: 0
- }, 800);
- return false;
- });
-});
diff --git a/_javascript/commons/mode-toggle.js b/_javascript/commons/mode-toggle.js
deleted file mode 100644
index 6581f083..00000000
--- a/_javascript/commons/mode-toggle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Listener for theme mode toggle
- */
-$(function () {
- $(".mode-toggle").click((e) => {
- const $target = $(e.target);
- let $btn = ($target.prop("tagName") === "button".toUpperCase() ?
- $target : $target.parent());
-
- $btn.blur(); // remove the clicking outline
- flipMode();
- });
-});
diff --git a/_javascript/commons/scroll-helper.js b/_javascript/commons/scroll-helper.js
deleted file mode 100644
index 419418c7..00000000
--- a/_javascript/commons/scroll-helper.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * A tool for smooth scrolling and topbar switcher
- */
-const ScrollHelper = (function () {
- const $body = $("body");
- const ATTR_TOPBAR_VISIBLE = "data-topbar-visible";
- const topbarHeight = $("#topbar-wrapper").outerHeight();
-
- let scrollUpCount = 0; // the number of times the scroll up was triggered by ToC or anchor
- let topbarLocked = false;
- let orientationLocked = false;
-
- return {
- hideTopbar: () => $body.attr(ATTR_TOPBAR_VISIBLE, false),
- showTopbar: () => $body.attr(ATTR_TOPBAR_VISIBLE, true),
-
- // scroll up
-
- addScrollUpTask: () => {
- scrollUpCount += 1;
- if (!topbarLocked) {
- topbarLocked = true;
- }
- },
- popScrollUpTask: () => scrollUpCount -= 1,
- hasScrollUpTask: () => scrollUpCount > 0,
- topbarLocked: () => topbarLocked === true,
- unlockTopbar: () => topbarLocked = false,
- getTopbarHeight: () => topbarHeight,
-
- // orientation change
-
- orientationLocked: () => orientationLocked === true,
- lockOrientation: () => orientationLocked = true,
- unLockOrientation: () => orientationLocked = false
- };
-
-}());
diff --git a/_javascript/commons/search-display.js b/_javascript/commons/search-display.js
deleted file mode 100644
index ddc73c14..00000000
--- a/_javascript/commons/search-display.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * This script make #search-result-wrapper switch to unloaded or shown automatically.
- */
-
-$(function () {
- const btnSbTrigger = $("#sidebar-trigger");
- const btnSearchTrigger = $("#search-trigger");
- const btnCancel = $("#search-cancel");
- const main = $("#main");
- const topbarTitle = $("#topbar-title");
- const searchWrapper = $("#search-wrapper");
- const resultWrapper = $("#search-result-wrapper");
- const results = $("#search-results");
- const input = $("#search-input");
- const hints = $("#search-hints");
-
- const scrollBlocker = (function () {
- let offset = 0;
- return {
- block() {
- offset = window.scrollY;
- $("html,body").scrollTop(0);
- },
- release() {
- $("html,body").scrollTop(offset);
- },
- getOffset() {
- return offset;
- }
- };
- }());
-
- /*--- Actions in mobile screens (Sidebar hidden) ---*/
-
- const mobileSearchBar = (function () {
- return {
- on() {
- btnSbTrigger.addClass("unloaded");
- topbarTitle.addClass("unloaded");
- btnSearchTrigger.addClass("unloaded");
- searchWrapper.addClass("d-flex");
- btnCancel.addClass("loaded");
- },
- off() {
- btnCancel.removeClass("loaded");
- searchWrapper.removeClass("d-flex");
- btnSbTrigger.removeClass("unloaded");
- topbarTitle.removeClass("unloaded");
- btnSearchTrigger.removeClass("unloaded");
- }
- };
- }());
-
- const resultSwitch = (function () {
- let visible = false;
-
- return {
- on() {
- if (!visible) {
- // the block method must be called before $(#main) unloaded.
- scrollBlocker.block();
- resultWrapper.removeClass("unloaded");
- main.addClass("unloaded");
- visible = true;
- }
- },
- off() {
- if (visible) {
- results.empty();
- if (hints.hasClass("unloaded")) {
- hints.removeClass("unloaded");
- }
- resultWrapper.addClass("unloaded");
- main.removeClass("unloaded");
-
- // now the release method must be called after $(#main) display
- scrollBlocker.release();
-
- input.val("");
- visible = false;
- }
- },
- isVisible() {
- return visible;
- }
- };
-
- }());
-
- function isMobileView() {
- return btnCancel.hasClass("loaded");
- }
-
- btnSearchTrigger.click(function () {
- mobileSearchBar.on();
- resultSwitch.on();
- input.focus();
- });
-
- btnCancel.click(function () {
- mobileSearchBar.off();
- resultSwitch.off();
- });
-
- input.focus(function () {
- searchWrapper.addClass("input-focus");
- });
-
- input.focusout(function () {
- searchWrapper.removeClass("input-focus");
- });
-
- input.on("input", () => {
- if (input.val() === "") {
- if (isMobileView()) {
- hints.removeClass("unloaded");
- } else {
- resultSwitch.off();
- }
-
- } else {
- resultSwitch.on();
- if (isMobileView()) {
- hints.addClass("unloaded");
- }
- }
- });
-
-});
diff --git a/_javascript/commons/sidebar.js b/_javascript/commons/sidebar.js
deleted file mode 100644
index 121353f9..00000000
--- a/_javascript/commons/sidebar.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Expand or close the sidebar in mobile screens.
- */
-
-$(function () {
- const sidebarUtil = (function () {
- const ATTR_DISPLAY = "sidebar-display";
- let isExpanded = false;
- const body = $("body");
-
- return {
- toggle() {
- if (isExpanded === false) {
- body.attr(ATTR_DISPLAY, "");
- } else {
- body.removeAttr(ATTR_DISPLAY);
- }
-
- isExpanded = !isExpanded;
- }
- };
-
- }());
-
- $("#sidebar-trigger").click(sidebarUtil.toggle);
-
- $("#mask").click(sidebarUtil.toggle);
-});
diff --git a/_javascript/commons/tooltip-loader.js b/_javascript/commons/tooltip-loader.js
deleted file mode 100644
index 0b2f0b15..00000000
--- a/_javascript/commons/tooltip-loader.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Initial Bootstrap Tooltip.
- */
-$(function () {
- $("[data-toggle=\"tooltip\"]").tooltip();
-});
diff --git a/_javascript/commons/topbar-switcher.js b/_javascript/commons/topbar-switcher.js
deleted file mode 100644
index 91c857ef..00000000
--- a/_javascript/commons/topbar-switcher.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Hide Header on scroll down
- */
-
-$(function () {
- const $searchInput = $("#search-input");
- const delta = ScrollHelper.getTopbarHeight();
-
- let didScroll;
- let lastScrollTop = 0;
-
- function hasScrolled() {
- let st = $(this).scrollTop();
-
- /* Make sure they scroll more than delta */
- if (Math.abs(lastScrollTop - st) <= delta) {
- return;
- }
-
- if (st > lastScrollTop) { // Scroll Down
- ScrollHelper.hideTopbar();
-
- if ($searchInput.is(":focus")) {
- $searchInput.blur(); /* remove focus */
- }
-
- } else { // Scroll up
- // has not yet scrolled to the bottom of the screen, that is, there is still space for scrolling
- if (st + $(window).height() < $(document).height()) {
-
- if (ScrollHelper.hasScrollUpTask()) {
- return;
- }
-
- if (ScrollHelper.topbarLocked()) { // avoid redundant scroll up event from smooth scrolling
- ScrollHelper.unlockTopbar();
- } else {
- if (ScrollHelper.orientationLocked()) { // avoid device auto scroll up on orientation change
- ScrollHelper.unLockOrientation();
- } else {
- ScrollHelper.showTopbar();
- }
- }
- }
- }
-
- lastScrollTop = st;
-
- } // hasScrolled()
-
- function handleLandscape() {
- if ($(window).scrollTop() === 0) {
- return;
- }
- ScrollHelper.lockOrientation();
- ScrollHelper.hideTopbar();
- }
-
- if (screen.orientation) {
- screen.orientation.onchange = () => {
- const type = screen.orientation.type;
- if (type === "landscape-primary" || type === "landscape-secondary") {
- handleLandscape();
- }
- };
-
- } else {
- // for the browsers that not support `window.screen.orientation` API
- $(window).on("orientationchange", () => {
- if ($(window).width() < $(window).height()) { // before rotating, it is still in portrait mode.
- handleLandscape();
- }
- });
- }
-
- $(window).scroll(() => {
- if (didScroll) {
- return;
- }
- didScroll = true;
- });
-
- setInterval(() => {
- if (didScroll) {
- hasScrolled();
- didScroll = false;
- }
- }, 250);
-});
diff --git a/_javascript/commons/topbar-title.js b/_javascript/commons/topbar-title.js
deleted file mode 100644
index fd27a7d0..00000000
--- a/_javascript/commons/topbar-title.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Top bar title auto change while scrolling up/down in mobile screens.
- */
-
-$(function () {
- const titleSelector = "div.post>h1:first-of-type";
- const $pageTitle = $(titleSelector);
- const $topbarTitle = $("#topbar-title");
-
- if ($pageTitle.length === 0 /* on Home page */
- || $pageTitle.hasClass("dynamic-title")
- || $topbarTitle.is(":hidden")) {/* not in mobile views */
- return;
- }
-
- const defaultTitleText = $topbarTitle.text().trim();
- let pageTitleText = $pageTitle.text().trim();
- let hasScrolled = false;
- let lastScrollTop = 0;
-
- if ($("#page-category").length || $("#page-tag").length) {
- /* The title in Category or Tag page will be "{{- site.data.locales[site.lang].panel.lastmod -}}
- -
+
- {{ post.title }} +
- + {{ post.title }} + {% endfor %}
{{- site.data.locales[include.lang].panel.lastmod -}}
+-
{% for item in update_list %}
- {% assign index = item | split: "::" | last | plus: 0 %}
+ {% assign index = item | split: '::' | last | plus: 0 %}
{% assign post = site.posts[index] %}
{% assign url = post.url | relative_url %}
-
+{% assign df_strftime_m = site.data.locales[lang].df.archives.strftime | default: '/ %m' %}
+{% assign df_dayjs_m = site.data.locales[lang].df.archives.dayjs | default: '/ MM' %}
-{% for post in site.posts %}
- {% capture cur_year %}{{ post.date | date: "%Y" }}{% endcapture %}
+; ; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %}
{% endif %}{% endif %}
+{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" or page.compress_html == false %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "; ; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %}
{% endif %}{% endif %}
diff --git a/_layouts/default.html b/_layouts/default.html
index 6d1b0a52..704bebae 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -1,71 +1,87 @@
---
layout: compress
-# Default layout
---
-
+
-{% include assets-origin.html %}
+{% include origin-type.html %}
-{% capture prefer_mode %}
- {% if site.theme_mode %}
- data-mode="{{ site.theme_mode }}"
- {% endif %}
-{% endcapture %}
+{% include lang.html %}
-
+
+ {% include head.html lang=lang %}
- {% include head.html %}
-
-
-
- {% include sidebar.html %}
-
- {% include topbar.html %}
+
+ {% include sidebar.html lang=lang %}
-
-
-
+
{% if site.pwa.enabled %}
-
+ {% for post in site.posts %}
+ {% assign cur_year = post.date | date: '%Y' %}
- {% if cur_year != last_year %}
- {% unless forloop.first %}{% endunless %}
-
- {% assign ts = post.date | date: '%s' %}
- {{ post.date | date: "%d" }}
-
- {{ post.date | date: df_strftime_m }}
-
- {{ post.title }}
-
+
+ {{ '
+ {% assign ts = post.date | date: '%s' %}
+ {{ post.date | date: '%d' }}
+
+ {{ post.date | date: df_strftime_m }}
+
+ {{ post.title }}
+
+ {% if forloop.last %}{% endif %}
+ {% endfor %}
diff --git a/_layouts/categories.html b/_layouts/categories.html
index b207186d..05150970 100644
--- a/_layouts/categories.html
+++ b/_layouts/categories.html
@@ -3,8 +3,10 @@
# All the Categories of posts
---
-{% assign HEAD_PREFIX = "h_" %}
-{% assign LIST_PREFIX = "l_" %}
+{% include lang.html %}
+
+{% assign HEAD_PREFIX = 'h_' %}
+{% assign LIST_PREFIX = 'l_' %}
{% assign group_index = 0 %}
@@ -16,7 +18,7 @@
{% assign first_post = posts_of_category | first %}
{% if category_name == first_post.categories[0] %}
- {% assign sub_categories = "" | split: "" %}
+ {% assign sub_categories = '' | split: '' %}
{% for post in posts_of_category %}
{% assign second_category = post.categories[1] %}
@@ -30,89 +32,107 @@
{% assign sub_categories = sub_categories | sort %}
{% assign sub_categories_size = sub_categories | size %}
- {{ cur_year }}
- -
- {% assign last_year = cur_year %}
- {% endif %}
+ {% if cur_year != last_year %}
+ {% unless forloop.first %}
- ' }}
- {% if forloop.last %}
-
-
+
{% assign group_index = group_index | plus: 1 %}
-
{% endif %}
{% endfor %}
diff --git a/_layouts/category.html b/_layouts/category.html
index 07129bb0..b064f27c 100644
--- a/_layouts/category.html
+++ b/_layouts/category.html
@@ -3,20 +3,22 @@
# The Category layout
---
+{% include lang.html %}
+
-
-
-
- {% capture _category_url %}/categories/{{ category_name | slugify | url_encode }}/{% endcapture %}
- {{ category_name }}
-
-
- {% assign top_posts_size = site.categories[category_name] | size %}
-
- {% if sub_categories_size > 0 %}
- {{ sub_categories_size }}
- {% if sub_categories_size > 1 %}
- {{ site.data.locales[site.lang].categories.category_measure.plural
- | default: site.data.locales[site.lang].categories.category_measure }}
- {% else %}
- {{ site.data.locales[site.lang].categories.category_measure.singular
- | default: site.data.locales[site.lang].categories.category_measure }}
- {% endif %},
- {% endif %}
-
- {{ top_posts_size }}
-
- {% if top_posts_size > 1 %}
- {{ site.data.locales[site.lang].categories.post_measure.plural
- | default: site.data.locales[site.lang].categories.post_measure }}
- {% else %}
- {{ site.data.locales[site.lang].categories.post_measure.singular
- | default: site.data.locales[site.lang].categories.post_measure }}
- {% endif %}
-
-
-
-
- {% if sub_categories_size > 0%}
-
-
-
- {% else %}
-
-
-
- {% endif %}
+
+
+
+
+ {% if sub_categories_size > 0 %}
+
+
+
+
+ {% if sub_categories_size > 0 %}
+
+
+
+ {% else %}
+
+
+
+ {% endif %}
+
+
+
-
+ {% capture _category_url %}/categories/{{ category_name | slugify | url_encode }}/{% endcapture %}
+ {{ category_name }}
-
- {% if sub_categories_size > 0 %}
-
-
- {% endif %}
+
- -
- {% for sub_category in sub_categories %}
-
- - - - {% capture _sub_ctg_url %}/categories/{{ sub_category | slugify | url_encode }}/{% endcapture %} - {{ sub_category }} - - {% assign posts_size = site.categories[sub_category] | size %} + + {% assign top_posts_size = site.categories[category_name] | size %} - {{ posts_size }} + {% if sub_categories_size > 0 %} + {{ sub_categories_size }} + {% if sub_categories_size > 1 %} + {{ + site.data.locales[lang].categories.category_measure.plural + | default: site.data.locales[lang].categories.category_measure + }} + {% else %} + {{ + site.data.locales[lang].categories.category_measure.singular + | default: site.data.locales[lang].categories.category_measure + }} + {% endif -%} + , + {% endif %} - {% if posts_size > 1 %} - {{ site.data.locales[site.lang].categories.post_measure.plural - | default: site.data.locales[site.lang].categories.post_measure }} + {{ top_posts_size }} + + {% if top_posts_size > 1 %} + {{ + site.data.locales[lang].categories.post_measure.plural + | default: site.data.locales[lang].categories.post_measure + }} {% else %} - {{ site.data.locales[site.lang].categories.post_measure.singular - | default: site.data.locales[site.lang].categories.post_measure }} + {{ + site.data.locales[lang].categories.post_measure.singular + | default: site.data.locales[lang].categories.post_measure + }} {% endif %} - - {% endfor %} -
+
+ {% endif %}
+ -
+ {% for sub_category in sub_categories %}
+
- + + + {% capture _sub_ctg_url %}/categories/{{ sub_category | slugify | url_encode }}/{% endcapture %} + {{ sub_category }} + + {% assign posts_size = site.categories[sub_category] | size %} + + {{ posts_size }} + + {% if posts_size > 1 %} + {{ + site.data.locales[lang].categories.post_measure.plural + | default: site.data.locales[lang].categories.post_measure + }} + {% else %} + {{ + site.data.locales[lang].categories.post_measure.singular + | default: site.data.locales[lang].categories.post_measure + }} + {% endif %} + + + {% endfor %} +
-
+
diff --git a/_layouts/compress.html b/_layouts/compress.html
index bb34487d..2779e92a 100644
--- a/_layouts/compress.html
+++ b/_layouts/compress.html
@@ -1,10 +1,10 @@
---
# Jekyll layout that compresses HTML
-# v3.1.0
+# v3.2.0
# http://jch.penibelst.de/
# © 2014–2015 Anatol Broder
# MIT License
---
{% capture _LINE_FEED %}
-{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "
+
{{ page.title }}
- {{ page.posts | size }}
+ {{ page.posts | size }}
-
+
{% for post in page.posts %}
- -
- {{ post.title }}
-
- {% include datetime.html date=post.date wrap='span' class='text-muted small' %}
-
+ -
+ {{ post.title }}
+
+ {% include datetime.html date=post.date class='text-muted small text-nowrap' lang=lang %}
+
{% endfor %}
-
{% for post in page.posts %}
-
- - {{ post.title }} - - {% include datetime.html date=post.date wrap='span' class='text-muted small' %} - +
- + {{ post.title }} + + {% include datetime.html date=post.date class='text-muted small text-nowrap' lang=lang %} + {% endfor %}
" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " | Step | Bytes |
| raw | {{ content | size }}{% if _profile_endings %} |
| endings | {{ _profile_endings }}{% endif %}{% if _profile_startings %} |
| startings | {{ _profile_startings }}{% endif %}{% if _profile_comments %} |
| comments | {{ _profile_comments }}{% endif %}{% if _profile_collapse %} |
| collapse | {{ _profile_collapse }}{% endif %}{% if _profile_clippings %} |
| clippings | {{ _profile_clippings }}{% endif %} |
" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " | Step | Bytes |
| raw | {{ content | size }}{% if _profile_endings %} |
| endings | {{ _profile_endings }}{% endif %}{% if _profile_startings %} |
| startings | {{ _profile_startings }}{% endif %}{% if _profile_comments %} |
| comments | {{ _profile_comments }}{% endif %}{% if _profile_collapse %} |
| collapse | {{ _profile_collapse }}{% endif %}{% if _profile_clippings %} |
| clippings | {{ _profile_clippings }}{% endif %} |
-
-
+
+
- {{ content }}
-
-
- {% include search-results.html %}
+
+ {% include topbar.html lang=lang %}
+
+
+
+
+ {% if layout.layout == 'default' %}
+ {% include refactor-content.html content=content lang=lang %}
+ {% else %}
+ {{ content }}
+ {% endif %}
+
+
+
+
+
-
+
+
- {% if page.mermaid %}
- {% include mermaid.html %}
- {% endif %}
+ {% include_cached search-results.html lang=lang %}
+
+ {% for _include in layout.tail_includes %}
+ {% assign _include_path = _include | append: '.html' %}
+ {% include {{ _include_path }} lang=lang %}
+ {% endfor %}
- {% include footer.html %}
+ {% include_cached footer.html lang=lang %}
+
+
-
+ {% include_cached notification.html lang=lang %}
{% endif %}
- {% include search-loader.html %}
+
- {% include js-selector.html %}
+ {% for _include in layout.script_includes %}
+ {% assign _include_path = _include | append: '.html' %}
+ {% include {{ _include_path }} %}
+ {% endfor %}
+ {% include_cached search-loader.html lang=lang %}
-
diff --git a/_layouts/home.html b/_layouts/home.html
index ad5328d6..0161ad8f 100644
--- a/_layouts/home.html
+++ b/_layouts/home.html
@@ -1,99 +1,140 @@
---
-layout: page
-# The Home page layout
+layout: default
---
-{% assign pinned = site.posts | where: "pin", "true" %}
-{% assign default = site.posts | where_exp: "item", "item.pin != true and item.hidden != true" %}
+{% include lang.html %}
-{% assign posts = "" | split: "" %}
+{% assign all_pinned = site.posts | where: 'pin', 'true' %}
+{% assign all_normal = site.posts | where_exp: 'item', 'item.pin != true and item.hidden != true' %}
-
+{% assign posts = '' | split: '' %}
-{% assign offset = paginator.page | minus: 1 | times: paginator.per_page %}
-{% assign pinned_num = pinned.size | minus: offset %}
+
-{% if pinned_num > 0 %}
- {% for i in (offset..pinned.size) limit: pinned_num %}
- {% assign posts = posts | push: pinned[i] %}
+{% assign visible_start = paginator.page | minus: 1 | times: paginator.per_page %}
+{% assign visible_end = visible_start | plus: paginator.per_page %}
+
+{% if all_pinned.size > visible_start %}
+ {% if all_pinned.size > visible_end %}
+ {% assign pinned_size = paginator.per_page %}
+ {% else %}
+ {% assign pinned_size = all_pinned.size | minus: visible_start %}
+ {% endif %}
+
+ {% for i in (visible_start..all_pinned.size) limit: pinned_size %}
+ {% assign posts = posts | push: all_pinned[i] %}
{% endfor %}
{% else %}
- {% assign pinned_num = 0 %}
+ {% assign pinned_size = 0 %}
{% endif %}
-
+
-{% assign default_beg = offset | minus: pinned.size %}
+{% assign normal_size = paginator.posts | size | minus: pinned_size %}
-{% if default_beg < 0 %}
- {% assign default_beg = 0 %}
-{% endif %}
+{% if normal_size > 0 %}
+ {% if pinned_size > 0 %}
+ {% assign normal_start = 0 %}
+ {% else %}
+ {% assign normal_start = visible_start | minus: all_pinned.size %}
+ {% endif %}
-{% assign default_num = paginator.posts | size | minus: pinned_num %}
-{% assign default_end = default_beg | plus: default_num | minus: 1 %}
+ {% assign normal_end = normal_start | plus: normal_size | minus: 1 %}
-{% if default_num > 0 %}
- {% for i in (default_beg..default_end) %}
- {% assign posts = posts | push: default[i] %}
+ {% for i in (normal_start..normal_end) %}
+ {% assign posts = posts | push: all_normal[i] %}
{% endfor %}
{% endif %}
-
+
-{% if paginator.total_pages > 0 %}
+{% if paginator.total_pages > 1 %}
{% include post-paginator.html %}
{% endif %}
diff --git a/_layouts/page.html b/_layouts/page.html
index 4285c858..32d6582a 100644
--- a/_layouts/page.html
+++ b/_layouts/page.html
@@ -2,62 +2,19 @@
layout: default
---
-{% include assets-origin.html %}
-
-
-
-
-
-
- {{ site.data.locales[site.lang].notification.update_found }}
- -
-
-
-
-
-
-
-{% if layout.tail_includes %}
-
-
- {% capture _content %}
- {% if layout.refactor or page.layout == 'page' %}
- {% include refactor-content.html content=content %}
- {% else %}
- {{ content }}
- {% endif %}
- {% endcapture %}
-
- {% if page.layout == 'page' or page.collection == 'tabs' %}
- {% assign tab_key = page.title | downcase %}
- {% assign title = site.data.locales[site.lang].tabs[tab_key] | default: page.title %}
-
+ {% if page.layout == 'page' or page.collection == 'tabs' %}
+ {% assign tab_key = page.title | downcase %}
+ {% assign title = site.data.locales[lang].tabs[tab_key] | default: page.title %}
+
-
-
- - {{ title }} -
-
- {{ _content }}
-
- {% else %}
- {{ _content }}
- {% endif %}
-
+{% include lang.html %}
+
++ {{ title }} +
+
+ {{ content }}
-
-
-
-
-
- {% include update-list.html %}
- {% include trending-tags.html %}
-
-
- {% for _include in layout.panel_includes %}
- {% assign _include_path = _include | append: '.html' %}
- {% include {{ _include_path }} %}
- {% endfor %}
-
-
-{% endif %}
+ {% else %}
+ {{ content }}
+ {% endif %}
+
diff --git a/_layouts/post.html b/_layouts/post.html
index 2e02bfa9..7eab3d45 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -1,154 +1,183 @@
---
-layout: page
-refactor: true
+layout: default
panel_includes:
- toc
tail_includes:
+ - fediverse-comments
- related-posts
- post-nav
- - comments
+script_includes:
+ - comment
+ - legacy-lightbox
---
-
- {% for _include in layout.tail_includes %}
- {% assign _include_path = _include | append: '.html' %}
- {% include {{ _include_path }} %}
- {% endfor %}
-
-{{ page.title }}
- -
-
-
- {{ site.data.locales[site.lang].post.posted }}
- {% include datetime.html date=page.date tooltip=true %}
-
-
-
- {% if page.last_modified_at %}
-
- {{ site.data.locales[site.lang].post.updated }}
- {% include datetime.html date=page.last_modified_at tooltip=true %}
-
- {% endif %}
-
- {% if page.image %}
- {% capture bg %}
- {% unless page.image.no_bg %}{{ 'bg' }}{% endunless %}
- {% endcapture %}
-
-
-
-
- {% if page.image.alt %}
- {{ page.image.alt }}
- {% endif %}
-
-
- {% endif %}
+{% include toc-status.html %}
-
-
-
- {% if page.author %}
- {% assign authors = page.author %}
- {% elsif page.authors %}
- {% assign authors = page.authors %}
- {% endif %}
+
+
+
-
-{{ page.title }}
+ {% if page.description %} +{{ page.description }}
+ {% endif %} - {{ site.data.locales[site.lang].post.written_by }} +
+
+
+ {{ site.data.locales[lang].post.posted }}
+ {% include datetime.html date=page.date tooltip=true lang=lang %}
+
-
- {% if authors %}
- {% for author in authors %}
- {{ site.data.authors[author].name }}
- {% unless forloop.last %}, {% endunless %}
- {% endfor %}
- {% else %}
- {{ site.social.name }}
+
+ {% if page.last_modified_at and page.last_modified_at != page.date %}
+
+ {{ site.data.locales[lang].post.updated }}
+ {% include datetime.html date=page.last_modified_at tooltip=true lang=lang %}
+
{% endif %}
-
-
-
-
-
-
- {% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
-
-
-
-
- {{ site.data.locales[site.lang].post.pageview_measure }}
-
+ {% if page.image %}
+ {% capture src %}src="{{ page.image.path | default: page.image }}"{% endcapture %}
+ {% capture class %}class="preview-img{% if page.image.no_bg %}{{ ' no-bg' }}{% endif %}"{% endcapture %}
+ {% capture alt %}alt="{{ page.image.alt | xml_escape | default: "Preview Image" }}"{% endcapture %}
+
+ {% if page.image.lqip %}
+ {%- capture lqip -%}lqip="{{ page.image.lqip }}"{%- endcapture -%}
+ {% endif %}
+
+
+
+
+ {% if enable_toc %}
+
+
+ {%- if page.image.alt -%}
+ {{ page.image.alt }}
+ {%- endif -%}
+
{% endif %}
-
- {% include read-time.html content=content prompt=true %}
+
+
+
+ {% if page.author %}
+ {% assign authors = page.author %}
+ {% elsif page.authors %}
+ {% assign authors = page.authors %}
+ {% endif %}
+
+ {{ site.data.locales[lang].post.written_by }}
+
+
+ {% if authors %}
+ {% for author in authors %}
+ {% if site.data.authors[author].url -%}
+ {{ site.data.authors[author].name }}
+ {%- else -%}
+ {{ site.data.authors[author].name }}
+ {%- endif %}
+ {% unless forloop.last %}{{ ', ' }}{% endunless %}
+ {% endfor %}
+ {% else %}
+ {{ site.social.name }}
+ {% endif %}
+
+
+
+
+
+
+ {% if site.pageviews.provider and site.analytics[site.pageviews.provider].id %}
+
+
+
+
+ {{ site.data.locales[lang].post.pageview_measure }}
+
+ {% endif %}
+
+
+ {% include read-time.html content=content prompt=true lang=lang %}
+
+
+ {{ page.title }}
+
-
- {{ content }}
-
-
-
-
-
- {% if page.categories.size > 0 %}
-
-
- {% for category in page.categories %}
- {{ category }}
- {%- unless forloop.last -%}, {%- endunless -%}
- {% endfor %}
-
+
+
+
{% endif %}
-
- {% if page.tags.size > 0 %}
-
-
- {% for tag in page.tags %}
-
- {{- tag -}}
-
- {% endfor %}
+
+ {{ content }}
- {% endif %}
-
-
+
+
diff --git a/_layouts/tag.html b/_layouts/tag.html
index 5fd528f5..d766d099 100644
--- a/_layouts/tag.html
+++ b/_layouts/tag.html
@@ -3,19 +3,21 @@
# The layout for Tag page
---
+{% include lang.html %}
+
+
+
+
+
-
- {% if page.comments.id %}
- {% include fediverse_comments.html %}
- {% endif %}
-
-
+
+ {% if page.categories.size > 0 %}
+
- {% if site.data.locales[site.lang].copyright.license.template %}
+
+ {% if page.tags.size > 0 %}
+
+
+ {% for category in page.categories %}
+ {{ category }}
+ {%- unless forloop.last -%},{%- endunless -%}
+ {% endfor %}
+
+ {% endif %}
+
+
+ {% include post-edit.html lang=lang %}
+
+
+ {% for tag in page.tags %}
+
+ {{- tag -}}
+
+ {% endfor %}
+
+ {% endif %}
- {% capture _replacement %}
-
- {{ site.data.locales[site.lang].copyright.license.name }}
+
+
-
- {% include post-sharing.html %}
-
-
+ {% if site.data.locales[lang].copyright.license.template %}
+ {% capture _replacement %}
+
+ {{ site.data.locales[lang].copyright.license.name }}
{% endcapture %}
- {{ site.data.locales[site.lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }}
+ {{ site.data.locales[lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }}
+ {% endif %}
+
- {% endif %}
+ {% include post-sharing.html lang=lang %}
-
+
diff --git a/_layouts/tags.html b/_layouts/tags.html
index b3321f7f..7800ca0f 100644
--- a/_layouts/tags.html
+++ b/_layouts/tags.html
@@ -3,9 +3,8 @@
# All the Tags of posts.
---
-
+
{{ page.title }}
- {{ page.posts | size }}
+ {{ page.posts | size }}
-
+
{% for post in page.posts %}
- -
- {{ post.title }}
-
- {% include datetime.html date=post.date wrap='span' class='text-muted small' %}
-
+ -
+ {{ post.title }}
+
+ {% include datetime.html date=post.date class='text-muted small text-nowrap' lang=lang %}
+
{% endfor %}
-
{% for post in page.posts %}
-
- - {{ post.title }} - - {% include datetime.html date=post.date wrap='span' class='text-muted small' %} - +
- + {{ post.title }} + + {% include datetime.html date=post.date class='text-muted small text-nowrap' lang=lang %} + {% endfor %}
-
- {% assign tags = "" | split: "" %}
+ */
- .highlight .hll { background-color: #ffffcc; }
- .highlight .c { color: #999988; font-style: italic; } /* Comment */
- .highlight .err { color: #a61717; background-color: #e3d2d2; } /* Error */
- .highlight .k { color: #000000; font-weight: bold; } /* Keyword */
- .highlight .o { color: #000000; font-weight: bold; } /* Operator */
- .highlight .cm { color: #999988; font-style: italic; } /* Comment.Multiline */
- .highlight .cp { color: #999999; font-weight: bold; font-style: italic; } /* Comment.Preproc */
- .highlight .c1 { color: #999988; font-style: italic; } /* Comment.Single */
- .highlight .cs { color: #999999; font-weight: bold; font-style: italic; } /* Comment.Special */
- .highlight .gd { color: #d01040; background-color: #ffdddd; } /* Generic.Deleted */
- .highlight .ge { color: #000000; font-style: italic; } /* Generic.Emph */
- .highlight .gr { color: #aa0000; } /* Generic.Error */
- .highlight .gh { color: #999999; } /* Generic.Heading */
- .highlight .gi { color: #008080; background-color: #ddffdd; } /* Generic.Inserted */
- .highlight .go { color: #888888; } /* Generic.Output */
- .highlight .gp { color: #555555; } /* Generic.Prompt */
- .highlight .gs { font-weight: bold; } /* Generic.Strong */
- .highlight .gu { color: #aaaaaa; } /* Generic.Subheading */
- .highlight .gt { color: #aa0000; } /* Generic.Traceback */
- .highlight .kc { color: #000000; font-weight: bold; } /* Keyword.Constant */
- .highlight .kd { color: #000000; font-weight: bold; } /* Keyword.Declaration */
- .highlight .kn { color: #000000; font-weight: bold; } /* Keyword.Namespace */
- .highlight .kp { color: #000000; font-weight: bold; } /* Keyword.Pseudo */
- .highlight .kr { color: #000000; font-weight: bold; } /* Keyword.Reserved */
- .highlight .kt { color: #445588; font-weight: bold; } /* Keyword.Type */
- .highlight .m { color: #009999; } /* Literal.Number */
- .highlight .s { color: #d01040; } /* Literal.String */
- .highlight .na { color: #008080; } /* Name.Attribute */
- .highlight .nb { color: #0086b3; } /* Name.Builtin */
- .highlight .nc { color: #445588; font-weight: bold; } /* Name.Class */
- .highlight .no { color: #008080; } /* Name.Constant */
- .highlight .nd { color: #3c5d5d; font-weight: bold; } /* Name.Decorator */
- .highlight .ni { color: #800080; } /* Name.Entity */
- .highlight .ne { color: #990000; font-weight: bold; } /* Name.Exception */
- .highlight .nf { color: #990000; font-weight: bold; } /* Name.Function */
- .highlight .nl { color: #990000; font-weight: bold; } /* Name.Label */
- .highlight .nn { color: #555555; } /* Name.Namespace */
- .highlight .nt { color: #000080; } /* Name.Tag */
- .highlight .nv { color: #008080; } /* Name.Variable */
- .highlight .ow { color: #000000; font-weight: bold; } /* Operator.Word */
- .highlight .w { color: #bbbbbb; } /* Text.Whitespace */
- .highlight .mf { color: #009999; } /* Literal.Number.Float */
- .highlight .mh { color: #009999; } /* Literal.Number.Hex */
- .highlight .mi { color: #009999; } /* Literal.Number.Integer */
- .highlight .mo { color: #009999; } /* Literal.Number.Oct */
- .highlight .sb { color: #d01040; } /* Literal.String.Backtick */
- .highlight .sc { color: #d01040; } /* Literal.String.Char */
- .highlight .sd { color: #d01040; } /* Literal.String.Doc */
- .highlight .s2 { color: #d01040; } /* Literal.String.Double */
- .highlight .se { color: #d01040; } /* Literal.String.Escape */
- .highlight .sh { color: #d01040; } /* Literal.String.Heredoc */
- .highlight .si { color: #d01040; } /* Literal.String.Interpol */
- .highlight .sx { color: #d01040; } /* Literal.String.Other */
- .highlight .sr { color: #009926; } /* Literal.String.Regex */
- .highlight .s1 { color: #d01040; } /* Literal.String.Single */
- .highlight .ss { color: #990073; } /* Literal.String.Symbol */
- .highlight .bp { color: #999999; } /* Name.Builtin.Pseudo */
- .highlight .vc { color: #008080; } /* Name.Variable.Class */
- .highlight .vg { color: #008080; } /* Name.Variable.Global */
- .highlight .vi { color: #008080; } /* Name.Variable.Instance */
- .highlight .il { color: #009999; } /* Literal.Number.Integer.Long */
-
- /* --- custom light colors --- */
- --highlight-bg-color: #f7f7f7;
- --highlighter-rouge-color: #2f2f2f;
- --highlight-lineno-color: #c2c6cc;
- --inline-code-bg: #f3f3f3;
- --code-header-text-color: #a3a3b1;
- --code-header-muted-color: #ebebeb;
- --code-header-icon-color: #d1d1d1;
- --clipboard-checked-color: #43c743;
-
- [class^="prompt-"] {
- --inline-code-bg: #fbfafa;
- --highlighter-rouge-color: rgb(82, 82, 82);
- }
-} /* light-syntax */
diff --git a/_sass/colors/light-typography.scss b/_sass/colors/light-typography.scss
deleted file mode 100644
index 5e653f95..00000000
--- a/_sass/colors/light-typography.scss
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The syntax light mode typography colors
- */
-
-@mixin light-scheme {
- /* Framework color */
- --body-bg: #fafafa;
- --mask-bg: #c1c3c5;
- --main-bg: white;
- --main-border-color: #f3f3f3;
-
- /* Common color */
- --text-color: #34343c;
- --text-muted-color: gray;
- --heading-color: black;
- --blockquote-border-color: #eeeeee;
- --blockquote-text-color: #9a9a9a;
- --link-color: #2a408e;
- --link-underline-color: #dee2e6;
- --button-bg: #ffffff;
- --btn-border-color: #e9ecef;
- --btn-backtotop-color: #686868;
- --btn-backtotop-border-color: #f1f1f1;
- --btn-box-shadow: #eaeaea;
- --checkbox-color: #c5c5c5;
- --checkbox-checked-color: #07a8f7;
-
- /* Sidebar */
- --sidebar-bg: #eeeeee;
- --sidebar-muted-color: #a2a19f;
- --sidebar-active-color: #424242;
- --nav-cursor-color: #757575;
- --sidebar-btn-bg: white;
-
- /* Topbar */
- --topbar-text-color: rgb(78, 78, 78);
- --topbar-wrapper-bg: white;
- --search-wrapper-bg: rgb(245, 245, 245, 0.5);
- --search-wrapper-border-color: rgb(245, 245, 245);
- --search-tag-bg: #f8f9fa;
- --search-icon-color: #c2c6cc;
- --input-focus-border-color: var(--btn-border-color);
-
- /* Home page */
- --post-list-text-color: dimgray;
- --btn-patinator-text-color: #555555;
- --btn-paginator-hover-color: var(--sidebar-bg);
- --btn-paginator-border-color: var(--sidebar-bg);
- --btn-text-color: #676666;
- --pin-bg: #f5f5f5;
- --pin-color: #999fa4;
-
- /* Posts */
- --btn-share-hover-color: var(--link-color);
- --card-border-color: #f1f1f1;
- --card-box-shadow: rgba(234, 234, 234, 0.76);
- --label-color: #616161;
- --relate-post-date: rgba(30, 55, 70, 0.4);
- --footnote-target-bg: lightcyan;
- --tag-bg: rgba(0, 0, 0, 0.075);
- --tag-border: #dee2e6;
- --tag-shadow: var(--btn-border-color);
- --tag-hover: rgb(222, 226, 230);
- --tb-odd-bg: #fbfcfd;
- --tb-border-color: #eaeaea;
- --dash-color: silver;
- --preview-img-bg: radial-gradient(circle, rgb(255, 255, 255) 0%, rgb(249, 249, 249) 100%);
- --kbd-wrap-color: #bdbdbd;
- --kbd-text-color: var(--text-color);
- --kbd-bg-color: white;
- --prompt-text-color: rgb(46, 46, 46, 0.77);
- --prompt-tip-bg: rgb(123, 247, 144, 0.2);
- --prompt-tip-icon-color: #03b303;
- --prompt-info-bg: #e1f5fe;
- --prompt-info-icon-color: #0070cb;
- --prompt-warning-bg: rgb(255, 243, 205);
- --prompt-warning-icon-color: #ef9c03;
- --prompt-danger-bg: rgb(248, 215, 218, 0.56);
- --prompt-danger-icon-color: #df3c30;
-
- [class^="prompt-"] {
- --link-underline-color: rgb(219, 216, 216);
- }
-
- /* Categories */
- --categories-hover-bg: var(--btn-border-color);
- --categories-icon-hover-color: darkslategray;
-
- /* Archive */
- --timeline-color: rgba(0, 0, 0, 0.075);
- --timeline-node-bg: #c2c6cc;
- --timeline-year-dot-color: #ffffff;
-} /* light-scheme */
diff --git a/_sass/components/_buttons.scss b/_sass/components/_buttons.scss
new file mode 100644
index 00000000..bd7363e5
--- /dev/null
+++ b/_sass/components/_buttons.scss
@@ -0,0 +1,51 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+
+#back-to-top {
+ visibility: hidden;
+ opacity: 0;
+ z-index: 1;
+ cursor: pointer;
+ position: fixed;
+ right: 1rem;
+ bottom: calc(v.$footer-height-large - v.$back2top-size / 2);
+ background: var(--button-bg);
+ color: var(--btn-backtotop-color);
+ padding: 0;
+ width: v.$back2top-size;
+ height: v.$back2top-size;
+ border-radius: 50%;
+ border: 1px solid var(--btn-backtotop-border-color);
+ transition: opacity 0.5s ease-in-out, transform 0.2s ease-out;
+
+ @include bp.lg {
+ right: 5%;
+ bottom: calc(v.$footer-height - v.$back2top-size / 2);
+ }
+
+ @include bp.xxl {
+ right: calc((100vw - v.$sidebar-width - 1140px) / 2 + 3rem);
+ }
+
+ @include bp.xxxl {
+ right: calc(
+ (100vw - v.$sidebar-width-large - v.$main-content-max-width) / 2 + 2rem
+ );
+ }
+
+ &:hover {
+ transform: translate3d(0, -5px, 0);
+ -webkit-transform: translate3d(0, -5px, 0);
+ }
+
+ i {
+ line-height: v.$back2top-size;
+ position: relative;
+ bottom: 2px;
+ }
+
+ &.show {
+ opacity: 1;
+ visibility: visible;
+ }
+}
diff --git a/_sass/components/_index.scss b/_sass/components/_index.scss
new file mode 100644
index 00000000..ffbb9083
--- /dev/null
+++ b/_sass/components/_index.scss
@@ -0,0 +1,2 @@
+@forward 'buttons';
+@forward 'popups';
diff --git a/_sass/components/_popups.scss b/_sass/components/_popups.scss
new file mode 100644
index 00000000..2511b486
--- /dev/null
+++ b/_sass/components/_popups.scss
@@ -0,0 +1,161 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+/* PWA update popup */
+#notification {
+ @-webkit-keyframes popup {
+ from {
+ opacity: 0;
+ bottom: 10%;
+ }
+ }
+
+ @keyframes popup {
+ from {
+ opacity: 0;
+ bottom: 10%;
+ }
+ }
+
+ &.toast {
+ &.show {
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ position: fixed;
+ left: 50%;
+ bottom: 30%;
+ transform: translateX(-50%);
+ -webkit-animation: popup 0.8s;
+ animation: popup 0.8s;
+ }
+
+ .toast-body {
+ line-height: 1.25rem;
+ font-family: v.$font-family-heading;
+ }
+
+ button[aria-label='Update'] {
+ font-size: 0.8rem;
+ }
+
+ .btn-close {
+ font-size: 0.625rem;
+ }
+ }
+}
+
+#toc-popup {
+ $slide-in: slide-in 0.3s ease-out;
+ $slide-out: slide-out 0.3s ease-out;
+ $curtain-height: 2rem;
+ $backdrop: blur(5px);
+
+ border-color: var(--toc-popup-border-color);
+ border-width: 1px;
+ border-radius: v.$radius-lg;
+ color: var(--text-color);
+ background: var(--card-bg);
+ margin-top: v.$topbar-height;
+ min-width: 20rem;
+ font-size: 1.05rem;
+
+ @include bp.sm {
+ max-width: 32rem;
+ }
+
+ &[open] {
+ -webkit-animation: $slide-in;
+ animation: $slide-in;
+ }
+
+ &[closing] {
+ -webkit-animation: $slide-out;
+ animation: $slide-out;
+ }
+
+ @include bp.lg {
+ left: v.$sidebar-width;
+ }
+
+ .header {
+ @extend %btn-color;
+
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ background-color: inherit;
+ border-bottom: 1px solid var(--main-border-color);
+
+ .label {
+ font-family: v.$font-family-heading;
+ }
+ }
+
+ button {
+ font-size: 0.75rem;
+
+ &:focus-visible {
+ box-shadow: none;
+ }
+ }
+
+ ul {
+ list-style-type: none;
+ padding-left: 0;
+
+ li {
+ ul,
+ & + li {
+ margin-top: 0.25rem;
+ }
+
+ a {
+ display: flex;
+ line-height: 1.5;
+ padding: 0.375rem 0;
+ padding-right: 1.125rem;
+
+ &.toc-link::before {
+ display: none;
+ }
+ }
+ }
+ }
+
+ @for $i from 2 through 4 {
+ .node-name--H#{$i} {
+ padding-left: 1.125rem * ($i - 1);
+ }
+ }
+
+ .is-active-link {
+ color: var(--toc-highlight) !important;
+ font-weight: 600;
+ }
+
+ &::-webkit-backdrop {
+ -webkit-backdrop-filter: $backdrop;
+ backdrop-filter: $backdrop;
+ }
+
+ &::backdrop {
+ -webkit-backdrop-filter: $backdrop;
+ backdrop-filter: $backdrop;
+ }
+
+ &::after {
+ display: flex;
+ content: '';
+ position: relative;
+ background: linear-gradient(transparent, var(--card-bg) 70%);
+ height: $curtain-height;
+ }
+
+ #toc-popup-content {
+ overflow: auto;
+ max-height: calc(100vh - 4 * v.$topbar-height);
+ font-family: v.$font-family-heading;
+ margin-bottom: -$curtain-height;
+ }
+}
diff --git a/_sass/jekyll-theme-chirpy.scss b/_sass/jekyll-theme-chirpy.scss
deleted file mode 100644
index e1c42bc2..00000000
--- a/_sass/jekyll-theme-chirpy.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-/*!
- * The styles for Jekyll theme Chirpy
- *
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy)
- * © 2019 Cotes Chung
- * MIT Licensed
- */
-
-@import
- "colors/light-typography",
- "colors/dark-typography",
-
- "addon/module",
- "addon/variables",
- "variables-hook",
- "addon/syntax",
- "addon/commons",
-
- "layout/home",
- "layout/post",
- "layout/tags",
- "layout/archives",
- "layout/categories",
- "layout/category-tag";
diff --git a/_sass/layout/_footer.scss b/_sass/layout/_footer.scss
new file mode 100644
index 00000000..fd49ea04
--- /dev/null
+++ b/_sass/layout/_footer.scss
@@ -0,0 +1,36 @@
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/variables' as v;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+footer {
+ background-color: var(--main-bg);
+ height: v.$footer-height;
+ border-top: 1px solid var(--main-border-color);
+
+ @extend %text-xs;
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide;
+
+ height: v.$footer-height-large;
+ padding: 1.5rem 0;
+ }
+
+ a {
+ @extend %text-highlight;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+
+ em {
+ @extend %text-highlight;
+ }
+
+ p {
+ text-align: center;
+ margin-bottom: 0;
+ }
+}
diff --git a/_sass/layout/_index.scss b/_sass/layout/_index.scss
new file mode 100644
index 00000000..fa75daf9
--- /dev/null
+++ b/_sass/layout/_index.scss
@@ -0,0 +1,4 @@
+@forward 'sidebar';
+@forward 'topbar';
+@forward 'panel';
+@forward 'footer';
diff --git a/_sass/layout/_panel.scss b/_sass/layout/_panel.scss
new file mode 100644
index 00000000..c0d5e9eb
--- /dev/null
+++ b/_sass/layout/_panel.scss
@@ -0,0 +1,70 @@
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+.access {
+ top: 2rem;
+ transition: top 0.2s ease-in-out;
+ margin-top: 3rem;
+
+ &:only-child {
+ position: -webkit-sticky;
+ position: sticky;
+ }
+
+ > section {
+ @extend %panel-border;
+
+ padding-left: 1rem;
+
+ &:not(:first-child) {
+ margin-top: 4rem;
+ }
+ }
+
+ .content {
+ font-size: 0.9rem;
+ }
+}
+
+#panel-wrapper {
+ /* the headings */
+ .panel-heading {
+ font-family: inherit;
+ line-height: inherit;
+
+ @include mx.label(inherit);
+ }
+
+ .post-tag {
+ line-height: 1.05rem;
+ font-size: 0.85rem;
+ border-radius: 0.8rem;
+ padding: 0.3rem 0.5rem;
+ margin: 0 0.35rem 0.5rem 0;
+
+ &:hover {
+ transition: all 0.3s ease-in;
+ }
+ }
+
+ > :last-child {
+ margin-bottom: 4rem;
+ }
+
+ @include bp.lt(bp.get(xl)) {
+ display: none;
+ }
+}
+
+#access-lastmod {
+ a {
+ color: inherit;
+
+ &:hover {
+ @extend %link-hover;
+ }
+
+ @extend %no-bottom-border;
+ }
+}
diff --git a/_sass/layout/_sidebar.scss b/_sass/layout/_sidebar.scss
new file mode 100644
index 00000000..913c5fcb
--- /dev/null
+++ b/_sass/layout/_sidebar.scss
@@ -0,0 +1,346 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+$btn-border-width: 3px;
+$btn-mb: 0.5rem;
+$sidebar-display: 'sidebar-display'; /* the attribute for sidebar display */
+
+#sidebar {
+ @include mx.pl-pr(0);
+
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100%;
+ overflow-y: auto;
+ width: v.$sidebar-width;
+ background: var(--sidebar-bg);
+
+ /* Hide scrollbar for IE, Edge and Firefox */
+ -ms-overflow-style: none; /* IE and Edge */
+ scrollbar-width: none; /* Firefox */
+
+ /* Hide scrollbar for Chrome, Safari and Opera */
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide;
+
+ transform: translateX(-#{v.$sidebar-width}); /* hide */
+ -webkit-transform: translateX(-#{v.$sidebar-width});
+
+ [#{$sidebar-display}] & {
+ transform: translateX(0);
+ }
+ }
+
+ @include bp.xxxl {
+ width: v.$sidebar-width-large;
+ }
+
+ %sidebar-link-hover {
+ &:hover {
+ color: var(--sidebar-active-color);
+ }
+ }
+
+ a {
+ @extend %sidebar-links;
+ }
+
+ #avatar {
+ display: block;
+ width: 6.5rem;
+ height: 6.5rem;
+ overflow: hidden;
+ box-shadow: var(--avatar-border-color) 0 0 0 2px;
+ transform: translateZ(0); /* fixed the zoom in Safari */
+
+ @include bp.sm {
+ width: 7rem;
+ height: 7rem;
+ }
+
+ img {
+ transition: transform 0.5s;
+
+ &:hover {
+ transform: scale(1.2);
+ }
+ }
+ }
+
+ .profile-wrapper {
+ @extend %clickable-transition;
+
+ padding-left: 2.5rem;
+ padding-right: 1.25rem;
+ margin-top: 2.5rem;
+ margin-bottom: 1rem;
+ width: 100%;
+
+ @include bp.lg {
+ margin-top: 3rem;
+ }
+
+ @include bp.xxxl {
+ margin-top: 3.5rem;
+ margin-bottom: 2.5rem;
+ padding-left: 3.5rem;
+ }
+ }
+
+ .site-title {
+ @extend %clickable-transition;
+ @extend %sidebar-link-hover;
+
+ font-family: inherit;
+ font-weight: 900;
+ font-size: 1.75rem;
+ line-height: 1.2;
+ letter-spacing: 0.25px;
+ margin-top: 1.25rem;
+ margin-bottom: 0.5rem;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+ color: var(--site-title-color);
+ }
+
+ .site-subtitle {
+ font-size: 95%;
+ color: var(--site-subtitle-color);
+ margin-top: 0.25rem;
+ word-spacing: 1px;
+ height: 3rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+
+ ul {
+ margin-bottom: 2rem;
+
+ li.nav-item {
+ opacity: 0.9;
+ width: 100%;
+
+ @include mx.pl-pr(1.5rem);
+
+ @include bp.xxxl {
+ @include mx.pl-pr(2.75rem);
+ }
+
+ a.nav-link {
+ @include mx.pt-pb(0.6rem);
+
+ display: flex;
+ align-items: center;
+ border-radius: 0.75rem;
+ font-weight: 600;
+
+ &:hover {
+ background-color: var(--sidebar-hover-bg);
+ }
+
+ i {
+ font-size: 95%;
+ opacity: 0.8;
+ margin-right: 1.5rem;
+ }
+
+ span {
+ font-size: 90%;
+ letter-spacing: 0.2px;
+ }
+ }
+
+ &.active {
+ .nav-link {
+ color: var(--sidebar-active-color);
+ background-color: var(--sidebar-hover-bg);
+
+ span {
+ opacity: 1;
+ }
+ }
+ }
+
+ &:not(:first-child) {
+ margin-top: 0.25rem;
+ }
+ }
+ }
+
+ .sidebar-bottom {
+ padding-left: 2rem;
+ padding-right: 1rem;
+ margin-bottom: 1.5rem;
+
+ @include bp.xxxl {
+ padding-left: 2.75rem;
+ margin-bottom: 1.75rem;
+ }
+
+ $btn-size: 1.75rem;
+
+ %button {
+ width: $btn-size;
+ height: $btn-size;
+ margin-bottom: $btn-mb; // multi line gap
+ border-radius: 50%;
+ color: var(--sidebar-btn-color);
+ background-color: var(--sidebar-btn-bg);
+ text-align: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ &:not(:focus-visible) {
+ box-shadow: var(--sidebar-border-color) 0 0 0 1px;
+ }
+
+ &:hover {
+ background-color: var(--sidebar-hover-bg);
+ }
+ }
+
+ > a {
+ @extend %button;
+ @extend %sidebar-link-hover;
+ @extend %clickable-transition;
+
+ &:not(:last-child) {
+ margin-right: v.$sb-btn-gap;
+
+ @include bp.xxxl {
+ margin-right: v.$sb-btn-gap-lg;
+ }
+ }
+ }
+
+ i {
+ line-height: $btn-size;
+ }
+
+ #mode-toggle {
+ @extend %button;
+ @extend %sidebar-link-hover;
+ @extend %clickable-transition;
+
+ > i {
+ display: none;
+
+ @at-root :root[data-bs-theme='light'][data-theme-persisted]
+ &[data-theme-mode='light'] {
+ display: block;
+ }
+
+ @at-root :root[data-bs-theme='dark'][data-theme-persisted]
+ &[data-theme-mode='dark'] {
+ display: block;
+ }
+
+ @at-root :root:not([data-theme-persisted]) &[data-theme-mode='system'] {
+ display: block;
+ }
+ }
+
+ @-webkit-keyframes menu-pop {
+ from {
+ opacity: 0;
+ translate: 0 0.5rem;
+ }
+
+ to {
+ opacity: 1;
+ translate: 0 0;
+ }
+ }
+
+ @keyframes menu-pop {
+ from {
+ opacity: 0;
+ translate: 0 0.5rem;
+ }
+
+ to {
+ opacity: 1;
+ translate: 0 0;
+ }
+ }
+
+ + .dropdown-menu {
+ background-color: var(--menu-bg);
+ border-color: var(--menu-border-color);
+ box-shadow: var(--menu-shadow-color) 0 1px 4px;
+ border-radius: 0.75rem !important;
+
+ &.show {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+ left: -0.25rem !important;
+ -webkit-animation: menu-pop 0.2s ease-out;
+ animation: menu-pop 0.2s ease-out;
+ }
+
+ .dropdown-item {
+ border-radius: 0.5rem;
+ color: var(--sidebar-muted-color);
+ font-size: 90%;
+
+ &.active {
+ font-weight: 600;
+ color: var(--menu-active-color);
+
+ &::after {
+ content: '\f00c';
+ font: var(--fa-font-solid);
+ font-size: 0.75rem;
+ color: var(--sidebar-btn-color);
+ margin-left: auto;
+ padding-left: 1rem;
+ }
+ }
+
+ &:active,
+ &:hover,
+ &.active {
+ background-color: var(--menu-highlight-bg);
+ }
+
+ > i {
+ color: var(--sidebar-btn-color);
+ margin-right: 0.5rem;
+ }
+ }
+ }
+ }
+
+ .icon-border {
+ @extend %no-cursor;
+ @include mx.ml-mr(0.6rem);
+
+ background-color: var(--sidebar-btn-color);
+ content: '';
+ width: $btn-border-width;
+ height: $btn-border-width;
+ border-radius: 50%;
+ margin-bottom: $btn-mb;
+ }
+ } /* .sidebar-bottom */
+} /* #sidebar */
+
+[#{$sidebar-display}] {
+ #main-wrapper {
+ @include bp.lt(bp.get(lg)) {
+ transform: translateX(v.$sidebar-width);
+ }
+ }
+}
diff --git a/_sass/layout/_topbar.scss b/_sass/layout/_topbar.scss
new file mode 100644
index 00000000..eb0aea9b
--- /dev/null
+++ b/_sass/layout/_topbar.scss
@@ -0,0 +1,86 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+#topbar-wrapper {
+ height: v.$topbar-height;
+ background-color: var(--topbar-bg);
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide(top 0.2s ease);
+
+ left: 0;
+ }
+}
+
+#topbar {
+ @extend %btn-color;
+
+ #breadcrumb {
+ font-size: 1rem;
+ color: var(--text-muted-color);
+ padding-left: 0.5rem;
+
+ a:hover {
+ @extend %link-hover;
+ }
+
+ span {
+ &:not(:last-child) {
+ &::after {
+ content: '›';
+ padding: 0 0.3rem;
+ }
+ }
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ display: none;
+ }
+
+ @include bp.between(bp.get(lg), calc(#{bp.get(xl)} - 1px)) {
+ width: 65%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: keep-all;
+ white-space: nowrap;
+ }
+ }
+
+ @include bp.lte(bp.get(md)) {
+ @include mx.max-w-100;
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ max-width: 100%;
+ }
+}
+
+#topbar-title {
+ display: none;
+ font-size: 1.1rem;
+ font-weight: 600;
+ font-family: sans-serif;
+ color: var(--topbar-text-color);
+ text-align: center;
+ width: 70%;
+ word-break: keep-all;
+
+ @include bp.lt(bp.get(lg)) {
+ display: block;
+ }
+
+ @include bp.lg {
+ text-align: left;
+ }
+}
+
+#sidebar-trigger,
+#search-trigger {
+ display: none;
+
+ @include bp.lt(bp.get(lg)) {
+ display: block;
+ }
+}
diff --git a/_sass/layout/home.scss b/_sass/layout/home.scss
deleted file mode 100644
index 6c919456..00000000
--- a/_sass/layout/home.scss
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- Style for Homepage
-*/
-
-.pagination {
- color: var(--btn-patinator-text-color);
- font-family: Lato, sans-serif;
-
- a:hover {
- text-decoration: none;
- }
-
- .page-item {
- .page-link {
- color: inherit;
- width: 2.5rem;
- height: 2.5rem;
- padding: 0;
- display: -webkit-box;
- -webkit-box-pack: center;
- -webkit-box-align: center;
- border-radius: 50%;
- border: 1px solid var(--btn-paginator-border-color);
- background-color: var(--button-bg);
-
- &:hover {
- background-color: var(--btn-paginator-hover-color);
- }
- }
-
- &.active {
- .page-link {
- background-color: var(--btn-paginator-hover-color);
- color: var(--btn-text-color);
- }
- }
-
- &.disabled {
- cursor: not-allowed;
-
- .page-link {
- color: rgba(108, 117, 125, 0.57);
- border-color: var(--btn-paginator-border-color);
- background-color: var(--button-bg);
- }
- }
-
- &:first-child .page-link,
- &:last-child .page-link {
- border-radius: 50%;
- }
- } /* .page-item */
-} /* .pagination */
-
-#post-list {
- margin-top: 1rem;
- padding-right: 0.5rem;
- a {
- &:not(.img-hyperlink) {
- @extend %link-color;
- &:hover {
- @extend %link-hover;
- }
- }
- }
- .post-preview {
- padding-top: 0.5rem;
- padding-bottom: 1rem;
- border-radius: 10px;
- border-bottom: 1px solid var(--main-border-color);
- &:hover {
- text-decoration: none;
- background-color: var(--main-border-color);
- }
- h1 {
- font-size: 1.4rem;
- padding-top: 0.5rem;
- margin: 0;
- @extend %link-color;
- &:hover {
- @extend %link-hover;
- }
- ~i { // pinned icon
- font-size: 0.86rem;
- }
- img {
- padding-left: 0.5rem;
- }
- }
-
- .post-meta {
- i {
- font-size: 0.73rem;
- &:not(:first-child) { // post-meta icons on the homepage
- margin-left: 1.5rem;
- }
- }
- }
-
- .post-content {
- margin-top: 0.6rem;
- margin-bottom: 0.6rem;
- color: var(--post-list-text-color);
- >p {
- /* Make preview shorter on the homepage */
- margin: 0;
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- }
- }
-
- } // .post-preview
-
-} // #post-list
-
-/* Hide SideBar and TOC */
-@media all and (max-width: 830px) {
- .pagination {
- justify-content: space-evenly;
-
- .page-item {
- &:not(:first-child):not(:last-child) {
- display: none;
- }
- }
- }
-}
-
-/* Sidebar is visible */
-@media all and (min-width: 831px) {
- #post-list {
- margin-top: 1.5rem;
-
- .post-preview .post-meta {
- .pin {
- background: var(--pin-bg);
- border-radius: 5px;
- line-height: 1.4rem;
- height: 1.3rem;
- margin-top: 3px;
- padding-left: 1px;
- padding-right: 6px;
-
- > span {
- display: inline;
- }
- }
- }
- }
-
- .pagination {
- font-size: 0.85rem;
-
- .page-item {
- &:not(:last-child) {
- margin-right: 0.7rem;
- }
-
- .page-link {
- width: 2rem;
- height: 2rem;
- }
- }
-
- .page-index {
- display: none;
- }
- } /* .pagination */
-}
-
-/* Panel hidden */
-@media all and (max-width: 1200px) {
- #post-list {
- padding-right: 0;
- }
-}
diff --git a/_sass/layout/post.scss b/_sass/layout/post.scss
deleted file mode 100644
index db6c7c33..00000000
--- a/_sass/layout/post.scss
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- Post-specific style
-*/
-
-@mixin btn-sharing-color($light-color, $important: false) {
- @if $important {
- color: var(--btn-share-color, $light-color) !important;
- } @else {
- color: var(--btn-share-color, $light-color);
- }
-}
-
-@mixin btn-post-nav {
- width: 50%;
- position: relative;
- border-color: var(--btn-border-color);
-}
-
-@mixin dot($pl: 0.25rem, $pr: 0.25rem) {
- content: "\2022";
- padding-left: $pl;
- padding-right: $pr;
-}
-
-%text-color {
- color: var(--text-color);
-}
-
-img.preview-img {
- margin: 0;
- border-radius: 6px;
-
- &.bg {
- background: var(--preview-img-bg);
- }
-}
-
-h1 + .post-meta {
- span + span::before {
- @include dot;
- }
-
- em {
- @extend %text-color;
-
- a {
- @extend %text-color;
- }
- }
-}
-
-.post-tail-wrapper {
- margin-top: 6rem;
- border-bottom: 1px double var(--main-border-color);
- font-size: 0.85rem;
-
- .post-tail-bottom a {
- color: inherit;
- }
-
- .license-wrapper {
- line-height: 1.2rem;
-
- > a {
- color: var(--text-color);
-
- &:hover {
- @extend %link-hover;
- }
- }
-
- span:last-child {
- font-size: 0.85rem;
- }
- } /* .license-wrapper */
-
- .post-meta a:not(:hover) {
- @extend %link-underline;
- }
-
- .share-wrapper {
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
-
- .share-icons {
- font-size: 1.2rem;
-
- > i {
- position: relative;
- bottom: 1px;
-
- @extend %cursor-pointer;
-
- &:hover {
- @extend %btn-share-hovor;
- }
- }
-
- a {
- &:not(:last-child) {
- margin-right: 0.25rem;
- }
-
- &:hover {
- text-decoration: none;
-
- >i {
- @extend %btn-share-hovor;
- }
- }
- }
-
- .fab {
- &.fa-twitter {
- @include btn-sharing-color(rgba(29, 161, 242, 1));
- }
-
- &.fa-facebook-square {
- @include btn-sharing-color(rgb(66, 95, 156));
- }
-
- &.fa-telegram {
- @include btn-sharing-color(rgb(39, 159, 217));
- }
-
- &.fa-linkedin {
- @include btn-sharing-color(rgb(0, 119, 181));
- }
-
- &.fa-weibo {
- @include btn-sharing-color(rgb(229, 20, 43));
- }
- }
- } /* .share-icons */
-
- .fas.fa-link {
- @include btn-sharing-color(rgb(171, 171, 171));
- }
- } /* .share-wrapper */
-}
-
-.post-tags {
- line-height: 2rem;
-}
-
-.post-navigation {
- padding-top: 3rem;
- padding-bottom: 4rem;
-
- .btn {
- @include btn-post-nav;
-
- color: var(--link-color);
-
- &:hover {
- background: #2a408e;
- color: #ffffff;
- border-color: #2a408e;
- }
-
- &.disabled {
- @include btn-post-nav;
-
- pointer-events: auto;
- cursor: not-allowed;
- background: none;
- color: gray;
-
- &:hover {
- border-color: none;
- }
- }
-
- &.btn-outline-primary.disabled:focus {
- box-shadow: none;
- }
-
- &::before {
- color: var(--text-muted-color);
- font-size: 0.65rem;
- text-transform: uppercase;
- content: attr(prompt);
- }
-
- &:first-child {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- left: 0.5px;
- }
-
- &:last-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- right: 0.5px;
- }
- }
-
- p {
- font-size: 1.1rem;
- line-height: 1.5rem;
- margin-top: 0.3rem;
- white-space: normal;
- }
-} /* .post-navigation */
-
-@-webkit-keyframes fade-up {
- from {
- opacity: 0;
- position: relative;
- top: 2rem;
- }
-
- to {
- opacity: 1;
- position: relative;
- top: 0;
- }
-}
-
-@keyframes fade-up {
- from {
- opacity: 0;
- position: relative;
- top: 2rem;
- }
-
- to {
- opacity: 1;
- position: relative;
- top: 0;
- }
-}
-
-#toc-wrapper {
- border-left: 1px solid rgba(158, 158, 158, 0.17);
- position: -webkit-sticky;
- position: sticky;
- top: 4rem;
- transition: top 0.2s ease-in-out;
- -webkit-animation: fade-up 0.8s;
- animation: fade-up 0.8s;
-}
-
-#toc {
- ul.nav.navbar-nav {
- margin: 0.5rem 0;
- padding: 0;
-
- li {
- padding-top: 2px;
- padding-bottom: 2px;
- }
- }
-}
-
-nav[data-toggle="toc"] {
- .nav {
- .nav > li > a.active {
- font-weight: 600 !important;
- }
- }
-}
-
-/* --- Related Posts --- */
-
-#related-posts {
- > h3 {
- @include label(1.1rem, 600);
- }
-
- em {
- @extend %normal-font-style;
-
- color: var(--relate-post-date);
- }
-
- p {
- font-size: 0.9rem;
- margin-bottom: 0.5rem;
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- }
-
- a:hover {
- text-decoration: none;
- }
-
- .card {
- border-color: var(--card-border-color);
- background-color: var(--card-bg);
- box-shadow: 0 0 5px 0 var(--card-box-shadow);
- transition: all 0.3s ease-in-out;
-
- h3 {
- @extend %text-color;
- }
-
- &:hover {
- -webkit-transform: translate3d(0, -3px, 0);
- transform: translate3d(0, -3px, 0);
- box-shadow: 0 10px 15px -4px rgba(0, 0, 0, 0.15);
- }
- }
-}
-
-#tail-wrapper {
- min-height: 2rem;
-
- > div:last-of-type {
- margin-bottom: 2rem;
- }
-
- #disqus_thread { /* stylelint-disable-line selector-id-pattern */
- min-height: 8.5rem;
- }
-}
-
-%btn-share-hovor {
- color: var(--btn-share-hover-color) !important;
-}
-
-.share-label {
- @include label(inherit, 400, inherit);
-
- &::after {
- content: ":";
- }
-}
-
-@media all and (max-width: 576px) {
- .preview-img[data-src] {
- margin-top: 2.2rem;
- }
-
- .post-tail-bottom {
- flex-wrap: wrap-reverse !important;
-
- > div:first-child {
- width: 100%;
- margin-top: 1rem;
- }
- }
-}
-
-@media all and (max-width: 768px) {
- .post-content > p > img {
- max-width: calc(100% + 1rem);
- @include align-center;
- }
-}
-
-/* Hide SideBar and TOC */
-@media all and (max-width: 849px) {
- .post-navigation {
- padding-left: 0;
- padding-right: 0;
- margin-left: -0.5rem;
- margin-right: -0.5rem;
- }
-
- .preview-img[data-src] {
- max-width: 100vw;
- border-radius: 0;
- }
-}
-
-/*
- Comments
- ========================================================================== */
-
-@mixin clearfix {
- clear: both;
-
- &::after {
- clear: both;
- content: "";
- display: table;
- }
-}
-
- .page__comments {
-
- }
- p {
- }
- .card {
- border-color: var(--card-border-color);
- background-color: var(--card-bg);
- box-shadow: 0 0 5px 0 var(--card-box-shadow);
- transition: all 0.3s ease-in-out;
- }
-
-
- .page__comments-title {
- margin-top: 2rem;
- margin-bottom: 10px;
- padding-top: 2rem;
- font-size: 1.25em;
- border-top: 1px solid mix(#fff, #7a8288, 90%);
- text-transform: uppercase;
- }
-
- .page__comments-form {
- padding: 1em;
- background: mix(#fff, #7a8288, 90%);
- transition: all 0.2s ease-in-out;
-
- &.disabled {
- input,
- button,
- textarea,
- label {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- box-shadow: none;
- opacity: 0.65;
- }
- }
- }
-
- .comment {
- @include clearfix();
- margin: 1em 0;
-
- &:not(:last-child) {
- border-bottom: 1px solid mix(#fff, #7a8288, 90%);
- }
- }
-
- .comment__avatar-wrapper {
- float: left;
- margin-top: 25px;
- width: 60px;
- height: 60px;
-
- }
-
- .comment__avatar {
- width: 40px;
- height: 40px;
- border-radius: 50%;
-
- }
-
- .comment__content-wrapper {
- float: right;
- width: calc(100% - 60px);
-
- }
-
- .comment__author {
- margin: 0;
-
- a {
- text-decoration: none;
- }
- }
-
- .comment__date {
- margin: 0;
-
- a {
- text-decoration: none;
- }
- }
diff --git a/_sass/main.bundle.scss b/_sass/main.bundle.scss
new file mode 100644
index 00000000..5d84f938
--- /dev/null
+++ b/_sass/main.bundle.scss
@@ -0,0 +1,2 @@
+@use 'vendors/bootstrap';
+@use 'main';
diff --git a/_sass/main.scss b/_sass/main.scss
new file mode 100644
index 00000000..3bbb70d6
--- /dev/null
+++ b/_sass/main.scss
@@ -0,0 +1,4 @@
+@forward 'base';
+@forward 'components';
+@forward 'layout';
+@forward 'pages';
diff --git a/_sass/layout/archives.scss b/_sass/pages/_archives.scss
similarity index 82%
rename from _sass/layout/archives.scss
rename to _sass/pages/_archives.scss
index 70cf3792..833f809d 100644
--- a/_sass/layout/archives.scss
+++ b/_sass/pages/_archives.scss
@@ -1,14 +1,21 @@
-/*
- Style for Archives
-*/
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
#archives {
letter-spacing: 0.03rem;
+ @include bp.lt(bp.get(sm)) {
+ margin-top: -1rem;
+
+ ul {
+ letter-spacing: 0;
+ }
+ }
+
$timeline-width: 4px;
%timeline {
- content: "";
+ content: '';
width: $timeline-width;
position: relative;
float: left;
@@ -37,8 +44,9 @@
top: 24px;
}
- &::after { /* Year dot */
- content: "";
+ /* Year dot */
+ &::after {
+ content: '';
display: inline-block;
position: relative;
border-radius: 50%;
@@ -57,13 +65,19 @@
li {
font-size: 1.1rem;
line-height: 3rem;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
+
+ @extend %text-ellipsis;
&:nth-child(odd) {
background-color: var(--main-bg, #ffffff);
- background-image: linear-gradient(to left, #ffffff, #fbfbfb, #fbfbfb, #fbfbfb, #ffffff);
+ background-image: linear-gradient(
+ to left,
+ #ffffff,
+ #fbfbfb,
+ #fbfbfb,
+ #fbfbfb,
+ #ffffff
+ );
}
&::before {
@@ -98,7 +112,7 @@
}
a {
- /* post title in Archvies */
+ /* post title in Archives */
margin-left: 2.5rem;
position: relative;
top: 0.1rem;
@@ -109,7 +123,7 @@
&::before {
/* the dot before post title */
- content: "";
+ content: '';
display: inline-block;
position: relative;
border-radius: 50%;
@@ -124,13 +138,3 @@
}
}
} /* #archives */
-
-@media all and (max-width: 576px) {
- #archives {
- margin-top: -1rem;
-
- ul {
- letter-spacing: 0;
- }
- }
-}
diff --git a/_sass/layout/categories.scss b/_sass/pages/_categories.scss
similarity index 59%
rename from _sass/layout/categories.scss
rename to _sass/pages/_categories.scss
index c818e336..64a2df50 100644
--- a/_sass/layout/categories.scss
+++ b/_sass/pages/_categories.scss
@@ -1,20 +1,34 @@
-/*
- Style for Tab Categories
-*/
+@use '../abstracts/variables' as v;
+@use '../abstracts/placeholders';
-%category-icon-color {
+%-category-icon-color {
color: gray;
}
.categories {
margin-bottom: 2rem;
+ border-color: var(--categories-border);
+
+ &.card,
+ .list-group {
+ @extend %rounded;
+ }
.card-header {
- padding-right: 12px;
+ $radius: calc(v.$radius-lg - 1px);
+
+ padding: 0.75rem;
+ border-radius: $radius;
+ border-bottom: 0;
+
+ &.hide-border-bottom {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
}
i {
- @extend %category-icon-color;
+ @extend %-category-icon-color;
font-size: 86%; /* fontawesome icons */
}
@@ -28,6 +42,10 @@
border-top-left-radius: 0;
border-top-right-radius: 0;
}
+
+ &:last-child {
+ border-bottom: 0;
+ }
}
} /* .categories */
@@ -42,9 +60,7 @@
position: relative;
height: 0.7rem;
width: 1rem;
- transition: -webkit-transform 300ms ease;
transition: transform 300ms ease;
- transition: transform 300ms ease, -webkit-transform 300ms ease;
}
&:hover {
@@ -54,13 +70,13 @@
}
}
-@media (hover: hover) { /* only works on desktop */
+/* only works on desktop */
+@media (hover: hover) {
.category-trigger:hover {
background-color: var(--categories-hover-bg);
}
}
.rotate {
- -webkit-transform: rotate(-90deg);
transform: rotate(-90deg);
}
diff --git a/_sass/layout/category-tag.scss b/_sass/pages/_category-tag.scss
similarity index 61%
rename from _sass/layout/category-tag.scss
rename to _sass/pages/_category-tag.scss
index 44886712..0a827121 100644
--- a/_sass/layout/category-tag.scss
+++ b/_sass/pages/_category-tag.scss
@@ -1,6 +1,6 @@
-/*
- Style for page Category and Tag
-*/
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
.dash {
margin: 0 0.5rem 0.6rem 0.5rem;
@@ -13,31 +13,38 @@
line-height: 1.5rem;
padding: 0.6rem 0;
- &::before { /* dot */
+ /* dot */
+ &::before {
background: #999999;
width: 5px;
height: 5px;
border-radius: 50%;
display: block;
- content: "";
+ content: '';
position: relative;
top: 0.6rem;
margin-right: 0.5rem;
+
+ @include bp.lt(bp.get(sm)) {
+ margin: 0 0.5rem;
+ }
}
- > a { /* post's title */
+ /* post's title */
+ > a {
@extend %no-bottom-border;
font-size: 1.1rem;
- }
- > span:last-child {
- white-space: nowrap;
- } /* post's date */
+ @include bp.lt(bp.get(sm)) {
+ @include mx.text-ellipsis;
+ }
+ }
}
}
-#page-tag h1 > i { /* tag icon */
+/* tag icon */
+#page-tag h1 > i {
font-size: 1.2rem;
}
@@ -54,20 +61,3 @@
margin-bottom: -1px; /* Avoid jumping */
}
}
-
-@media all and (max-width: 576px) {
- #page-category,
- #page-tag {
- ul > li {
- &::before {
- margin: 0 0.5rem;
- }
-
- > a {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- }
- }
-}
diff --git a/_sass/pages/_home.scss b/_sass/pages/_home.scss
new file mode 100644
index 00000000..84f4b4aa
--- /dev/null
+++ b/_sass/pages/_home.scss
@@ -0,0 +1,170 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/placeholders';
+
+#post-list {
+ margin-top: 2rem;
+
+ @include bp.lg {
+ margin-top: 2.5rem;
+ }
+
+ .card-wrapper {
+ &:hover {
+ text-decoration: none;
+ }
+
+ &:not(:last-child) {
+ margin-bottom: 1.25rem;
+ }
+ }
+
+ .card {
+ border: 0;
+ background: none;
+
+ %img-radius {
+ border-radius: v.$radius-lg v.$radius-lg 0 0;
+
+ @include bp.md {
+ border-radius: 0 v.$radius-lg v.$radius-lg 0;
+ }
+ }
+
+ .preview-img {
+ @extend %img-radius;
+
+ img {
+ @extend %img-radius;
+ }
+ }
+
+ .card-body {
+ height: 100%;
+ padding: 1rem;
+
+ @include bp.md {
+ padding: 1.75rem 1.75rem 1.25rem;
+ }
+
+ .card-title {
+ @extend %text-clip;
+
+ color: var(--heading-color) !important;
+ font-size: 1.25rem;
+ }
+
+ %muted {
+ color: var(--text-muted-color) !important;
+ }
+
+ .card-text {
+ @include bp.md {
+ display: inherit !important;
+ }
+
+ &.content {
+ @extend %muted;
+
+ p {
+ @extend %text-clip;
+
+ line-height: 1.5;
+ margin: 0;
+ }
+ }
+ }
+
+ .post-meta {
+ @extend %muted;
+
+ i {
+ &:not(:first-child) {
+ margin-left: 1.5rem;
+
+ @include bp.md {
+ margin-left: 1.75rem;
+ }
+ }
+ }
+
+ em {
+ @extend %normal-font-style;
+
+ color: inherit;
+ }
+
+ > div:first-child {
+ display: block;
+
+ @extend %text-ellipsis;
+ }
+ }
+ }
+ }
+} /* #post-list */
+
+.pagination {
+ color: var(--text-color);
+ font-family: Lato, sans-serif;
+ justify-content: space-evenly;
+
+ @include bp.lg {
+ font-size: 0.85rem;
+ justify-content: center;
+ }
+
+ a:hover {
+ text-decoration: none;
+ }
+
+ .page-item {
+ @include bp.lt(bp.get(lg)) {
+ &:not(:first-child):not(:last-child) {
+ display: none;
+ }
+ }
+
+ @include bp.lg {
+ &:not(:last-child) {
+ margin-right: 0.7rem;
+ }
+ }
+
+ .page-link {
+ color: var(--btn-patinator-text-color);
+ padding: 0 0.6rem;
+ border-radius: 0.5rem;
+ border: 0;
+ background-color: inherit;
+ }
+
+ &.active {
+ .page-link {
+ background-color: var(--btn-paginator-hover-color);
+ }
+ }
+
+ &:not(.active) {
+ .page-link {
+ &:hover {
+ box-shadow: inset var(--btn-border-color) 0 0 0 1px;
+ }
+ }
+ }
+
+ &.disabled {
+ cursor: not-allowed;
+
+ .page-link {
+ color: rgb(108 117 125 / 57%);
+ }
+ }
+ } /* .page-item */
+
+ .page-index {
+ @include bp.lg {
+ display: none;
+ }
+ }
+}
diff --git a/_sass/pages/_index.scss b/_sass/pages/_index.scss
new file mode 100644
index 00000000..74e9ea6e
--- /dev/null
+++ b/_sass/pages/_index.scss
@@ -0,0 +1,7 @@
+@forward 'search';
+@forward 'home';
+@forward 'post';
+@forward 'categories';
+@forward 'tags';
+@forward 'archives';
+@forward 'category-tag';
diff --git a/_sass/pages/_post.scss b/_sass/pages/_post.scss
new file mode 100644
index 00000000..31f7a8e2
--- /dev/null
+++ b/_sass/pages/_post.scss
@@ -0,0 +1,506 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+%-btn-post-nav {
+ width: 50%;
+ position: relative;
+ border-color: var(--btn-border-color);
+}
+
+@mixin -dot($pl: 0.25rem, $pr: 0.25rem) {
+ content: '\2022';
+ padding-left: $pl;
+ padding-right: $pr;
+}
+
+header {
+ .post-desc {
+ @extend %heading;
+
+ font-size: 1.125rem;
+ line-height: 1.6;
+ }
+
+ .post-meta {
+ span + span::before {
+ @include -dot;
+ }
+
+ em,
+ time {
+ @extend %text-highlight;
+ }
+
+ em {
+ a {
+ color: inherit;
+ }
+ }
+ }
+
+ h1 + .post-meta {
+ margin-top: 1.5rem;
+ }
+}
+
+.post-tail-wrapper {
+ @extend %text-sm;
+
+ margin-top: 6rem;
+ border-bottom: 1px double var(--main-border-color);
+
+ .license-wrapper {
+ line-height: 1.2rem;
+
+ > a {
+ @extend %text-highlight;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+
+ span:last-child {
+ @extend %text-sm;
+ }
+ } /* .license-wrapper */
+
+ .post-meta a:not(:hover) {
+ @extend %link-underline;
+ }
+
+ .share-wrapper {
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+
+ %icon-size {
+ font-size: 1.125rem;
+ }
+
+ .share-icons {
+ display: flex;
+
+ i {
+ color: var(--btn-share-color);
+
+ @extend %icon-size;
+ }
+
+ > * {
+ @extend %icon-size;
+
+ margin-left: 0.5rem;
+
+ &:hover {
+ i {
+ @extend %btn-share-hover;
+ }
+ }
+ }
+
+ button {
+ padding: 0;
+ border: none;
+ line-height: inherit;
+
+ @extend %cursor-pointer;
+ }
+ } /* .share-icons */
+ } /* .share-wrapper */
+}
+
+.post-tail-bottom {
+ @include bp.lte(bp.get(sm)) {
+ flex-wrap: wrap-reverse !important;
+
+ > div:first-child {
+ width: 100%;
+ margin-top: 1rem;
+ }
+ }
+}
+
+.share-mastodon {
+ /* See: https://github.com/justinribeiro/share-to-mastodon#properties */
+ --wc-stm-font-family: #{v.$font-family-base};
+ --wc-stm-dialog-background-color: var(--card-bg);
+ --wc-stm-form-button-border: 1px solid var(--btn-border-color);
+ --wc-stm-form-submit-background-color: var(--sidebar-btn-bg);
+ --wc-stm-form-cancel-background-color: var(--sidebar-btn-bg);
+ --wc-stm-form-button-background-color-hover: #007bff;
+ --wc-stm-form-button-color-hover: white;
+
+ font-size: 1rem;
+}
+
+.post-tags {
+ line-height: 2rem;
+
+ .post-tag {
+ &:hover {
+ @extend %tag-hover;
+ }
+ }
+}
+
+.post-edit {
+ line-height: 1.2rem;
+
+ > a {
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+}
+
+.post-navigation {
+ @include bp.lt(bp.get(lg)) {
+ @include mx.pl-pr(0);
+ @include mx.ml-mr(-0.5rem);
+ }
+
+ .btn {
+ @extend %-btn-post-nav;
+
+ &:not(:hover) {
+ color: var(--link-color);
+ }
+
+ &:hover {
+ &:not(.disabled)::before {
+ color: whitesmoke;
+ }
+ }
+
+ &.disabled {
+ @extend %-btn-post-nav;
+
+ pointer-events: auto;
+ cursor: not-allowed;
+ background: none;
+ color: gray;
+ }
+
+ &.btn-outline-primary.disabled:focus {
+ box-shadow: none;
+ }
+
+ &::before {
+ color: var(--text-muted-color);
+ font-size: 0.65rem;
+ text-transform: uppercase;
+ content: attr(aria-label);
+ }
+
+ &:first-child {
+ border-radius: v.$radius-lg 0 0 v.$radius-lg;
+ left: 0.5px;
+ }
+
+ &:last-child {
+ border-radius: 0 v.$radius-lg v.$radius-lg 0;
+ right: 0.5px;
+ }
+ }
+
+ p {
+ font-size: 1.1rem;
+ line-height: 1.5rem;
+ margin-top: 0.3rem;
+ white-space: normal;
+ }
+} /* .post-navigation */
+
+@media (hover: hover) {
+ .post-navigation {
+ .btn,
+ .btn::before {
+ transition: all 0.35s ease-in-out;
+ }
+ }
+}
+
+@-webkit-keyframes fade-up {
+ from {
+ opacity: 0;
+ margin-top: 4rem;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes fade-up {
+ from {
+ opacity: 0;
+ margin-top: 4rem;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+/* TOC panel */
+
+%top-cover {
+ content: '';
+ display: block;
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ width: 100%;
+ height: 3rem;
+ background: linear-gradient(var(--main-bg) 50%, transparent);
+}
+
+#toc-wrapper {
+ top: 0;
+ transition: top 0.2s ease-in-out;
+ overflow-y: auto;
+ max-height: 100vh;
+ scrollbar-width: none;
+ margin-top: 2rem;
+
+ &:not(.invisible) {
+ -webkit-animation: fade-up 0.8s;
+ animation: fade-up 0.8s;
+ }
+
+ ul {
+ list-style: none;
+ font-size: 0.85rem;
+ line-height: 1.25;
+ padding-left: 0;
+
+ li {
+ a {
+ padding: 0.4rem 0 0.4rem 1.25rem;
+ }
+ }
+
+ /* Overwrite TOC plugin style */
+
+ .toc-link {
+ display: block;
+
+ @extend %text-ellipsis;
+
+ &:hover {
+ color: var(--toc-highlight);
+ text-decoration: none;
+ }
+
+ &::before {
+ display: none;
+ }
+ }
+
+ .is-active-link {
+ color: var(--toc-highlight) !important;
+ font-weight: 600;
+
+ &::before {
+ display: inline-block;
+ width: 1px;
+ height: 1.25rem;
+ background-color: var(--toc-highlight) !important;
+ }
+ }
+
+ ul {
+ padding-left: 0.75rem;
+ }
+ }
+
+ @at-root .toc-border-cover {
+ @extend %top-cover;
+
+ margin-bottom: -4rem;
+ }
+
+ &::before {
+ @extend %top-cover;
+ }
+
+ &::after {
+ content: '';
+ position: fixed;
+ bottom: 0;
+ width: 15%;
+ height: 2.25rem;
+ margin-left: -1px;
+ background: linear-gradient(transparent, var(--main-bg) 70%);
+ }
+
+ > * {
+ @extend %panel-border;
+ }
+}
+
+/* --- TOC button, bar and popup in mobile/tablet --- */
+
+#toc-bar {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ margin: 0 -1rem;
+ height: v.$topbar-height;
+ background: var(--main-bg);
+ border-bottom: 1px solid var(--main-border-color);
+ transition: all 0.2s ease-in-out;
+
+ @extend %btn-color;
+
+ @include bp.xl {
+ display: none !important;
+ }
+
+ .label {
+ @extend %heading;
+
+ margin-left: 0.375rem;
+ padding: 0 0.75rem;
+ color: inherit;
+ }
+
+ &.invisible {
+ top: -#{v.$topbar-height};
+ transition: none;
+ }
+}
+
+#toc-solo-trigger {
+ color: var(--text-muted-color);
+ border-color: var(--btn-border-color);
+ border-radius: v.$radius-lg;
+
+ @include bp.xl {
+ display: none !important;
+ }
+
+ .label {
+ font-size: 1rem;
+ font-family: v.$font-family-heading;
+ }
+
+ &:hover {
+ box-shadow: none;
+ background: none;
+ }
+}
+
+@mixin slide-in {
+ from {
+ opacity: 0.7;
+ transform: translateY(-#{v.$topbar-height});
+ }
+
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@mixin slide-out {
+ 0% {
+ transform: translateY(0);
+ opacity: 1;
+ }
+
+ 100% {
+ transform: translateY(-#{v.$topbar-height});
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes slide-in {
+ @include slide-in;
+}
+
+@keyframes slide-in {
+ @include slide-in;
+}
+
+@-webkit-keyframes slide-out {
+ @include slide-out;
+}
+
+@keyframes slide-out {
+ @include slide-out;
+}
+
+/* --- Related Posts --- */
+
+#related-posts {
+ > h3 {
+ @include mx.label(1.1rem, 600);
+ }
+
+ time {
+ @extend %normal-font-style;
+ @extend %text-xs;
+
+ color: var(--text-muted-color);
+ }
+
+ p {
+ @extend %text-ellipsis;
+
+ font-size: 0.9rem;
+ margin-bottom: 0.5rem;
+ white-space: break-spaces;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ }
+
+ .card {
+ h4 {
+ @extend %text-clip;
+ }
+ }
+}
+
+/* stylelint-disable-next-line selector-id-pattern */
+#disqus_thread {
+ min-height: 8.5rem;
+}
+
+.utterances {
+ max-width: 100%;
+ min-height: 269px;
+}
+
+%btn-share-hover {
+ color: var(--btn-share-hover-color) !important;
+}
+
+.share-label {
+ @include mx.label(inherit, 400, inherit);
+
+ &::after {
+ content: ':';
+ }
+}
+
+.content > p > img {
+ @include bp.lte(bp.get(md)) {
+ max-width: calc(100% + 1rem);
+ }
+}
+
+h2,
+h3,
+h4 {
+ @include bp.xl {
+ scroll-margin-top: 2rem;
+ }
+}
diff --git a/_sass/pages/_search.scss b/_sass/pages/_search.scss
new file mode 100644
index 00000000..dfb044ed
--- /dev/null
+++ b/_sass/pages/_search.scss
@@ -0,0 +1,184 @@
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/variables' as v;
+@use '../abstracts/placeholders';
+
+search {
+ display: flex;
+ width: 100%;
+ border-radius: 1rem;
+ border: 1px solid var(--search-border-color);
+ background: var(--main-bg);
+ padding: 0 0.5rem;
+
+ i {
+ z-index: 2;
+ font-size: 0.9rem;
+ color: var(--search-icon-color);
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ display: none;
+ }
+
+ @include bp.lg {
+ max-width: v.$search-max-width;
+ }
+
+ @include bp.xl {
+ margin-right: 4rem;
+ }
+
+ @include bp.xxxl {
+ margin-right: calc(
+ v.$main-content-max-width / 4 - v.$search-max-width - 0.75rem
+ );
+ }
+}
+
+#search-result-wrapper {
+ display: none;
+ height: 100%;
+ width: 100%;
+ overflow: auto;
+
+ .content {
+ margin-top: 2rem;
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ width: 100%;
+
+ .content {
+ letter-spacing: 0;
+ }
+ }
+
+ @include bp.lg {
+ max-width: v.$main-content-max-width;
+ justify-content: start !important;
+ }
+}
+
+#search-results {
+ padding-bottom: 3rem;
+
+ @include bp.between(bp.get(lg), calc(#{bp.get(xl)} - 1px)) {
+ > div {
+ max-width: 700px;
+ }
+ }
+
+ a {
+ font-size: 1.4rem;
+ line-height: 1.5rem;
+
+ &:hover {
+ @extend %link-hover;
+ }
+
+ @extend %link-color;
+ @extend %no-bottom-border;
+ @extend %heading;
+ }
+
+ > article {
+ width: 100%;
+
+ &:not(:last-child) {
+ margin-bottom: 1rem;
+ }
+
+ @include bp.xl {
+ width: 45%;
+
+ &:nth-child(odd) {
+ margin-right: 1.5rem;
+ }
+
+ &:nth-child(even) {
+ margin-left: 1.5rem;
+ }
+
+ &:last-child:nth-child(odd) {
+ position: relative;
+ right: 24.3%;
+ }
+ }
+
+ h2 {
+ line-height: 2.5rem;
+ }
+
+ /* icons */
+ i {
+ color: #818182;
+ margin-right: 0.15rem;
+ font-size: 80%;
+ }
+
+ > p {
+ @extend %text-ellipsis;
+
+ white-space: break-spaces;
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ }
+ }
+}
+
+/* 'Cancel' link */
+#search-cancel {
+ color: var(--link-color);
+ display: none;
+ white-space: nowrap;
+
+ @extend %cursor-pointer;
+}
+
+#search-input {
+ background: center;
+ border: 0;
+ border-radius: 0;
+ padding: 0.18rem 0.3rem;
+ color: var(--text-color);
+ height: auto;
+
+ &:focus {
+ box-shadow: none;
+ }
+
+ @include bp.xl {
+ transition: all 0.3s ease-in-out;
+ }
+}
+
+#search-hints {
+ padding: 0 1rem;
+
+ @include bp.lg {
+ display: none;
+ }
+
+ h4 {
+ margin-bottom: 1.5rem;
+ }
+
+ .post-tag {
+ display: inline-block;
+ line-height: 1rem;
+ font-size: 1rem;
+ background: var(--search-tag-bg);
+ border: none;
+ padding: 0.5rem;
+ margin: 0 1.25rem 1rem 0;
+
+ &::before {
+ content: '#';
+ color: var(--text-muted-color);
+ padding-right: 0.2rem;
+ }
+
+ @extend %link-color;
+ }
+}
diff --git a/_sass/layout/tags.scss b/_sass/pages/_tags.scss
similarity index 71%
rename from _sass/layout/tags.scss
rename to _sass/pages/_tags.scss
index 4cf5d3b7..d22f20d6 100644
--- a/_sass/layout/tags.scss
+++ b/_sass/pages/_tags.scss
@@ -1,6 +1,4 @@
-/*
- Styles for Tab Tags
-*/
+@use '../abstracts/breakpoints' as bp;
.tag {
border-radius: 0.7em;
@@ -17,3 +15,9 @@
font-family: Oswald, sans-serif;
}
}
+
+#tags {
+ @include bp.lt(bp.get(lg)) {
+ justify-content: center !important;
+ }
+}
diff --git a/_sass/themes/_dark.scss b/_sass/themes/_dark.scss
new file mode 100644
index 00000000..be2a3aae
--- /dev/null
+++ b/_sass/themes/_dark.scss
@@ -0,0 +1,308 @@
+@mixin styles {
+ color-scheme: dark;
+
+ /* Framework color */
+ --main-bg: rgb(27 27 30);
+ --mask-bg: rgb(68 69 70);
+ --main-border-color: rgb(44 45 45);
+
+ /* Common color */
+ --text-color: rgb(175 176 177);
+ --text-muted-color: #868686;
+ --text-muted-highlight-color: #aeaeae;
+ --heading-color: #cccccc;
+ --label-color: #a7a7a7;
+ --blockquote-border-color: rgb(66 66 66);
+ --blockquote-text-color: #868686;
+ --link-color: rgb(138 180 248);
+ --link-underline-color: rgb(82 108 150);
+ --button-bg: #1e1e1e;
+ --btn-border-color: #2e2f31;
+ --btn-backtotop-color: var(--text-color);
+ --btn-backtotop-border-color: #212122;
+ --card-header-bg: #292929;
+ --checkbox-color: rgb(118 120 121);
+ --checkbox-checked-color: var(--link-color);
+ --img-bg: radial-gradient(circle, rgb(22 22 24) 0%, rgb(32 32 32) 100%);
+ --shimmer-bg: linear-gradient(
+ 90deg,
+ rgb(255 255 255 / 0%) 0%,
+ rgb(58 55 55 / 40%) 50%,
+ rgb(255 255 255 / 0%) 100%
+ );
+ --menu-bg: rgb(30 30 30);
+ --menu-border-color: rgb(77 77 77 / 60%);
+ --menu-shadow-color: rgb(4 4 4 / 42%);
+ --menu-active-color: rgb(240 248 255 / 63%);
+ --menu-highlight-bg: rgb(90 91 92 / 12%);
+
+ /* Sidebar */
+ --site-title-color: #717070;
+ --site-subtitle-color: #868686;
+ --sidebar-bg: #1e1e1e;
+ --sidebar-border-color: #292929;
+ --sidebar-muted-color: #868686;
+ --sidebar-active-color: rgb(255 255 255 / 95%);
+ --sidebar-hover-bg: #262626;
+ --sidebar-btn-bg: #232328;
+ --sidebar-btn-color: #787878;
+ --avatar-border-color: rgb(206 206 206 / 90%);
+
+ /* Topbar */
+ --topbar-bg: rgb(27 27 30 / 64%);
+ --topbar-text-color: var(--text-color);
+ --search-border-color: rgb(55 55 55);
+ --search-icon-color: rgb(100 102 105);
+ --input-focus-border-color: rgb(112 114 115);
+
+ /* Home page */
+ --post-list-text-color: rgb(175 176 177);
+ --btn-patinator-text-color: var(--text-color);
+ --btn-paginator-hover-color: #2e2e2e;
+
+ /* Posts */
+ --toc-highlight: rgb(116 178 243);
+ --toc-popup-border-color: #373737;
+ --tag-hover: rgb(43 56 62);
+ --tb-odd-bg: #252526; /* odd rows of the posts' table */
+ --tb-even-bg: rgb(31 31 34); /* even rows of the posts' table */
+ --tb-border-color: var(--tb-odd-bg);
+ --footnote-target-bg: rgb(63 81 181);
+ --btn-share-color: #6c757d;
+ --btn-share-hover-color: #bfc1ca;
+ --card-bg: #1e1e1e;
+ --card-hover-bg: #464d51;
+ --card-shadow:
+ rgb(21 21 21 / 72%) 0 6px 18px 0, rgb(137 135 135 / 24%) 0 0 0 1px;
+ --kbd-wrap-color: #6a6a6a;
+ --kbd-text-color: #d3d3d3;
+ --kbd-bg-color: #242424;
+ --prompt-text-color: rgb(216 212 212 / 75%);
+ --prompt-tip-bg: rgb(22 60 36 / 64%);
+ --prompt-tip-icon-color: rgb(15 164 15 / 81%);
+ --prompt-info-bg: rgb(7 59 104 / 80%);
+ --prompt-info-icon-color: #0075d1;
+ --prompt-warning-bg: rgb(90 69 3 / 88%);
+ --prompt-warning-icon-color: rgb(255 165 0 / 80%);
+ --prompt-danger-bg: rgb(86 28 8 / 80%);
+ --prompt-danger-icon-color: #cd0202;
+
+ /* Tags */
+ --tag-border: rgb(59 79 88);
+ --tag-shadow: rgb(32 33 33);
+ --dash-color: rgb(63 65 68);
+ --search-tag-bg: #292828;
+
+ /* Categories */
+ --categories-border: rgb(64 66 69 / 50%);
+ --categories-hover-bg: rgb(73 75 76);
+ --categories-icon-hover-color: white;
+
+ /* Archive */
+ --timeline-node-bg: rgb(150 152 156);
+ --timeline-color: rgb(63 65 68);
+ --timeline-year-dot-color: var(--timeline-color);
+
+ /* Code highlight colors */
+ --language-border-color: #2d2d2d;
+ --highlight-bg-color: #151515;
+ --highlighter-rouge-color: #c9def1;
+ --highlight-lineno-color: #808080;
+ --inline-code-bg: rgb(255 255 255 / 5%);
+ --code-color: #b0b0b0;
+ --code-header-text-color: #6a6a6a;
+ --code-header-muted-color: #353535;
+ --code-header-icon-color: #565656;
+ --clipboard-checked-color: #2bcc2b;
+ --filepath-text-color: #cacaca;
+
+ .light {
+ display: none;
+ }
+
+ /* Categories */
+ .categories.card,
+ .list-group-item {
+ background-color: var(--card-bg);
+ }
+
+ .categories {
+ .card-header {
+ background-color: var(--card-header-bg);
+ }
+
+ .list-group-item {
+ border-left: none;
+ border-right: none;
+ padding-left: 2rem;
+ border-color: var(--categories-border);
+
+ &:last-child {
+ border-bottom-color: var(--card-bg);
+ }
+ }
+ }
+
+ #archives li:nth-child(odd) {
+ background-image: linear-gradient(
+ to left,
+ rgb(26 26 30),
+ rgb(39 39 45),
+ rgb(39 39 45),
+ rgb(39 39 45),
+ rgb(26 26 30)
+ );
+ }
+
+ /* stylelint-disable-next-line selector-id-pattern */
+ #disqus_thread {
+ color-scheme: none;
+ }
+
+ /* --- Syntax highlight theme from `rougify style base16.dark` --- */
+
+ .highlight .gp {
+ color: #87939d;
+ }
+
+ .highlight table td {
+ padding: 5px;
+ }
+
+ .highlight table pre {
+ margin: 0;
+ }
+
+ .highlight,
+ .highlight .w {
+ color: #d0d0d0;
+ background-color: #151515;
+ }
+
+ .highlight .err {
+ color: #151515;
+ background-color: #ac4142;
+ }
+
+ .highlight .c,
+ .highlight .ch,
+ .highlight .cd,
+ .highlight .cm,
+ .highlight .cpf,
+ .highlight .c1,
+ .highlight .cs {
+ color: #848484;
+ }
+
+ .highlight .cp {
+ color: #f4bf75;
+ }
+
+ .highlight .nt {
+ color: #f4bf75;
+ }
+
+ .highlight .o,
+ .highlight .ow {
+ color: #d0d0d0;
+ }
+
+ .highlight .p,
+ .highlight .pi {
+ color: #d0d0d0;
+ }
+
+ .highlight .gi {
+ color: #90a959;
+ }
+
+ .highlight .gd {
+ color: #f08a8b;
+ background-color: #320000;
+ }
+
+ .highlight .gh {
+ color: #6a9fb5;
+ background-color: #151515;
+ font-weight: bold;
+ }
+
+ .highlight .k,
+ .highlight .kn,
+ .highlight .kp,
+ .highlight .kr,
+ .highlight .kv {
+ color: #aa759f;
+ }
+
+ .highlight .kc {
+ color: #d28445;
+ }
+
+ .highlight .kt {
+ color: #d28445;
+ }
+
+ .highlight .kd {
+ color: #d28445;
+ }
+
+ .highlight .s,
+ .highlight .sb,
+ .highlight .sc,
+ .highlight .dl,
+ .highlight .sd,
+ .highlight .s2,
+ .highlight .sh,
+ .highlight .sx,
+ .highlight .s1 {
+ color: #90a959;
+ }
+
+ .highlight .sa {
+ color: #aa759f;
+ }
+
+ .highlight .sr {
+ color: #75b5aa;
+ }
+
+ .highlight .si {
+ color: #b76d45;
+ }
+
+ .highlight .se {
+ color: #b76d45;
+ }
+
+ .highlight .nn {
+ color: #f4bf75;
+ }
+
+ .highlight .nc {
+ color: #f4bf75;
+ }
+
+ .highlight .no {
+ color: #f4bf75;
+ }
+
+ .highlight .na {
+ color: #6a9fb5;
+ }
+
+ .highlight .m,
+ .highlight .mb,
+ .highlight .mf,
+ .highlight .mh,
+ .highlight .mi,
+ .highlight .il,
+ .highlight .mo,
+ .highlight .mx {
+ color: #90a959;
+ }
+
+ .highlight .ss {
+ color: #90a959;
+ }
+}
diff --git a/_sass/themes/_light.scss b/_sass/themes/_light.scss
new file mode 100644
index 00000000..19e8e01a
--- /dev/null
+++ b/_sass/themes/_light.scss
@@ -0,0 +1,314 @@
+@mixin styles {
+ /* Framework color */
+ --main-bg: white;
+ --mask-bg: #c1c3c5;
+ --main-border-color: #f3f3f3;
+
+ /* Common color */
+ --text-color: #34343c;
+ --text-muted-color: #757575;
+ --text-muted-highlight-color: inherit;
+ --heading-color: #2a2a2a;
+ --label-color: #585858;
+ --blockquote-border-color: #eeeeee;
+ --blockquote-text-color: #757575;
+ --link-color: #0056b2;
+ --link-underline-color: #dee2e6;
+ --button-bg: #ffffff;
+ --btn-border-color: #e9ecef;
+ --btn-backtotop-color: #686868;
+ --btn-backtotop-border-color: #f1f1f1;
+ --checkbox-color: #c5c5c5;
+ --checkbox-checked-color: #07a8f7;
+ --img-bg: radial-gradient(circle, rgb(255 255 255) 0%, rgb(239 239 239) 100%);
+ --shimmer-bg: linear-gradient(
+ 90deg,
+ rgb(250 250 250 / 0%) 0%,
+ rgb(232 230 230 / 100%) 50%,
+ rgb(250 250 250 / 0%) 100%
+ );
+ --menu-bg: white;
+ --menu-border-color: white;
+ --menu-shadow-color: rgb(0 0 0 / 16%);
+ --menu-active-color: rgb(91 91 91);
+ --menu-highlight-bg: rgb(243 244 245 / 50%);
+
+ /* Sidebar */
+ --site-title-color: rgb(113 113 113);
+ --site-subtitle-color: #717171;
+ --sidebar-bg: #f6f8fa;
+ --sidebar-border-color: #efefef;
+ --sidebar-muted-color: #545454;
+ --sidebar-active-color: #1d1d1d;
+ --sidebar-hover-bg: rgb(223 233 241 / 64%);
+ --sidebar-btn-bg: white;
+ --sidebar-btn-color: #8e8e8e;
+ --avatar-border-color: white;
+
+ /* Topbar */
+ --topbar-bg: rgb(255 255 255 / 70%);
+ --topbar-text-color: rgb(78 78 78);
+ --search-border-color: rgb(240 240 240);
+ --search-icon-color: #c2c6cc;
+ --input-focus-border-color: #b8b8b8;
+
+ /* Home page */
+ --post-list-text-color: dimgray;
+ --btn-patinator-text-color: #555555;
+ --btn-paginator-hover-color: var(--sidebar-bg);
+
+ /* Posts */
+ --toc-highlight: #0550ae;
+ --toc-popup-border-color: lightgray;
+ --btn-share-color: gray;
+ --btn-share-hover-color: #0d6efd;
+ --card-bg: white;
+ --card-hover-bg: #e2e2e2;
+ --card-shadow:
+ rgb(104 104 104 / 5%) 0 2px 6px 0, rgb(211 209 209 / 15%) 0 0 0 1px;
+ --footnote-target-bg: lightcyan;
+ --tb-odd-bg: #fbfcfd;
+ --tb-border-color: #eaeaea;
+ --dash-color: silver;
+ --kbd-wrap-color: #bdbdbd;
+ --kbd-text-color: var(--text-color);
+ --kbd-bg-color: white;
+ --prompt-text-color: rgb(46 46 46 / 77%);
+ --prompt-tip-bg: rgb(123 247 144 / 20%);
+ --prompt-tip-icon-color: #03b303;
+ --prompt-info-bg: #e1f5fe;
+ --prompt-info-icon-color: #0070cb;
+ --prompt-warning-bg: rgb(255 243 205);
+ --prompt-warning-icon-color: #ef9c03;
+ --prompt-danger-bg: rgb(248 215 218 / 56%);
+ --prompt-danger-icon-color: #df3c30;
+
+ /* Tags */
+ --tag-border: #dee2e6;
+ --tag-shadow: var(--btn-border-color);
+ --tag-hover: rgb(222 226 230);
+ --search-tag-bg: #f8f9fa;
+
+ /* Categories */
+ --categories-border: rgb(0 0 0 / 12.5%);
+ --categories-hover-bg: var(--btn-border-color);
+ --categories-icon-hover-color: darkslategray;
+
+ /* Archive */
+ --timeline-color: rgb(0 0 0 / 7.5%);
+ --timeline-node-bg: #c2c6cc;
+ --timeline-year-dot-color: #ffffff;
+
+ /* --- Custom code light mode colors --- */
+ --language-border-color: #ececec;
+ --highlight-bg-color: #f6f8fa;
+ --highlighter-rouge-color: #3f596f;
+ --highlight-lineno-color: #9e9e9e;
+ --inline-code-bg: rgb(25 25 28 / 5%);
+ --code-color: #3a3a3a;
+ --code-header-text-color: #a3a3a3;
+ --code-header-muted-color: #e5e5e5;
+ --code-header-icon-color: #c9c8c8;
+ --clipboard-checked-color: #43c743;
+
+ [class^='prompt-'] {
+ --link-underline-color: rgb(219 216 216);
+ }
+
+ .dark {
+ display: none;
+ }
+
+ /* --- Syntax highlight theme from `rougify style github` --- */
+
+ .highlight table td {
+ padding: 5px;
+ }
+
+ .highlight table pre {
+ margin: 0;
+ }
+
+ .highlight,
+ .highlight .w {
+ color: #24292f;
+ background-color: #f6f8fa;
+ }
+
+ .highlight .k,
+ .highlight .kd,
+ .highlight .kn,
+ .highlight .kp,
+ .highlight .kr,
+ .highlight .kt,
+ .highlight .kv {
+ color: #cf222e;
+ }
+
+ .highlight .gr {
+ color: #f6f8fa;
+ }
+
+ .highlight .gd {
+ color: #82071e;
+ background-color: #ffebe9;
+ }
+
+ .highlight .nb {
+ color: #953800;
+ }
+
+ .highlight .nc {
+ color: #953800;
+ }
+
+ .highlight .no {
+ color: #953800;
+ }
+
+ .highlight .nn {
+ color: #953800;
+ }
+
+ .highlight .sr {
+ color: #116329;
+ }
+
+ .highlight .na {
+ color: #116329;
+ }
+
+ .highlight .nt {
+ color: #116329;
+ }
+
+ .highlight .gi {
+ color: #116329;
+ background-color: #dafbe1;
+ }
+
+ .highlight .kc {
+ color: #0550ae;
+ }
+
+ .highlight .l,
+ .highlight .ld,
+ .highlight .m,
+ .highlight .mb,
+ .highlight .mf,
+ .highlight .mh,
+ .highlight .mi,
+ .highlight .il,
+ .highlight .mo,
+ .highlight .mx {
+ color: #0550ae;
+ }
+
+ .highlight .sb {
+ color: #0550ae;
+ }
+
+ .highlight .bp {
+ color: #0550ae;
+ }
+
+ .highlight .ne {
+ color: #0550ae;
+ }
+
+ .highlight .nl {
+ color: #0550ae;
+ }
+
+ .highlight .py {
+ color: #0550ae;
+ }
+
+ .highlight .nv,
+ .highlight .vc,
+ .highlight .vg,
+ .highlight .vi,
+ .highlight .vm {
+ color: #0550ae;
+ }
+
+ .highlight .o,
+ .highlight .ow {
+ color: #0550ae;
+ }
+
+ .highlight .gh {
+ color: #0550ae;
+ font-weight: bold;
+ }
+
+ .highlight .gu {
+ color: #0550ae;
+ font-weight: bold;
+ }
+
+ .highlight .s,
+ .highlight .sa,
+ .highlight .sc,
+ .highlight .dl,
+ .highlight .sd,
+ .highlight .s2,
+ .highlight .se,
+ .highlight .sh,
+ .highlight .sx,
+ .highlight .s1,
+ .highlight .ss {
+ color: #0a3069;
+ }
+
+ .highlight .nd {
+ color: #8250df;
+ }
+
+ .highlight .nf,
+ .highlight .fm {
+ color: #8250df;
+ }
+
+ .highlight .err {
+ color: #f6f8fa;
+ background-color: #82071e;
+ }
+
+ .highlight .c,
+ .highlight .ch,
+ .highlight .cd,
+ .highlight .cm,
+ .highlight .cp,
+ .highlight .cpf,
+ .highlight .c1,
+ .highlight .cs {
+ color: #68717a;
+ }
+
+ .highlight .gl {
+ color: #68717a;
+ }
+
+ .highlight .gt {
+ color: #68717a;
+ }
+
+ .highlight .ni {
+ color: #24292f;
+ }
+
+ .highlight .si {
+ color: #24292f;
+ }
+
+ .highlight .ge {
+ color: #24292f;
+ font-style: italic;
+ }
+
+ .highlight .gs {
+ color: #24292f;
+ font-weight: bold;
+ }
+}
diff --git a/_sass/variables-hook.scss b/_sass/variables-hook.scss
deleted file mode 100644
index f27e0eb8..00000000
--- a/_sass/variables-hook.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-/*
- Appending custom SCSS variables will override the default ones in `_sass/addon/variables.scsss`
-*/
diff --git a/_sass/vendors/_bootstrap.scss b/_sass/vendors/_bootstrap.scss
new file mode 100644
index 00000000..c47d0942
--- /dev/null
+++ b/_sass/vendors/_bootstrap.scss
@@ -0,0 +1,5 @@
+@charset "UTF-8";/*!
+ * Bootstrap v5.3.8 (https://getbootstrap.com/)
+ * Copyright 2011-2025 The Bootstrap Authors
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */:root,[data-bs-theme=light]{--bs-success:#198754;--bs-danger:#dc3545;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,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-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-bg:#e9ecef;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-bg:#f8f9fa;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xxl:2rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-bg:#343a40;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-bg:#2b3035;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.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 + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .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}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}.small,small{font-size:.875em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button{text-transform:none}[role=button]{cursor:pointer}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}iframe{border:0}summary{display:list-item;cursor:pointer}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.list-unstyled{padding-left:0;list-style:none}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.figure{display:inline-block}.container{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}@media (min-width:1400px){.container{max-width:1320px}}:root{}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.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-1>*{flex:0 0 auto;width:100%}.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%}.g-0{--bs-gutter-x:0}.g-0{--bs-gutter-y:0}.g-4{--bs-gutter-x:1.5rem}.g-4{--bs-gutter-y:1.5rem}@media (min-width:576px){.col-sm{flex:1 0 0}.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%}}@media (min-width:768px){.col-md{flex:1 0 0}.row-cols-md-2>*{flex:0 0 auto;width:50%}.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%}}@media (min-width:992px){.col-lg{flex:1 0 0}.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%}}@media (min-width:1200px){.col-xl{flex:1 0 0}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.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%}}@media (min-width:1400px){.col-xxl{flex:1 0 0}.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%}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .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:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-tooltip,.was-validated :valid~.valid-tooltip{display:block}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-tooltip{display:block}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropup{position:relative}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.btn-group{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(-1 * var(--bs-border-width))}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.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:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-text:last-child{margin-bottom:0}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1 * var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.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:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg: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 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-padding-x:0.75rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast:not(.show){display:none}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);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;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}:root,[data-bs-theme=light]{}[data-bs-theme=dark]{}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-middle{vertical-align:middle!important}.overflow-hidden{overflow:hidden!important}.d-block{display:block!important}.d-flex{display:flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!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}.h-100{height:100%!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-wrap{flex-wrap:wrap!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.pt-0{padding-top:0!important}.pt-2{padding-top:.5rem!important}.pe-1{padding-right:.25rem!important}.pe-4{padding-right:1.5rem!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-4{padding-bottom:1.5rem!important}.ps-0{padding-left:0!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.gap-3{gap:1rem!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}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-nowrap{white-space:nowrap!important}.text-muted{color:var(--bs-secondary-color)!important}.pe-none{pointer-events:none!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.invisible{visibility:hidden!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.me-sm-4{margin-right:1.5rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}}@media (min-width:768px){.flex-md-row-reverse{flex-direction:row-reverse!important}.mt-md-0{margin-top:0!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}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.justify-content-lg-between{justify-content:space-between!important}.align-items-lg-center{align-items:center!important}.ms-lg-0{margin-left:0!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}.pb-lg-3{padding-bottom:1rem!important}.ps-lg-2{padding-left:.5rem!important}}@media (min-width:1200px){.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}}@media (min-width:1400px){.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}}
\ No newline at end of file
diff --git a/_tabs/about.md b/_tabs/about.md
index d88d7887..17ac0a2a 100644
--- a/_tabs/about.md
+++ b/_tabs/about.md
@@ -1,5 +1,7 @@
---
title: About Me
+icon: fas fa-info-circle
+order: 4
title2: Quantumly Confused - About Me
summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Innovation, Quantum Technology and related adventures
keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering,innovation
diff --git a/_tabs/archives.md b/_tabs/archives.md
index a0090a12..c3abc594 100644
--- a/_tabs/archives.md
+++ b/_tabs/archives.md
@@ -1,40 +1,5 @@
---
-title: Archives
-title2: Padraignix's InfoSec Blog - Archives
-type: archives
-summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
-keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
-thumbnail: https://github.com/padraignix.png
-canon: https://blog.quantumlyconfused.com/tabs/archives/
+layout: archives
+icon: fas fa-archive
+order: 3
---
-
-
{{ post.title }}
-
+
{{ post.date | date_to_xmlschema }}
{% if post.last_modified_at %}
{{ post.last_modified_at | date_to_xmlschema }}
@@ -34,7 +34,7 @@ permalink: /feed.xml
{{ post.date | date_to_xmlschema }}
{% endif %}
{{ post_absolute_url }}
-
+
{{ post.author | default: site.social.name }}
@@ -45,14 +45,7 @@ permalink: /feed.xml
{% endfor %}
{% endif %}
- {% if post.summary %}
- {{ post.summary | strip }}
- {% else %}
-
- {% include no-linenos.html content=post.content %}
- {{ content | strip_html | truncate: 400 }}
-
- {% endif %}
+ {% include post-summary.html max_length=400 %}
{% endfor %}
diff --git a/assets/js/data/mathjax.js b/assets/js/data/mathjax.js
new file mode 100644
index 00000000..ca3d0de5
--- /dev/null
+++ b/assets/js/data/mathjax.js
@@ -0,0 +1,25 @@
+---
+layout: compress
+# WARNING: Don't use '//' to comment out code, use '{% comment %}' and '{% endcomment %}' instead.
+---
+
+{%- comment -%}
+ See:
+{%- endcomment -%}
+
+MathJax = {
+ tex: {
+ {%- comment -%} start/end delimiter pairs for in-line math {%- endcomment -%}
+ inlineMath: [
+ ['$', '$'],
+ ['\\(', '\\)']
+ ],
+ {%- comment -%} start/end delimiter pairs for display math {%- endcomment -%}
+ displayMath: [
+ ['$$', '$$'],
+ ['\\[', '\\]']
+ ],
+ {%- comment -%} equation numbering {%- endcomment -%}
+ tags: 'ams'
+ }
+};
diff --git a/assets/js/data/search.json b/assets/js/data/search.json
index 2601ed07..1c35ec18 100644
--- a/assets/js/data/search.json
+++ b/assets/js/data/search.json
@@ -10,11 +10,9 @@ swcache: true
"url": {{ post.url | relative_url | jsonify }},
"categories": {{ post.categories | join: ', ' | jsonify }},
"tags": {{ post.tags | join: ', ' | jsonify }},
- "date": "{{ post.date }}",
- {% include no-linenos.html content=post.content %}
- {% assign _content = content | strip_html | strip_newlines %}
- "snippet": {{ _content | truncate: 200 | jsonify }},
- "content": {{ _content | jsonify }}
+ "date": {{ post.date | jsonify }},
+ {% capture content -%}{% include post-summary.html full_text=true %}{%- endcapture -%}
+ "content": {{ content | jsonify }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
diff --git a/assets/js/data/swcache.js b/assets/js/data/swcache.js
deleted file mode 100644
index 14a9f56e..00000000
--- a/assets/js/data/swcache.js
+++ /dev/null
@@ -1,54 +0,0 @@
----
-layout: compress
-
-# The list to be cached by PWA
----
-
-const resource = [
- /* --- CSS --- */
- '{{ "/assets/css/style.css" | relative_url }}',
-
- /* --- PWA --- */
- '{{ "/app.js" | relative_url }}',
- '{{ "/sw.js" | relative_url }}',
-
- /* --- HTML --- */
- '{{ "/index.html" | relative_url }}',
- '{{ "/404.html" | relative_url }}',
-
- {% for tab in site.tabs %}
- '{{ tab.url | relative_url }}',
- {% endfor %}
-
- /* --- Favicons & compressed JS --- */
- {% assign cache_list = site.static_files | where: 'swcache', true %}
- {% for file in cache_list %}
- '{{ file.path | relative_url }}'{%- unless forloop.last -%},{%- endunless -%}
- {% endfor %}
-];
-
-/* The request url with below domain will be cached */
-const allowedDomains = [
- {% if site.google_analytics.id != empty and site.google_analytics.id %}
- 'www.googletagmanager.com',
- 'www.google-analytics.com',
- {% endif %}
-
- '{{ site.url | split: "//" | last }}',
-
- {% if site.img_cdn contains '//' and site.img_cdn %}
- '{{ site.img_cdn | split: '//' | last | split: '/' | first }}',
- {% endif %}
-
- 'fonts.gstatic.com',
- 'fonts.googleapis.com',
- 'cdn.jsdelivr.net',
- 'polyfill.io'
-];
-
-/* Requests that include the following path will be banned */
-const denyUrls = [
- {% if site.google_analytics.pv.cache_path %}
- '{{ site.google_analytics.pv.cache_path | absolute_url }}'
- {% endif %}
-];
diff --git a/assets/js/data/swconf.js b/assets/js/data/swconf.js
new file mode 100644
index 00000000..798888a9
--- /dev/null
+++ b/assets/js/data/swconf.js
@@ -0,0 +1,47 @@
+---
+layout: compress
+permalink: '/:path/swconf.js'
+# Note that this file will be fetched by the ServiceWorker, so it will not be cached.
+---
+
+const swconf = {
+ {% if site.pwa.cache.enabled %}
+ cacheName: 'chirpy-{{ "now" | date: "%s" }}',
+
+ {%- comment -%} Resources added to the cache during PWA installation. {%- endcomment -%}
+ resources: [
+ '{{ "/assets/css/:THEME.css" | replace: ':THEME', site.theme | relative_url }}',
+ '{{ "/" | relative_url }}',
+ {% for tab in site.tabs %}
+ '{{- tab.url | relative_url -}}',
+ {% endfor %}
+
+ {% assign cache_list = site.static_files | where: 'swcache', true %}
+ {% for file in cache_list %}
+ '{{ file.path | relative_url }}'{%- unless forloop.last -%},{%- endunless -%}
+ {% endfor %}
+ ],
+
+ interceptor: {
+ {%- comment -%} URLs containing the following paths will not be cached. {%- endcomment -%}
+ paths: [
+ {% for path in site.pwa.cache.deny_paths %}
+ {% unless path == empty %}
+ '{{ path | relative_url }}'{%- unless forloop.last -%},{%- endunless -%}
+ {% endunless %}
+ {% endfor %}
+ ],
+
+ {%- comment -%} URLs containing the following prefixes will not be cached. {%- endcomment -%}
+ urlPrefixes: [
+ {% if site.analytics.goatcounter.id != nil and site.pageviews.provider == 'goatcounter' %}
+ 'https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/'
+ {% endif %}
+ ]
+ },
+
+ purge: false
+ {% else %}
+ purge: true
+ {% endif %}
+};
diff --git a/assets/js/dist/app.min.js b/assets/js/dist/app.min.js
new file mode 100644
index 00000000..48ba5c48
--- /dev/null
+++ b/assets/js/dist/app.min.js
@@ -0,0 +1,7 @@
+---
+permalink: /:basename
+---
+/*!
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
+ */
+!function(){"use strict";const e=new Map;var t={set(t,n,r){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,r):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const r=e.get(t);r.delete(n),0===r.size&&e.delete(t)}};const n="transitionend",r=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),i=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>i(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(r(e)):null,a=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,c=[],u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},d=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void u(e);const r=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const r=Number.parseFloat(t),o=Number.parseFloat(n);return r||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const i=r=>{let{target:s}=r;s===t&&(o=!0,t.removeEventListener(n,i),u(e))};t.addEventListener(n,i),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},r)},f=/[^.]*(?=\..*)\.|.*/,h=/\..*/,g=/::\d+$/,m={};let p=1;const b={mouseenter:"mouseover",mouseleave:"mouseout"},v=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function _(e,t){return t&&`${t}::${p++}`||e.uidEvent||p++}function y(e){const t=_(e);return e.uidEvent=t,m[t]=m[t]||{},m[t]}function E(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function w(e,t,n){const r="string"==typeof t,o=r?n:t||n;let i=O(e);return v.has(i)||(i=e),[r,o,i]}function A(e,t,n,r,o){if("string"!=typeof t||!e)return;let[i,s,a]=w(t,n,r);if(t in b){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const l=y(e),c=l[a]||(l[a]={}),u=E(c,s,i?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const d=_(s,t.replace(f,"")),h=i?function(e,t,n){return function r(o){const i=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of i)if(a===s)return $(o,{delegateTarget:s}),r.oneOff&&T.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(r){return $(r,{delegateTarget:e}),n.oneOff&&T.off(e,r.type,t),t.apply(e,[r])}}(e,s);h.delegationSelector=i?n:null,h.callable=s,h.oneOff=o,h.uidEvent=d,c[d]=h,e.addEventListener(a,h,i)}function S(e,t,n,r,o){const i=E(t[n],r,o);i&&(e.removeEventListener(n,i,Boolean(o)),delete t[n][i.uidEvent])}function C(e,t,n,r){const o=t[n]||{};for(const[i,s]of Object.entries(o))i.includes(r)&&S(e,t,n,s.callable,s.delegationSelector)}function O(e){return e=e.replace(h,""),b[e]||e}const T={on(e,t,n,r){A(e,t,n,r,!1)},one(e,t,n,r){A(e,t,n,r,!0)},off(e,t,n,r){if("string"!=typeof t||!e)return;const[o,i,s]=w(t,n,r),a=s!==t,l=y(e),c=l[s]||{},u=t.startsWith(".");if(void 0===i){if(u)for(const n of Object.keys(l))C(e,l,n,t.slice(1));for(const[n,r]of Object.entries(c)){const o=n.replace(g,"");a&&!t.includes(o)||S(e,l,s,r.callable,r.delegationSelector)}}else{if(!Object.keys(c).length)return;S(e,l,s,i,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const r=l();let o=null,i=!0,s=!0,a=!1;t!==O(t)&&r&&(o=r.Event(t,n),r(e).trigger(o),i=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=$(new Event(t,{bubbles:i,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function $(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,r]of Object.entries(t))try{e[n]=r}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>r})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function j(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const L={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${j(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${j(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const r of n){let n=r.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[r])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${j(t)}`))};class D{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=i(t)?L.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...i(t)?L.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,r]of Object.entries(t)){const t=e[n],s=i(t)?"element":o(t);if(!new RegExp(r).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${r}".`)}}}class I extends D{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),T.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){d(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const k=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>r(e)).join(","):null},M={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let r=e.parentNode.closest(t);for(;r;)n.push(r),r=r.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!a(e)&&(e=>{if(!i(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t})(e))},getSelectorFromElement(e){const t=k(e);return t&&M.findOne(t)?t:null},getElementFromSelector(e){const t=k(e);return t?M.findOne(t):null},getMultipleElementsFromSelector(e){const t=k(e);return t?M.find(t):[]}},K=".bs.toast",P=`mouseover${K}`,q=`mouseout${K}`,x=`focusin${K}`,W=`focusout${K}`,Y=`hide${K}`,F=`hidden${K}`,R=`show${K}`,V=`shown${K}`,Q="hide",z="show",B="showing",H={animation:"boolean",autohide:"boolean",delay:"number"},U={animation:!0,autohide:!0,delay:5e3};class G extends I{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return U}static get DefaultType(){return H}static get NAME(){return"toast"}show(){if(T.trigger(this._element,R).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");this._element.classList.remove(Q),this._element.offsetHeight,this._element.classList.add(z,B),this._queueCallback(()=>{this._element.classList.remove(B),T.trigger(this._element,V),this._maybeScheduleHide()},this._element,this._config.animation)}hide(){if(!this.isShown())return;if(T.trigger(this._element,Y).defaultPrevented)return;this._element.classList.add(B),this._queueCallback(()=>{this._element.classList.add(Q),this._element.classList.remove(B,z),T.trigger(this._element,F)},this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(z),super.dispose()}isShown(){return this._element.classList.contains(z)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){T.on(this._element,P,e=>this._onInteraction(e,!0)),T.on(this._element,q,e=>this._onInteraction(e,!1)),T.on(this._element,x,e=>this._onInteraction(e,!0)),T.on(this._element,W,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){const t=G.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}})}}var J,Z;if(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"hide";const n=`click.dismiss${e.EVENT_KEY}`,r=e.NAME;T.on(document,n,`[data-bs-dismiss="${r}"]`,function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),a(this))return;const o=M.getElementFromSelector(this)||this.closest(`.${r}`);e.getOrCreateInstance(o)[t]()})}(G),J=G,Z=()=>{const e=l();if(e){const t=J.NAME,n=e.fn[t];e.fn[t]=J.jQueryInterface,e.fn[t].Constructor=J,e.fn[t].noConflict=()=>(e.fn[t]=n,J.jQueryInterface)}},"loading"===document.readyState?(c.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of c)e()}),c.push(Z)):Z(),"serviceWorker"in navigator){const e=new URL(document.currentScript.src),t=e.searchParams.get("register"),n=e.searchParams.get("baseurl");if(t){const e=`${n}/sw.min.js`,t=document.getElementById("notification"),r=t.querySelector('[aria-label="Update"]'),o=G.getOrCreateInstance(t);navigator.serviceWorker.register(e).then(e=>{e.waiting&&o.show(),e.addEventListener("updatefound",()=>{e.installing.addEventListener("statechange",()=>{e.waiting&&navigator.serviceWorker.controller&&o.show()})}),r.addEventListener("click",()=>{e.waiting&&e.waiting.postMessage("SKIP_WAITING"),o.hide()})});let i=!1;navigator.serviceWorker.addEventListener("controllerchange",()=>{i||(window.location.reload(),i=!0)})}else navigator.serviceWorker.getRegistrations().then(function(e){for(let t of e)t.unregister()})}}();
diff --git a/assets/js/dist/categories.min.js b/assets/js/dist/categories.min.js
index b9a7ded4..49eaacfb 100644
--- a/assets/js/dist/categories.min.js
+++ b/assets/js/dist/categories.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(o=>{o=$(o.target);(o.prop("tagName")==="button".toUpperCase()?o:o.parent()).blur(),flipMode()})});const ScrollHelper=function(){const o=$("body"),e="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let a=0,r=!1,l=!1;return{hideTopbar:()=>o.attr(e,!1),showTopbar:()=>o.attr(e,!0),addScrollUpTask:()=>{a+=1,r=r||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===r,unlockTopbar:()=>r=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===l,lockOrientation:()=>l=!0,unLockOrientation:()=>l=!1}}();$(function(){const o=$("#sidebar-trigger"),e=$("#search-trigger"),t=$("#search-cancel"),a=$("#main"),r=$("#topbar-title"),l=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let o=0;return{block(){o=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(o)},getOffset(){return o}}}(),p={on(){o.addClass("unloaded"),r.addClass("unloaded"),e.addClass("unloaded"),l.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),l.removeClass("d-flex"),o.removeClass("unloaded"),r.removeClass("unloaded"),e.removeClass("unloaded")}},f=function(){let o=!1;return{on(){o||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),o=!0)},off(){o&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),i.val(""),o=!1)},isVisible(){return o}}}();function u(){return t.hasClass("loaded")}e.click(function(){p.on(),f.on(),i.focus()}),t.click(function(){p.off(),f.off()}),i.focus(function(){l.addClass("input-focus")}),i.focusout(function(){l.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?u()?c.removeClass("unloaded"):f.off():(f.on(),u()&&c.addClass("unloaded"))})}),$(function(){var o=function(){const o="sidebar-display";let e=!1;const t=$("body");return{toggle(){!1===e?t.attr(o,""):t.removeAttr(o),e=!e}}}();$("#sidebar-trigger").click(o.toggle),$("#mask").click(o.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),t=ScrollHelper.getTopbarHeight();let o,a=0;function r(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var o=screen.orientation.type;"landscape-primary"!==o&&"landscape-secondary"!==o||r()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&r()}),$(window).scroll(()=>{o=o||!0}),setInterval(()=>{o&&(!function(){var o=$(this).scrollTop();if(!(Math.abs(a-o)<=t)){if(o>a)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(o+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=o}}(),o=!1)},250)}),$(function(){var o="div.post>h1:first-of-type",e=$(o);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=e.text().trim(),r=!1,l=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(o=>{var e,t;r?(t=$(window).scrollTop(),e=le.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=f();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of d)e()}),d.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,b=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function C(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function A(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function L(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return O.has(r)||(r=e),[i,o,r]}function T(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=L(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=C(e),l=c[a]||(c[a]={}),u=A(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=x(s,t.replace(v,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return D(o,{delegateTarget:s}),i.oneOff&&P.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return D(i,{delegateTarget:e}),n.oneOff&&P.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,e.addEventListener(a,d,r)}function S(e,t,n,i,o){const r=A(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(b,""),E[e]||e}const P={on(e,t,n,i){T(e,t,n,i,!1)},one(e,t,n,i){T(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=L(t,n,i),a=s!==t,c=C(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=f();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=D(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function D(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const B={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?B.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?B.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const H=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},F={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=H(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){const t=H(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){const t=H(e);return t?F.find(t):[]}},q=".bs.collapse",z=`show${q}`,W=`shown${q}`,R=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,K="show",U="collapse",Q="collapsing",X=`:scope .${U} .${U}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=F.find(G);for(const e of n){const t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(P.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(U),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U,K),this._element.style[t]="",P.trigger(this._element,W)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,R).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(U,K);for(const e of this._triggerArray){const t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U),P.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(K)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(G);for(const t of e){const e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=F.find(X,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}P.on(document,Y,G,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of F.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee);const te=document.getElementsByClassName("collapse");var ne="top",ie="bottom",oe="right",re="left",se="auto",ae=[ne,ie,oe,re],ce="start",le="end",ue="clippingParents",fe="viewport",de="popper",pe="reference",he=ae.reduce(function(e,t){return e.concat([t+"-"+ce,t+"-"+le])},[]),me=[].concat(ae,[se]).reduce(function(e,t){return e.concat([t,t+"-"+ce,t+"-"+le])},[]),ge="beforeRead",ve="read",be="afterRead",_e="beforeMain",ye="main",we="afterMain",Ee="beforeWrite",Oe="write",xe="afterWrite",Ce=[ge,ve,be,_e,ye,we,Ee,Oe,xe];function Ae(e){return e?(e.nodeName||"").toLowerCase():null}function Le(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Le(e).Element||e instanceof Element}function Se(e){return e instanceof Le(e).HTMLElement||e instanceof HTMLElement}function ke(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Le(e).ShadowRoot||e instanceof ShadowRoot)}var je={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Se(o)&&Ae(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Se(i)&&Ae(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function Pe(e){return e.split("-")[0]}var De=Math.max,Ne=Math.min,Me=Math.round;function Be(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Ie(){return!/^((?!chrome|android).)*safari/i.test(Be())}function $e(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Se(e)&&(o=e.offsetWidth>0&&Me(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Me(i.height)/e.offsetHeight||1);var s=(Te(e)?Le(e):window).visualViewport,a=!Ie()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function He(e){var t=$e(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function Fe(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&ke(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function qe(e){return Le(e).getComputedStyle(e)}function ze(e){return["table","td","th"].indexOf(Ae(e))>=0}function We(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function Re(e){return"html"===Ae(e)?e:e.assignedSlot||e.parentNode||(ke(e)?e.host:null)||We(e)}function Ve(e){return Se(e)&&"fixed"!==qe(e).position?e.offsetParent:null}function Ye(e){for(var t=Le(e),n=Ve(e);n&&ze(n)&&"static"===qe(n).position;)n=Ve(n);return n&&("html"===Ae(n)||"body"===Ae(n)&&"static"===qe(n).position)?t:n||function(e){var t=/firefox/i.test(Be());if(/Trident/i.test(Be())&&Se(e)&&"fixed"===qe(e).position)return null;var n=Re(e);for(ke(n)&&(n=n.host);Se(n)&&["html","body"].indexOf(Ae(n))<0;){var i=qe(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ke(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ue(e,t,n){return De(e,Ne(t,n))}function Qe(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Xe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Ge={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=Pe(n.placement),c=Ke(a),l=[re,oe].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Qe("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Xe(e,ae))}(o.padding,n),f=He(r),d="y"===c?ne:re,p="y"===c?ie:oe,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ye(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,_=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+b,E=Ue(_,w,y),O=c;n.modifiersData[i]=((t={})[O]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&Fe(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Je(e){return e.split("-")[1]}var Ze={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),_=re,y=ne,w=window;if(l){var E=Ye(n),O="clientHeight",x="clientWidth";if(E===Le(n)&&"static"!==qe(E=We(n)).position&&"absolute"===a&&(O="scrollHeight",x="scrollWidth"),o===ne||(o===re||o===oe)&&r===le)y=ie,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===re||(o===ne||o===ie)&&r===le)_=oe,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var C,A=Object.assign({position:a},l&&Ze),L=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Me(n*o)/o||0,y:Me(i*o)/o||0}}({x:p,y:m},Le(n)):{x:p,y:m};return p=L.x,m=L.y,c?Object.assign({},A,((C={})[y]=b?"0":"",C[_]=v?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",C)):Object.assign({},A,((t={})[y]=b?m+"px":"",t[_]=v?p+"px":"",t.transform="",t))}var tt={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:Pe(t.placement),variation:Je(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,et(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,et(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},nt={passive:!0};var it={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Le(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,nt)}),a&&c.addEventListener("resize",n.update,nt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,nt)}),a&&c.removeEventListener("resize",n.update,nt)}},data:{}},ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(e){return e.replace(/left|right|bottom|top/g,function(e){return ot[e]})}var st={start:"end",end:"start"};function at(e){return e.replace(/start|end/g,function(e){return st[e]})}function ct(e){var t=Le(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function lt(e){return $e(We(e)).left+ct(e).scrollLeft}function ut(e){var t=qe(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ft(e){return["html","body","#document"].indexOf(Ae(e))>=0?e.ownerDocument.body:Se(e)&&ut(e)?e:ft(Re(e))}function dt(e,t){var n;void 0===t&&(t=[]);var i=ft(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Le(i),s=o?[r].concat(r.visualViewport||[],ut(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(dt(Re(s)))}function pt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function ht(e,t,n){return t===fe?pt(function(e,t){var n=Le(e),i=We(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Ie();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+lt(e),y:c}}(e,n)):Te(t)?function(e,t){var n=$e(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):pt(function(e){var t,n=We(e),i=ct(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+lt(e),c=-i.scrollTop;return"rtl"===qe(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(We(e)))}function mt(e,t,n,i){var o="clippingParents"===t?function(e){var t=dt(Re(e)),n=["absolute","fixed"].indexOf(qe(e).position)>=0&&Se(e)?Ye(e):e;return Te(n)?t.filter(function(e){return Te(e)&&Fe(e,n)&&"body"!==Ae(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=ht(e,n,i);return t.top=De(o.top,t.top),t.right=Ne(o.right,t.right),t.bottom=Ne(o.bottom,t.bottom),t.left=De(o.left,t.left),t},ht(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function gt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?Pe(o):null,s=o?Je(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case ne:t={x:a,y:n.y-i.height};break;case ie:t={x:a,y:n.y+n.height};break;case oe:t={x:n.x+n.width,y:c};break;case re:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ke(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ce:t[l]=t[l]-(n[u]/2-i[u]/2);break;case le:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function vt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?ue:a,l=n.rootBoundary,u=void 0===l?fe:l,f=n.elementContext,d=void 0===f?de:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Qe("number"!=typeof g?g:Xe(g,ae)),b=d===de?pe:de,_=e.rects.popper,y=e.elements[h?b:d],w=mt(Te(y)?y:y.contextElement||We(e.elements.popper),c,u,s),E=$e(e.elements.reference),O=gt({reference:E,element:_,placement:o}),x=pt(Object.assign({},_,O)),C=d===de?x:E,A={top:w.top-C.top+v.top,bottom:C.bottom-w.bottom+v.bottom,left:w.left-C.left+v.left,right:C.right-w.right+v.right},L=e.modifiersData.offset;if(d===de&&L){var T=L[o];Object.keys(A).forEach(function(e){var t=[oe,ie].indexOf(e)>=0?1:-1,n=[ne,ie].indexOf(e)>=0?"y":"x";A[e]+=T[n]*t})}return A}function bt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?me:c,u=Je(i),f=u?a?he:he.filter(function(e){return Je(e)===u}):ae,d=f.filter(function(e){return l.indexOf(e)>=0});0===d.length&&(d=f);var p=d.reduce(function(t,n){return t[n]=vt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[Pe(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var _t={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,v=Pe(g),b=c||(v===g||!h?[rt(g)]:function(e){if(Pe(e)===se)return[];var t=rt(e);return[at(e),t,at(t)]}(g)),_=[g].concat(b).reduce(function(e,n){return e.concat(Pe(n)===se?bt(t,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,O=!0,x=_[0],C=0;C<_.length;C++){var A=_[C],L=Pe(A),T=Je(A)===ce,S=[ne,ie].indexOf(L)>=0,k=S?"width":"height",j=vt(t,{placement:A,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),P=S?T?oe:re:T?ie:ne;y[k]>w[k]&&(P=rt(P));var D=rt(P),N=[];if(r&&N.push(j[L]<=0),a&&N.push(j[P]<=0,j[D]<=0),N.every(function(e){return e})){x=A,O=!1;break}E.set(A,N)}if(O)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function yt(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function wt(e){return[ne,oe,ie,re].some(function(t){return e[t]>=0})}var Et={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=vt(t,{elementContext:"reference"}),a=vt(t,{altBoundary:!0}),c=yt(s,i),l=yt(a,o,r),u=wt(c),f=wt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Ot={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=me.reduce(function(e,n){return e[n]=function(e,t,n){var i=Pe(e),o=[re,ne].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[re,oe].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var xt={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=gt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var Ct={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=vt(t,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=Pe(t.placement),b=Je(t.placement),_=!b,y=Ke(v),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,O=t.rects.reference,x=t.rects.popper,C="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,A="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),L=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,T={x:0,y:0};if(E){if(r){var S,k="y"===y?ne:re,j="y"===y?ie:oe,P="y"===y?"height":"width",D=E[y],N=D+g[k],M=D-g[j],B=p?-x[P]/2:0,I=b===ce?O[P]:x[P],$=b===ce?-x[P]:-O[P],H=t.elements.arrow,F=p&&H?He(H):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],W=q[j],R=Ue(0,O[P],F[P]),V=_?O[P]/2-B-R-z-A.mainAxis:I-R-z-A.mainAxis,Y=_?-O[P]/2+B+R+W+A.mainAxis:$+R+W+A.mainAxis,K=t.elements.arrow&&Ye(t.elements.arrow),U=K?"y"===y?K.clientTop||0:K.clientLeft||0:0,Q=null!=(S=null==L?void 0:L[y])?S:0,X=D+Y-Q,G=Ue(p?Ne(N,D+V-Q-U):N,D,p?De(M,X):M);E[y]=G,T[y]=G-D}if(a){var J,Z="x"===y?ne:re,ee="x"===y?ie:oe,te=E[w],se="y"===w?"height":"width",ae=te+g[Z],le=te-g[ee],ue=-1!==[ne,re].indexOf(v),fe=null!=(J=null==L?void 0:L[w])?J:0,de=ue?ae:te-O[se]-x[se]-fe+A.altAxis,pe=ue?te+O[se]+x[se]-fe-A.altAxis:le,he=p&&ue?function(e,t,n){var i=Ue(e,t,n);return i>n?n:i}(de,te,pe):Ue(p?de:ae,te,p?pe:le);E[w]=he,T[w]=he-te}t.modifiersData[i]=T}},requiresIfExists:["offset"]};function At(e,t,n){void 0===n&&(n=!1);var i,o,r=Se(t),s=Se(t)&&function(e){var t=e.getBoundingClientRect(),n=Me(t.width)/e.offsetWidth||1,i=Me(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=We(t),c=$e(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Ae(t)||ut(a))&&(l=(i=t)!==Le(i)&&Se(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:ct(i)),Se(t)?((u=$e(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=lt(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Lt(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function St(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Nt.has(n)||Boolean(Mt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const It={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},$t={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Ht={entry:"(string|element|function|null)",selector:"(string|element)"};class Ft extends I{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return It}static get DefaultType(){return $t}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},Ht)}_setContent(e,t,n){const i=F.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Bt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const qt=new Set(["sanitize","allowList","sanitizeFn"]),zt="fade",Wt="show",Rt=".tooltip-inner",Vt=".modal",Yt="hide.bs.modal",Kt="hover",Ut="focus",Qt="click",Xt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Gt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'t.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...sn].forEach(e=>{e.onclick=()=>this.showPopup()}),an.onclick=e=>this.clickBackdrop(e),cn.onclick=()=>this.hidePopup(),an.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var dn={_:!0},pn={_:48};tn(fn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:en(nn=fn,nn,pn)._});tn(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const hn="dropdown",mn=".bs.dropdown",gn=".data-api",vn="ArrowUp",bn="ArrowDown",_n=`hide${mn}`,yn=`hidden${mn}`,wn=`show${mn}`,En=`shown${mn}`,On=`click${mn}${gn}`,xn=`keydown${mn}${gn}`,Cn=`keyup${mn}${gn}`,An="show",Ln='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Tn=`${Ln}.${An}`,Sn=".dropdown-menu",kn=p()?"top-end":"top-start",jn=p()?"top-start":"top-end",Pn=p()?"bottom-end":"bottom-start",Dn=p()?"bottom-start":"bottom-end",Nn=p()?"left-start":"right-start",Mn=p()?"right-start":"left-start",Bn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},In={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class $n extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=F.next(this._element,Sn)[0]||F.prev(this._element,Sn)[0]||F.findOne(Sn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Bn}static get DefaultType(){return In}static get NAME(){return hn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!P.trigger(this._element,wn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(An),this._element.classList.add(An),P.trigger(this._element,En,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!P.trigger(this._element,_n,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(An),this._element.classList.remove(An),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),P.trigger(this._element,yn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${hn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===Pt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=jt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(An)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Nn;if(e.classList.contains("dropstart"))return Mn;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?jn:kn:t?Dn:Pn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=F.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===bn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=$n.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=F.find(Tn);for(const n of t){const t=$n.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[vn,bn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Ln)?this:F.prev(this,Ln)[0]||F.next(this,Ln)[0]||F.findOne(Ln,e.delegateTarget.parentNode),r=$n.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}P.on(document,xn,Ln,$n.dataApiKeydownHandler),P.on(document,xn,Sn,$n.dataApiKeydownHandler),P.on(document,On,$n.clearMenus),P.on(document,Cn,$n.clearMenus),P.on(document,On,Ln,function(e){e.preventDefault(),$n.getOrCreateInstance(this).toggle()}),h($n);const Hn="active",Fn=document.querySelector("#mode-toggle + .dropdown-menu"),qn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const zn=document.getElementById("sidebar"),Wn=document.getElementById("sidebar-trigger"),Rn=document.getElementById("mask");class Vn{static toggle(){Yn._=en(Vn,this,!en(Vn,this,Yn)._),document.body.toggleAttribute("sidebar-display",en(Vn,this,Yn)._),zn.classList.toggle("z-2",en(Vn,this,Yn)._),Rn.classList.toggle("d-none",!en(Vn,this,Yn)._)}}var Yn={_:!1};const Kn=document.getElementById("sidebar-trigger"),Un=document.getElementById("search-trigger"),Qn=document.getElementById("search-cancel"),Xn=document.querySelectorAll("#main-wrapper>.container>.row"),Gn=document.getElementById("topbar-title"),Jn=document.getElementById("search"),Zn=document.getElementById("search-result-wrapper"),ei=document.getElementById("search-results"),ti=document.getElementById("search-input"),ni=document.getElementById("search-hints"),ii="d-block",oi="d-none",ri="input-focus",si="d-flex";class ai{static on(){Kn.classList.add(oi),Gn.classList.add(oi),Un.classList.add(oi),Jn.classList.add(si),Qn.classList.add(ii)}static off(){Qn.classList.remove(ii),Jn.classList.remove(si),Kn.classList.remove(oi),Gn.classList.remove(oi),Un.classList.remove(oi)}}class ci{static on(){this.resultVisible||(Zn.classList.remove(oi),Xn.forEach(e=>{e.classList.add(oi)}),this.resultVisible=!0)}static off(){this.resultVisible&&(ei.innerHTML="",ni.classList.contains(oi)&&ni.classList.remove(oi),Zn.classList.add(oi),Xn.forEach(e=>{e.classList.remove(oi)}),ti.textContent="",this.resultVisible=!1)}}function li(){return Qn.classList.contains(ii)}tn(ci,"resultVisible",!1),Theme.isToggleable&&(Fn.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==qn||e.classList.add(Hn)}),Fn.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=Fn.querySelector(`.${Hn}`);n!==t&&(n.classList.remove(Hn),t.classList.add(Hn),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Zt(e)),Wn.onclick=Rn.onclick=()=>Vn.toggle(),Un.addEventListener("click",()=>{ai.on(),ci.on(),ti.focus()}),Qn.addEventListener("click",()=>{ai.off(),ci.off()}),ti.addEventListener("focus",()=>{Jn.classList.add(ri)}),ti.addEventListener("focusout",()=>{Jn.classList.remove(ri)}),ti.addEventListener("input",()=>{""===ti.value?li()?ni.classList.remove(oi):ci.off():(ci.on(),li()&&ni.classList.add(oi))}),[...te].forEach(e=>{const t="h_"+e.id.substring(2),n=document.getElementById(t);e.addEventListener("hide.bs.collapse",()=>{n&&(n.querySelector(".far.fa-folder-open").className="far fa-folder fa-fw",n.querySelector(".fas.fa-angle-down").classList.add("rotate"),n.classList.remove("hide-border-bottom"))}),e.addEventListener("show.bs.collapse",()=>{n&&(n.querySelector(".far.fa-folder").className="far fa-folder-open fa-fw",n.querySelector(".fas.fa-angle-down").classList.remove("rotate"),n.classList.add("hide-border-bottom"))})})}();
diff --git a/assets/js/dist/commons.min.js b/assets/js/dist/commons.min.js
index 177faf01..1e0e65a5 100644
--- a/assets/js/dist/commons.min.js
+++ b/assets/js/dist/commons.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(o=>{o=$(o.target);(o.prop("tagName")==="button".toUpperCase()?o:o.parent()).blur(),flipMode()})});const ScrollHelper=function(){const o=$("body"),e="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let l=0,r=!1,a=!1;return{hideTopbar:()=>o.attr(e,!1),showTopbar:()=>o.attr(e,!0),addScrollUpTask:()=>{l+=1,r=r||!0},popScrollUpTask:()=>--l,hasScrollUpTask:()=>0!0===r,unlockTopbar:()=>r=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===a,lockOrientation:()=>a=!0,unLockOrientation:()=>a=!1}}();$(function(){const o=$("#sidebar-trigger"),e=$("#search-trigger"),t=$("#search-cancel"),l=$("#main"),r=$("#topbar-title"),a=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let o=0;return{block(){o=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(o)},getOffset(){return o}}}(),p={on(){o.addClass("unloaded"),r.addClass("unloaded"),e.addClass("unloaded"),a.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),a.removeClass("d-flex"),o.removeClass("unloaded"),r.removeClass("unloaded"),e.removeClass("unloaded")}},u=function(){let o=!1;return{on(){o||(d.block(),n.removeClass("unloaded"),l.addClass("unloaded"),o=!0)},off(){o&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),l.removeClass("unloaded"),d.release(),i.val(""),o=!1)},isVisible(){return o}}}();function f(){return t.hasClass("loaded")}e.click(function(){p.on(),u.on(),i.focus()}),t.click(function(){p.off(),u.off()}),i.focus(function(){a.addClass("input-focus")}),i.focusout(function(){a.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?f()?c.removeClass("unloaded"):u.off():(u.on(),f()&&c.addClass("unloaded"))})}),$(function(){var o=function(){const o="sidebar-display";let e=!1;const t=$("body");return{toggle(){!1===e?t.attr(o,""):t.removeAttr(o),e=!e}}}();$("#sidebar-trigger").click(o.toggle),$("#mask").click(o.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),t=ScrollHelper.getTopbarHeight();let o,l=0;function r(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var o=screen.orientation.type;"landscape-primary"!==o&&"landscape-secondary"!==o||r()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&r()}),$(window).scroll(()=>{o=o||!0}),setInterval(()=>{o&&(!function(){var o=$(this).scrollTop();if(!(Math.abs(l-o)<=t)){if(o>l)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(o+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}l=o}}(),o=!1)},250)}),$(function(){var o="div.post>h1:first-of-type",e=$(o);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let l=e.text().trim(),r=!1,a=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(l)&&(l=l.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(l);new IntersectionObserver(o=>{var e,t;r?(t=$(window).scrollTop(),e=ae.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=f();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of d)e()}),d.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,_=/\..*/,b=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function C(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function A(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return O.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=C(e),l=c[a]||(c[a]={}),u=A(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=x(s,t.replace(v,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return D(o,{delegateTarget:s}),i.oneOff&&P.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return D(i,{delegateTarget:e}),n.oneOff&&P.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,e.addEventListener(a,d,r)}function S(e,t,n,i,o){const r=A(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(_,""),E[e]||e}const P={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=C(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(b,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=f();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=D(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function D(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const B={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?B.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?B.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const H=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},F={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=H(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){const t=H(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){const t=H(e);return t?F.find(t):[]}},q=".bs.collapse",z=`show${q}`,W=`shown${q}`,R=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,K="show",U="collapse",Q="collapsing",X=`:scope .${U} .${U}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=F.find(G);for(const e of n){const t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(P.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(U),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U,K),this._element.style[t]="",P.trigger(this._element,W)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,R).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(U,K);for(const e of this._triggerArray){const t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U),P.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(K)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(G);for(const t of e){const e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=F.find(X,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}P.on(document,Y,G,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of F.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",fe="popper",de="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",ve="afterRead",_e="beforeMain",be="main",ye="afterMain",we="beforeWrite",Ee="write",Oe="afterWrite",xe=[me,ge,ve,_e,be,ye,we,Ee,Oe];function Ce(e){return e?(e.nodeName||"").toLowerCase():null}function Ae(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ae(e).Element||e instanceof Element}function Le(e){return e instanceof Ae(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ae(e).ShadowRoot||e instanceof ShadowRoot)}var ke={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Ce(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Ce(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function je(e){return e.split("-")[0]}var Pe=Math.max,De=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Be(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Ie(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ae(e):window).visualViewport,a=!Be()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function $e(e){var t=Ie(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function He(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Fe(e){return Ae(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Ce(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function We(e){return"html"===Ce(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function Re(e){return Le(e)&&"fixed"!==Fe(e).position?e.offsetParent:null}function Ve(e){for(var t=Ae(e),n=Re(e);n&&qe(n)&&"static"===Fe(n).position;)n=Re(n);return n&&("html"===Ce(n)||"body"===Ce(n)&&"static"===Fe(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===Fe(e).position)return null;var n=We(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Ce(n))<0;){var i=Fe(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ke(e,t,n){return Pe(e,De(t,n))}function Ue(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Xe={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=je(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ue("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),f=$e(r),d="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,_=h/2-m/2,b=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+_,E=Ke(b,w,y),O=c;n.modifiersData[i]=((t={})[O]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&He(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ge(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),_=s.hasOwnProperty("y"),b=oe,y=te,w=window;if(l){var E=Ve(n),O="clientHeight",x="clientWidth";if(E===Ae(n)&&"static"!==Fe(E=ze(n)).position&&"absolute"===a&&(O="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)b=ie,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var C,A=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ae(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},A,((C={})[y]=_?"0":"",C[b]=v?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",C)):Object.assign({},A,((t={})[y]=_?m+"px":"",t[b]=v?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:je(t.placement),variation:Ge(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ae(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ae(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Ie(ze(e)).left+at(e).scrollLeft}function lt(e){var t=Fe(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Ce(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(We(e))}function ft(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ae(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(ft(We(s)))}function dt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?dt(function(e,t){var n=Ae(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Be();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Ie(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):dt(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=Pe(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=Pe(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===Fe(o||n).direction&&(a+=Pe(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=ft(We(e)),n=["absolute","fixed"].indexOf(Fe(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&He(e,n)&&"body"!==Ce(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=Pe(o.top,t.top),t.right=De(o.right,t.right),t.bottom=De(o.bottom,t.bottom),t.left=Pe(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?je(o):null,s=o?Ge(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,f=n.elementContext,d=void 0===f?fe:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Ue("number"!=typeof g?g:Qe(g,se)),_=d===fe?de:fe,b=e.rects.popper,y=e.elements[h?_:d],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Ie(e.elements.reference),O=mt({reference:E,element:b,placement:o}),x=dt(Object.assign({},b,O)),C=d===fe?x:E,A={top:w.top-C.top+v.top,bottom:C.bottom-w.bottom+v.bottom,left:w.left-C.left+v.left,right:C.right-w.right+v.right},T=e.modifiersData.offset;if(d===fe&&T){var L=T[o];Object.keys(A).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";A[e]+=L[n]*t})}return A}function vt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Ge(i),f=u?a?pe:pe.filter(function(e){return Ge(e)===u}):se,d=f.filter(function(e){return l.indexOf(e)>=0});0===d.length&&(d=f);var p=d.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[je(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var _t={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,v=je(g),_=c||(v===g||!h?[ot(g)]:function(e){if(je(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),b=[g].concat(_).reduce(function(e,n){return e.concat(je(n)===re?vt(t,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,O=!0,x=b[0],C=0;C=0,k=S?"width":"height",j=gt(t,{placement:A,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),P=S?L?ie:oe:L?ne:te;y[k]>w[k]&&(P=ot(P));var D=ot(P),N=[];if(r&&N.push(j[T]<=0),a&&N.push(j[P]<=0,j[D]<=0),N.every(function(e){return e})){x=A,O=!1;break}E.set(A,N)}if(O)for(var M=function(e){var t=b.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function bt(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=bt(s,i),l=bt(a,o,r),u=yt(c),f=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=je(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var Ot={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=je(t.placement),_=Ge(t.placement),b=!_,y=Ye(v),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,O=t.rects.reference,x=t.rects.popper,C="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,A="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,k="y"===y?te:oe,j="y"===y?ne:ie,P="y"===y?"height":"width",D=E[y],N=D+g[k],M=D-g[j],B=p?-x[P]/2:0,I=_===ae?O[P]:x[P],$=_===ae?-x[P]:-O[P],H=t.elements.arrow,F=p&&H?$e(H):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],W=q[j],R=Ke(0,O[P],F[P]),V=b?O[P]/2-B-R-z-A.mainAxis:I-R-z-A.mainAxis,Y=b?-O[P]/2+B+R+W+A.mainAxis:$+R+W+A.mainAxis,K=t.elements.arrow&&Ve(t.elements.arrow),U=K?"y"===y?K.clientTop||0:K.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,X=D+Y-Q,G=Ke(p?De(N,D+V-Q-U):N,D,p?Pe(M,X):M);E[y]=G,L[y]=G-D}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(v),fe=null!=(J=null==T?void 0:T[w])?J:0,de=ue?ce:re-O[se]-x[se]-fe+A.altAxis,pe=ue?re+O[se]+x[se]-fe-A.altAxis:le,he=p&&ue?function(e,t,n){var i=Ke(e,t,n);return i>n?n:i}(de,re,pe):Ke(p?de:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function Ct(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Ie(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Ce(t)||lt(a))&&(l=(i=t)!==Ae(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Ie(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function At(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Dt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const Bt={allowList:Pt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},It={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ht extends I{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Bt}static get DefaultType(){return It}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=F.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ft=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Wt=".tooltip-inner",Rt=".modal",Vt="hide.bs.modal",Yt="hover",Kt="focus",Ut="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Xt={allowList:Pt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'t.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...rn].forEach(e=>{e.onclick=()=>this.showPopup()}),sn.onclick=e=>this.clickBackdrop(e),an.onclick=()=>this.hidePopup(),sn.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var fn={_:!0},dn={_:48};en(un,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:Zt(tn=un,tn,dn)._});en(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const pn="dropdown",hn=".bs.dropdown",mn=".data-api",gn="ArrowUp",vn="ArrowDown",_n=`hide${hn}`,bn=`hidden${hn}`,yn=`show${hn}`,wn=`shown${hn}`,En=`click${hn}${mn}`,On=`keydown${hn}${mn}`,xn=`keyup${hn}${mn}`,Cn="show",An='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Tn=`${An}.${Cn}`,Ln=".dropdown-menu",Sn=p()?"top-end":"top-start",kn=p()?"top-start":"top-end",jn=p()?"bottom-end":"bottom-start",Pn=p()?"bottom-start":"bottom-end",Dn=p()?"left-start":"right-start",Nn=p()?"right-start":"left-start",Mn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Bn={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class In extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=F.next(this._element,Ln)[0]||F.prev(this._element,Ln)[0]||F.findOne(Ln,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Mn}static get DefaultType(){return Bn}static get NAME(){return pn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!P.trigger(this._element,yn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Cn),this._element.classList.add(Cn),P.trigger(this._element,wn,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!P.trigger(this._element,_n,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Cn),this._element.classList.remove(Cn),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),P.trigger(this._element,bn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${pn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===jt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=kt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Cn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Dn;if(e.classList.contains("dropstart"))return Nn;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?kn:Sn:t?Pn:jn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=F.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===vn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=In.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=F.find(Tn);for(const n of t){const t=In.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[gn,vn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(An)?this:F.prev(this,An)[0]||F.next(this,An)[0]||F.findOne(An,e.delegateTarget.parentNode),r=In.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}P.on(document,On,An,In.dataApiKeydownHandler),P.on(document,On,Ln,In.dataApiKeydownHandler),P.on(document,En,In.clearMenus),P.on(document,xn,In.clearMenus),P.on(document,En,An,function(e){e.preventDefault(),In.getOrCreateInstance(this).toggle()}),h(In);const $n="active",Hn=document.querySelector("#mode-toggle + .dropdown-menu"),Fn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const qn=document.getElementById("sidebar"),zn=document.getElementById("sidebar-trigger"),Wn=document.getElementById("mask");class Rn{static toggle(){Vn._=Zt(Rn,this,!Zt(Rn,this,Vn)._),document.body.toggleAttribute("sidebar-display",Zt(Rn,this,Vn)._),qn.classList.toggle("z-2",Zt(Rn,this,Vn)._),Wn.classList.toggle("d-none",!Zt(Rn,this,Vn)._)}}var Vn={_:!1};const Yn=document.getElementById("sidebar-trigger"),Kn=document.getElementById("search-trigger"),Un=document.getElementById("search-cancel"),Qn=document.querySelectorAll("#main-wrapper>.container>.row"),Xn=document.getElementById("topbar-title"),Gn=document.getElementById("search"),Jn=document.getElementById("search-result-wrapper"),Zn=document.getElementById("search-results"),ei=document.getElementById("search-input"),ti=document.getElementById("search-hints"),ni="d-block",ii="d-none",oi="input-focus",ri="d-flex";class si{static on(){Yn.classList.add(ii),Xn.classList.add(ii),Kn.classList.add(ii),Gn.classList.add(ri),Un.classList.add(ni)}static off(){Un.classList.remove(ni),Gn.classList.remove(ri),Yn.classList.remove(ii),Xn.classList.remove(ii),Kn.classList.remove(ii)}}class ai{static on(){this.resultVisible||(Jn.classList.remove(ii),Qn.forEach(e=>{e.classList.add(ii)}),this.resultVisible=!0)}static off(){this.resultVisible&&(Zn.innerHTML="",ti.classList.contains(ii)&&ti.classList.remove(ii),Jn.classList.add(ii),Qn.forEach(e=>{e.classList.remove(ii)}),ei.textContent="",this.resultVisible=!1)}}function ci(){return Un.classList.contains(ni)}en(ai,"resultVisible",!1),zn.onclick=Wn.onclick=()=>Rn.toggle(),Kn.addEventListener("click",()=>{si.on(),ai.on(),ei.focus()}),Un.addEventListener("click",()=>{si.off(),ai.off()}),ei.addEventListener("focus",()=>{Gn.classList.add(oi)}),ei.addEventListener("focusout",()=>{Gn.classList.remove(oi)}),ei.addEventListener("input",()=>{""===ei.value?ci()?ti.classList.remove(ii):ai.off():(ai.on(),ci()&&ti.classList.add(ii))}),Theme.isToggleable&&(Hn.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==Fn||e.classList.add($n)}),Hn.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=Hn.querySelector(`.${$n}`);n!==t&&(n.classList.remove($n),t.classList.add($n),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/home.min.js b/assets/js/dist/home.min.js
index 7640e035..0c1bf6b8 100644
--- a/assets/js/dist/home.min.js
+++ b/assets/js/dist/home.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(e=>{e=$(e.target);(e.prop("tagName")==="button".toUpperCase()?e:e.parent()).blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),t="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let a=0,l=!1,r=!1;return{hideTopbar:()=>e.attr(t,!1),showTopbar:()=>e.attr(t,!0),addScrollUpTask:()=>{a+=1,l=l||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===l,unlockTopbar:()=>l=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}(),LocaleHelper=($(function(){const e=$("#sidebar-trigger"),t=$("#search-trigger"),o=$("#search-cancel"),a=$("#main"),l=$("#topbar-title"),r=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),p={on(){e.addClass("unloaded"),l.addClass("unloaded"),t.addClass("unloaded"),r.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),r.removeClass("d-flex"),e.removeClass("unloaded"),l.removeClass("unloaded"),t.removeClass("unloaded")}},u=function(){let e=!1;return{on(){e||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),e=!0)},off(){e&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),i.val(""),e=!1)},isVisible(){return e}}}();function f(){return o.hasClass("loaded")}t.click(function(){p.on(),u.on(),i.focus()}),o.click(function(){p.off(),u.off()}),i.focus(function(){r.addClass("input-focus")}),i.focusout(function(){r.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?f()?c.removeClass("unloaded"):u.off():(u.on(),f()&&c.addClass("unloaded"))})}),$(function(){var e=function(){const e="sidebar-display";let t=!1;const o=$("body");return{toggle(){!1===t?o.attr(e,""):o.removeAttr(e),t=!t}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const t=$("#search-input"),o=ScrollHelper.getTopbarHeight();let e,a=0;function l(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||l()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&l()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(!function(){var e=$(this).scrollTop();if(!(Math.abs(a-e)<=o)){if(e>a)ScrollHelper.hideTopbar(),t.is(":focus")&&t.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=e}}(),e=!1)},250)}),$(function(){var e="div.post>h1:first-of-type",t=$(e);const n=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=t.text().trim(),l=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(e=>{var t,o;l?(o=$(window).scrollTop(),t=re,attrTimestamp:()=>t,attrDateFormat:()=>o,getTimestamp:e=>Number(e.attr(t)),getDateFormat:e=>e.attr(o)}}());$(function(){dayjs.locale(LocaleHelper.locale()),dayjs.extend(window.dayjs_plugin_localizedFormat),$(`[${LocaleHelper.attrTimestamp()}]`).each(function(){var e=dayjs.unix(LocaleHelper.getTimestamp($(this))),t=e.format(LocaleHelper.getDateFormat($(this))),t=($(this).text(t),$(this).removeAttr(LocaleHelper.attrTimestamp()),$(this).removeAttr(LocaleHelper.attrDateFormat()),$(this).attr("data-toggle"));void 0!==t&&"tooltip"===t&&(t=e.format("llll"),$(this).attr("data-original-title",t))})});
+!function(){"use strict";const t=new Map;var e={set(e,n,i){t.has(e)||t.set(e,new Map);const o=t.get(e);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(e,n)=>t.has(e)&&t.get(e).get(n)||null,remove(e,n){if(!t.has(e))return;const i=t.get(e);i.delete(n),0===i.size&&t.delete(e)}};const n="transitionend",i=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),t),o=t=>null==t?`${t}`:Object.prototype.toString.call(t).match(/\s([a-z]+)/i)[1].toLowerCase(),r=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),s=t=>r(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(i(t)):null,a=t=>{if(!r(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),n=t.closest("details:not([open])");if(!n)return e;if(n!==t){const e=t.closest("summary");if(e&&e.parentNode!==n)return!1;if(null===e)return!1}return e},c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||(!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled"))),l=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?l(t.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=t=>{var e;e=()=>{const e=f();if(e){const n=t.NAME,i=e.fn[n];e.fn[n]=t.jQueryInterface,e.fn[n].Constructor=t,e.fn[n].noConflict=()=>(e.fn[n]=i,t.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of d)t()}),d.push(e)):e()},m=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;return"function"==typeof t?t.call(...e):n},g=function(t,e){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(t);const i=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:n}=window.getComputedStyle(t);const i=Number.parseFloat(e),o=Number.parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(n))):0})(e)+5;let o=!1;const r=i=>{let{target:s}=i;s===e&&(o=!0,e.removeEventListener(n,r),m(t))};e.addEventListener(n,r),setTimeout(()=>{o||e.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,b=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function A(t,e){return e&&`${e}::${w++}`||t.uidEvent||w++}function x(t){const e=A(t);return t.uidEvent=e,y[e]=y[e]||{},y[e]}function C(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(t).find(t=>t.callable===e&&t.delegationSelector===n)}function T(t,e,n){const i="string"==typeof e,o=i?n:e||n;let r=k(t);return O.has(r)||(r=t),[i,o,r]}function L(t,e,n,i,o){if("string"!=typeof e||!t)return;let[r,s,a]=T(e,n,i);if(e in E){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};s=t(s)}const c=x(t),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=A(s,e.replace(v,"")),d=r?function(t,e,n){return function i(o){const r=t.querySelectorAll(e);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(t,o.type,e,n),n.apply(s,[o])}}(t,n,s):function(t,e){return function n(i){return P(i,{delegateTarget:t}),n.oneOff&&D.off(t,i.type,e),e.apply(t,[i])}}(t,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,t.addEventListener(a,d,r)}function S(t,e,n,i,o){const r=C(e[n],i,o);r&&(t.removeEventListener(n,r,Boolean(o)),delete e[n][r.uidEvent])}function j(t,e,n,i){const o=e[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(t,e,n,s.callable,s.delegationSelector)}function k(t){return t=t.replace(b,""),E[t]||t}const D={on(t,e,n,i){L(t,e,n,i,!1)},one(t,e,n,i){L(t,e,n,i,!0)},off(t,e,n,i){if("string"!=typeof e||!t)return;const[o,r,s]=T(e,n,i),a=s!==e,c=x(t),l=c[s]||{},u=e.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))j(t,c,n,e.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!e.includes(o)||S(t,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(t,c,s,r,o?n:null)}},trigger(t,e,n){if("string"!=typeof e||!t)return null;const i=f();let o=null,r=!0,s=!0,a=!1;e!==k(e)&&i&&(o=i.Event(e,n),i(t).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(e,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&t.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(e))try{t[n]=i}catch{Object.defineProperty(t,n,{configurable:!0,get:()=>i})}return t}function N(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch{return t}}function M(t){return t.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const B={setDataAttribute(t,e,n){t.setAttribute(`data-bs-${M(e)}`,n)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${M(e)}`)},getDataAttributes(t){if(!t)return{};const e={},n=Object.keys(t.dataset).filter(t=>t.startsWith("bs")&&!t.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),e[n]=N(t.dataset[i])}return e},getDataAttribute:(t,e)=>N(t.getAttribute(`data-bs-${M(e)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const n=r(e)?B.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(e)?B.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(e)){const e=t[n],s=r(e)?"element":o(e);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(t,n){super(),(t=s(t))&&(this._element=t,this._config=this._getConfig(n),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e){g(t,e,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(s(t),this.DATA_KEY)}static getOrCreateInstance(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const F=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let n=t.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),e=n&&"#"!==n?n.trim():null}return e?e.split(",").map(t=>i(t)).join(","):null},H={find(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(e,t)},children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const n=[];let i=t.parentNode.closest(e);for(;i;)n.push(i),i=i.parentNode.closest(e);return n},prev(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return[n];n=n.previousElementSibling}return[]},next(t,e){let n=t.nextElementSibling;for(;n;){if(n.matches(e))return[n];n=n.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,t).filter(t=>!c(t)&&a(t))},getSelectorFromElement(t){const e=F(t);return e&&H.findOne(e)?e:null},getElementFromSelector(t){const e=F(t);return e?H.findOne(e):null},getMultipleElementsFromSelector(t){const e=F(t);return e?H.find(e):[]}},q=".bs.collapse",z=`show${q}`,R=`shown${q}`,W=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,U="show",K="collapse",Q="collapsing",X=`:scope .${K} .${K}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class tt extends ${constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=H.find(G);for(const t of n){const e=H.getSelectorFromElement(t),n=H.find(e).filter(t=>t===this._element);null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(t=>t!==this._element).map(t=>tt.getOrCreateInstance(t,{toggle:!1}))),t.length&&t[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(K),this._element.classList.add(Q),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K,U),this._element.style[e]="",D.trigger(this._element,R)},this._element,!0),this._element.style[e]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,W).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(K,U);for(const t of this._triggerArray){const e=H.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0;this._element.style[t]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(U)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=s(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(G);for(const e of t){const t=H.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=H.find(X,this._config.parent);return H.find(t,this._config.parent).filter(t=>!e.includes(t))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const n of t)n.classList.toggle("collapsed",!e),n.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each(function(){const n=tt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===n[t])throw new TypeError(`No method named "${t}"`);n[t]()}})}}D.on(document,Y,G,function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of H.getMultipleElementsFromSelector(this))tt.getOrCreateInstance(t,{toggle:!1}).toggle()}),h(tt),document.getElementsByClassName("collapse");var et="top",nt="bottom",it="right",ot="left",rt="auto",st=[et,nt,it,ot],at="start",ct="end",lt="clippingParents",ut="viewport",ft="popper",dt="reference",pt=st.reduce(function(t,e){return t.concat([e+"-"+at,e+"-"+ct])},[]),ht=[].concat(st,[rt]).reduce(function(t,e){return t.concat([e,e+"-"+at,e+"-"+ct])},[]),mt="beforeRead",gt="read",vt="afterRead",bt="beforeMain",_t="main",yt="afterMain",wt="beforeWrite",Et="write",Ot="afterWrite",At=[mt,gt,vt,bt,_t,yt,wt,Et,Ot];function xt(t){return t?(t.nodeName||"").toLowerCase():null}function Ct(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Tt(t){return t instanceof Ct(t).Element||t instanceof Element}function Lt(t){return t instanceof Ct(t).HTMLElement||t instanceof HTMLElement}function St(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Ct(t).ShadowRoot||t instanceof ShadowRoot)}var jt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach(function(t){var n=e.styles[t]||{},i=e.attributes[t]||{},o=e.elements[t];Lt(o)&&xt(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(t){var e=i[t];!1===e?o.removeAttribute(t):o.setAttribute(t,!0===e?"":e)}))})},effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach(function(t){var i=e.elements[t],o=e.attributes[t]||{},r=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]).reduce(function(t,e){return t[e]="",t},{});Lt(i)&&xt(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(t){i.removeAttribute(t)}))})}},requires:["computeStyles"]};function kt(t){return t.split("-")[0]}var Dt=Math.max,Pt=Math.min,Nt=Math.round;function Mt(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function Bt(){return!/^((?!chrome|android).)*safari/i.test(Mt())}function It(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var i=t.getBoundingClientRect(),o=1,r=1;e&&Lt(t)&&(o=t.offsetWidth>0&&Nt(i.width)/t.offsetWidth||1,r=t.offsetHeight>0&&Nt(i.height)/t.offsetHeight||1);var s=(Tt(t)?Ct(t):window).visualViewport,a=!Bt()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function $t(t){var e=It(t),n=t.offsetWidth,i=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-i)<=1&&(i=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:i}}function Ft(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&St(n)){var i=e;do{if(i&&t.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ht(t){return Ct(t).getComputedStyle(t)}function qt(t){return["table","td","th"].indexOf(xt(t))>=0}function zt(t){return((Tt(t)?t.ownerDocument:t.document)||window.document).documentElement}function Rt(t){return"html"===xt(t)?t:t.assignedSlot||t.parentNode||(St(t)?t.host:null)||zt(t)}function Wt(t){return Lt(t)&&"fixed"!==Ht(t).position?t.offsetParent:null}function Vt(t){for(var e=Ct(t),n=Wt(t);n&&qt(n)&&"static"===Ht(n).position;)n=Wt(n);return n&&("html"===xt(n)||"body"===xt(n)&&"static"===Ht(n).position)?e:n||function(t){var e=/firefox/i.test(Mt());if(/Trident/i.test(Mt())&&Lt(t)&&"fixed"===Ht(t).position)return null;var n=Rt(t);for(St(n)&&(n=n.host);Lt(n)&&["html","body"].indexOf(xt(n))<0;){var i=Ht(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||e&&"filter"===i.willChange||e&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(t)||e}function Yt(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ut(t,e,n){return Dt(t,Pt(e,n))}function Kt(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Qt(t,e){return e.reduce(function(e,n){return e[n]=t,e},{})}var Xt={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,n=t.state,i=t.name,o=t.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=kt(n.placement),c=Yt(a),l=[ot,it].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(t,e){return Kt("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Qt(t,st))}(o.padding,n),f=$t(r),d="y"===c?et:ot,p="y"===c?nt:it,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Vt(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,_=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+b,E=Ut(_,w,y),O=c;n.modifiersData[i]=((e={})[O]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,n=t.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=e.elements.popper.querySelector(i)))&&Ft(e.elements.popper,i)&&(e.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Gt(t){return t.split("-")[1]}var Jt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Zt(t){var e,n=t.popper,i=t.popperRect,o=t.placement,r=t.variation,s=t.offsets,a=t.position,c=t.gpuAcceleration,l=t.adaptive,u=t.roundOffsets,f=t.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),_=ot,y=et,w=window;if(l){var E=Vt(n),O="clientHeight",A="clientWidth";if(E===Ct(n)&&"static"!==Ht(E=zt(n)).position&&"absolute"===a&&(O="scrollHeight",A="scrollWidth"),o===et||(o===ot||o===it)&&r===ct)y=nt,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===ot||(o===et||o===nt)&&r===ct)_=it,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[A])-i.width,p*=c?1:-1}var x,C=Object.assign({position:a},l&&Jt),T=!0===u?function(t,e){var n=t.x,i=t.y,o=e.devicePixelRatio||1;return{x:Nt(n*o)/o||0,y:Nt(i*o)/o||0}}({x:p,y:m},Ct(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((x={})[y]=b?"0":"",x[_]=v?"0":"",x.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",x)):Object.assign({},C,((e={})[y]=b?m+"px":"",e[_]=v?p+"px":"",e.transform="",e))}var te={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,n=t.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:kt(e.placement),variation:Gt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,Zt(Object.assign({},l,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:c})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,Zt(Object.assign({},l,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},ee={passive:!0};var ne={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,n=t.instance,i=t.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ct(e.elements.popper),l=[].concat(e.scrollParents.reference,e.scrollParents.popper);return r&&l.forEach(function(t){t.addEventListener("scroll",n.update,ee)}),a&&c.addEventListener("resize",n.update,ee),function(){r&&l.forEach(function(t){t.removeEventListener("scroll",n.update,ee)}),a&&c.removeEventListener("resize",n.update,ee)}},data:{}},ie={left:"right",right:"left",bottom:"top",top:"bottom"};function oe(t){return t.replace(/left|right|bottom|top/g,function(t){return ie[t]})}var re={start:"end",end:"start"};function se(t){return t.replace(/start|end/g,function(t){return re[t]})}function ae(t){var e=Ct(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ce(t){return It(zt(t)).left+ae(t).scrollLeft}function le(t){var e=Ht(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ue(t){return["html","body","#document"].indexOf(xt(t))>=0?t.ownerDocument.body:Lt(t)&&le(t)?t:ue(Rt(t))}function fe(t,e){var n;void 0===e&&(e=[]);var i=ue(t),o=i===(null==(n=t.ownerDocument)?void 0:n.body),r=Ct(i),s=o?[r].concat(r.visualViewport||[],le(i)?i:[]):i,a=e.concat(s);return o?a:a.concat(fe(Rt(s)))}function de(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function pe(t,e,n){return e===ut?de(function(t,e){var n=Ct(t),i=zt(t),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Bt();(l||!l&&"fixed"===e)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ce(t),y:c}}(t,n)):Tt(e)?function(t,e){var n=It(t,!1,"fixed"===e);return n.top=n.top+t.clientTop,n.left=n.left+t.clientLeft,n.bottom=n.top+t.clientHeight,n.right=n.left+t.clientWidth,n.width=t.clientWidth,n.height=t.clientHeight,n.x=n.left,n.y=n.top,n}(e,n):de(function(t){var e,n=zt(t),i=ae(t),o=null==(e=t.ownerDocument)?void 0:e.body,r=Dt(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=Dt(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ce(t),c=-i.scrollTop;return"rtl"===Ht(o||n).direction&&(a+=Dt(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(zt(t)))}function he(t,e,n,i){var o="clippingParents"===e?function(t){var e=fe(Rt(t)),n=["absolute","fixed"].indexOf(Ht(t).position)>=0&&Lt(t)?Vt(t):t;return Tt(n)?e.filter(function(t){return Tt(t)&&Ft(t,n)&&"body"!==xt(t)}):[]}(t):[].concat(e),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(e,n){var o=pe(t,n,i);return e.top=Dt(o.top,e.top),e.right=Pt(o.right,e.right),e.bottom=Pt(o.bottom,e.bottom),e.left=Dt(o.left,e.left),e},pe(t,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function me(t){var e,n=t.reference,i=t.element,o=t.placement,r=o?kt(o):null,s=o?Gt(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case et:e={x:a,y:n.y-i.height};break;case nt:e={x:a,y:n.y+n.height};break;case it:e={x:n.x+n.width,y:c};break;case ot:e={x:n.x-i.width,y:c};break;default:e={x:n.x,y:n.y}}var l=r?Yt(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case at:e[l]=e[l]-(n[u]/2-i[u]/2);break;case ct:e[l]=e[l]+(n[u]/2-i[u]/2)}}return e}function ge(t,e){void 0===e&&(e={});var n=e,i=n.placement,o=void 0===i?t.placement:i,r=n.strategy,s=void 0===r?t.strategy:r,a=n.boundary,c=void 0===a?lt:a,l=n.rootBoundary,u=void 0===l?ut:l,f=n.elementContext,d=void 0===f?ft:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Kt("number"!=typeof g?g:Qt(g,st)),b=d===ft?dt:ft,_=t.rects.popper,y=t.elements[h?b:d],w=he(Tt(y)?y:y.contextElement||zt(t.elements.popper),c,u,s),E=It(t.elements.reference),O=me({reference:E,element:_,placement:o}),A=de(Object.assign({},_,O)),x=d===ft?A:E,C={top:w.top-x.top+v.top,bottom:x.bottom-w.bottom+v.bottom,left:w.left-x.left+v.left,right:x.right-w.right+v.right},T=t.modifiersData.offset;if(d===ft&&T){var L=T[o];Object.keys(C).forEach(function(t){var e=[it,nt].indexOf(t)>=0?1:-1,n=[et,nt].indexOf(t)>=0?"y":"x";C[t]+=L[n]*e})}return C}function ve(t,e){void 0===e&&(e={});var n=e,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?ht:c,u=Gt(i),f=u?a?pt:pt.filter(function(t){return Gt(t)===u}):st,d=f.filter(function(t){return l.indexOf(t)>=0});0===d.length&&(d=f);var p=d.reduce(function(e,n){return e[n]=ge(t,{placement:n,boundary:o,rootBoundary:r,padding:s})[kt(n)],e},{});return Object.keys(p).sort(function(t,e){return p[t]-p[e]})}var be={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,i=t.name;if(!e.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=e.options.placement,v=kt(g),b=c||(v===g||!h?[oe(g)]:function(t){if(kt(t)===rt)return[];var e=oe(t);return[se(t),e,se(e)]}(g)),_=[g].concat(b).reduce(function(t,n){return t.concat(kt(n)===rt?ve(e,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=e.rects.reference,w=e.rects.popper,E=new Map,O=!0,A=_[0],x=0;x<_.length;x++){var C=_[x],T=kt(C),L=Gt(C)===at,S=[et,nt].indexOf(T)>=0,j=S?"width":"height",k=ge(e,{placement:C,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),D=S?L?it:ot:L?nt:et;y[j]>w[j]&&(D=oe(D));var P=oe(D),N=[];if(r&&N.push(k[T]<=0),a&&N.push(k[D]<=0,k[P]<=0),N.every(function(t){return t})){A=C,O=!1;break}E.set(C,N)}if(O)for(var M=function(t){var e=_.find(function(e){var n=E.get(e);if(n)return n.slice(0,t).every(function(t){return t})});if(e)return A=e,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}e.placement!==A&&(e.modifiersData[i]._skip=!0,e.placement=A,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _e(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function ye(t){return[et,it,nt,ot].some(function(e){return t[e]>=0})}var we={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,n=t.name,i=e.rects.reference,o=e.rects.popper,r=e.modifiersData.preventOverflow,s=ge(e,{elementContext:"reference"}),a=ge(e,{altBoundary:!0}),c=_e(s,i),l=_e(a,o,r),u=ye(c),f=ye(l);e.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Ee={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,n=t.options,i=t.name,o=n.offset,r=void 0===o?[0,0]:o,s=ht.reduce(function(t,n){return t[n]=function(t,e,n){var i=kt(t),o=[ot,et].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},e,{placement:t})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[ot,it].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,e.rects,r),t},{}),a=s[e.placement],c=a.x,l=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=c,e.modifiersData.popperOffsets.y+=l),e.modifiersData[i]=s}};var Oe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,n=t.name;e.modifiersData[n]=me({reference:e.rects.reference,element:e.rects.popper,placement:e.placement})},data:{}};var Ae={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,i=t.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=ge(e,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=kt(e.placement),b=Gt(e.placement),_=!b,y=Yt(v),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,O=e.rects.reference,A=e.rects.popper,x="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C="number"==typeof x?{mainAxis:x,altAxis:x}:Object.assign({mainAxis:0,altAxis:0},x),T=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,L={x:0,y:0};if(E){if(r){var S,j="y"===y?et:ot,k="y"===y?nt:it,D="y"===y?"height":"width",P=E[y],N=P+g[j],M=P-g[k],B=p?-A[D]/2:0,I=b===at?O[D]:A[D],$=b===at?-A[D]:-O[D],F=e.elements.arrow,H=p&&F?$t(F):{width:0,height:0},q=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[j],R=q[k],W=Ut(0,O[D],H[D]),V=_?O[D]/2-B-W-z-C.mainAxis:I-W-z-C.mainAxis,Y=_?-O[D]/2+B+W+R+C.mainAxis:$+W+R+C.mainAxis,U=e.elements.arrow&&Vt(e.elements.arrow),K=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,X=P+Y-Q,G=Ut(p?Pt(N,P+V-Q-K):N,P,p?Dt(M,X):M);E[y]=G,L[y]=G-P}if(a){var J,Z="x"===y?et:ot,tt="x"===y?nt:it,rt=E[w],st="y"===w?"height":"width",ct=rt+g[Z],lt=rt-g[tt],ut=-1!==[et,ot].indexOf(v),ft=null!=(J=null==T?void 0:T[w])?J:0,dt=ut?ct:rt-O[st]-A[st]-ft+C.altAxis,pt=ut?rt+O[st]+A[st]-ft-C.altAxis:lt,ht=p&&ut?function(t,e,n){var i=Ut(t,e,n);return i>n?n:i}(dt,rt,pt):Ut(p?dt:ct,rt,p?pt:lt);E[w]=ht,L[w]=ht-rt}e.modifiersData[i]=L}},requiresIfExists:["offset"]};function xe(t,e,n){void 0===n&&(n=!1);var i,o,r=Lt(e),s=Lt(e)&&function(t){var e=t.getBoundingClientRect(),n=Nt(e.width)/t.offsetWidth||1,i=Nt(e.height)/t.offsetHeight||1;return 1!==n||1!==i}(e),a=zt(e),c=It(t,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==xt(e)||le(a))&&(l=(i=e)!==Ct(i)&&Lt(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:ae(i)),Lt(e)?((u=It(e,!0)).x+=e.clientLeft,u.y+=e.clientTop):a&&(u.x=ce(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ce(t){var e=new Map,n=new Set,i=[];function o(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(t){if(!n.has(t)){var i=e.get(t);i&&o(i)}}),i.push(t)}return t.forEach(function(t){e.set(t.name,t)}),t.forEach(function(t){n.has(t.name)||o(t)}),i}var Te={placement:"bottom",modifiers:[],strategy:"absolute"};function Le(){for(var t=arguments.length,e=new Array(t),n=0;n{const n=t.nodeName.toLowerCase();return e.includes(n)?!Pe.has(n)||Boolean(Ne.test(t.nodeValue)):e.filter(t=>t instanceof RegExp).some(t=>t.test(n))};const Be={allowList:De,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Ie={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$e={entry:"(string|element|function|null)",selector:"(string|element)"};class Fe extends I{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Be}static get DefaultType(){return Ie}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,n]of Object.entries(this._config.content))this._setContent(t,n,e);const e=t.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&e.classList.add(...n.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,n]of Object.entries(t))super._typeCheckConfig({selector:e,entry:n},$e)}_setContent(t,e,n){const i=H.findOne(n,t);i&&((e=this._resolvePossibleFunction(e))?r(e)?this._putElementInTemplate(s(e),i):this._config.html?i.innerHTML=this._maybeSanitize(e):i.textContent=e:i.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,n){if(!t.length)return t;if(n&&"function"==typeof n)return n(t);const i=(new window.DOMParser).parseFromString(t,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const t of o){const n=t.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){t.remove();continue}const i=[].concat(...t.attributes),o=[].concat(e["*"]||[],e[n]||[]);for(const e of i)Me(e,o)||t.removeAttribute(e.nodeName)}return i.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return m(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const He=new Set(["sanitize","allowList","sanitizeFn"]),qe="fade",ze="show",Re=".tooltip-inner",We=".modal",Ve="hide.bs.modal",Ye="hover",Ue="focus",Ke="click",Qe={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Xe={allowList:De,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'e.right||t.clientYe.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...pn].forEach(t=>{t.onclick=()=>this.showPopup()}),hn.onclick=t=>this.clickBackdrop(t),mn.onclick=()=>this.hidePopup(),hn.oncancel=t=>{t.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var _n={_:!0},yn={_:48};ln(bn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:cn(un=bn,un,yn)._});ln(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const wn="dropdown",En=".bs.dropdown",On=".data-api",An="ArrowUp",xn="ArrowDown",Cn=`hide${En}`,Tn=`hidden${En}`,Ln=`show${En}`,Sn=`shown${En}`,jn=`click${En}${On}`,kn=`keydown${En}${On}`,Dn=`keyup${En}${On}`,Pn="show",Nn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Mn=`${Nn}.${Pn}`,Bn=".dropdown-menu",In=p()?"top-end":"top-start",$n=p()?"top-start":"top-end",Fn=p()?"bottom-end":"bottom-start",Hn=p()?"bottom-start":"bottom-end",qn=p()?"left-start":"right-start",zn=p()?"right-start":"left-start",Rn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Wn={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Vn extends ${constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=H.next(this._element,Bn)[0]||H.prev(this._element,Bn)[0]||H.findOne(Bn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Rn}static get DefaultType(){return Wn}static get NAME(){return wn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!D.trigger(this._element,Ln,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))D.on(t,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pn),this._element.classList.add(Pn),D.trigger(this._element,Sn,t)}}hide(){if(c(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!D.trigger(this._element,Cn,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))D.off(t,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pn),this._element.classList.remove(Pn),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,Tn,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!r(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${wn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===ke)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let t=this._element;"parent"===this._config.reference?t=this._parent:r(this._config.reference)?t=s(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=je(t,this._menu,e)}_isShown(){return this._menu.classList.contains(Pn)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return qn;if(t.classList.contains("dropstart"))return zn;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?$n:In:e?Hn:Fn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...m(this._config.popperConfig,[void 0,t])}}_selectMenuItem(t){let{key:e,target:n}=t;const i=H.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(t=>a(t));i.length&&((t,e,n,i)=>{const o=t.length;let r=t.indexOf(e);return-1===r?!n&&i?t[o-1]:t[0]:(r+=n?1:-1,i&&(r=(r+o)%o),t[Math.max(0,Math.min(r,o-1))])})(i,n,e===xn,!i.includes(n)).focus()}static jQueryInterface(t){return this.each(function(){const e=Vn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}})}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=H.find(Mn);for(const n of e){const e=Vn.getInstance(n);if(!e||!1===e._config.autoClose)continue;const i=t.composedPath(),o=i.includes(e._menu);if(i.includes(e._element)||"inside"===e._config.autoClose&&!o||"outside"===e._config.autoClose&&o)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const r={relatedTarget:e._element};"click"===t.type&&(r.clickEvent=t),e._completeHide(r)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),n="Escape"===t.key,i=[An,xn].includes(t.key);if(!i&&!n)return;if(e&&!n)return;t.preventDefault();const o=this.matches(Nn)?this:H.prev(this,Nn)[0]||H.next(this,Nn)[0]||H.findOne(Nn,t.delegateTarget.parentNode),r=Vn.getOrCreateInstance(o);if(i)return t.stopPropagation(),r.show(),void r._selectMenuItem(t);r._isShown()&&(t.stopPropagation(),r.hide(),o.focus())}}D.on(document,kn,Nn,Vn.dataApiKeydownHandler),D.on(document,kn,Bn,Vn.dataApiKeydownHandler),D.on(document,jn,Vn.clearMenus),D.on(document,Dn,Vn.clearMenus),D.on(document,jn,Nn,function(t){t.preventDefault(),Vn.getOrCreateInstance(this).toggle()}),h(Vn);const Yn="active",Un=document.querySelector("#mode-toggle + .dropdown-menu"),Kn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const Qn=document.getElementById("sidebar"),Xn=document.getElementById("sidebar-trigger"),Gn=document.getElementById("mask");class Jn{static toggle(){Zn._=cn(Jn,this,!cn(Jn,this,Zn)._),document.body.toggleAttribute("sidebar-display",cn(Jn,this,Zn)._),Qn.classList.toggle("z-2",cn(Jn,this,Zn)._),Gn.classList.toggle("d-none",!cn(Jn,this,Zn)._)}}var Zn={_:!1};const ti=document.getElementById("sidebar-trigger"),ei=document.getElementById("search-trigger"),ni=document.getElementById("search-cancel"),ii=document.querySelectorAll("#main-wrapper>.container>.row"),oi=document.getElementById("topbar-title"),ri=document.getElementById("search"),si=document.getElementById("search-result-wrapper"),ai=document.getElementById("search-results"),ci=document.getElementById("search-input"),li=document.getElementById("search-hints"),ui="d-block",fi="d-none",di="input-focus",pi="d-flex";class hi{static on(){ti.classList.add(fi),oi.classList.add(fi),ei.classList.add(fi),ri.classList.add(pi),ni.classList.add(ui)}static off(){ni.classList.remove(ui),ri.classList.remove(pi),ti.classList.remove(fi),oi.classList.remove(fi),ei.classList.remove(fi)}}class mi{static on(){this.resultVisible||(si.classList.remove(fi),ii.forEach(t=>{t.classList.add(fi)}),this.resultVisible=!0)}static off(){this.resultVisible&&(ai.innerHTML="",li.classList.contains(fi)&&li.classList.remove(fi),si.classList.add(fi),ii.forEach(t=>{t.classList.remove(fi)}),ci.textContent="",this.resultVisible=!1)}}function gi(){return ni.classList.contains(ui)}ln(mi,"resultVisible",!1),function(){const t=document.querySelectorAll("article img");if(0===t.length)return;t.forEach(t=>{t.addEventListener("load",rn)}),document.querySelectorAll('article img[loading="lazy"]').forEach(t=>{t.complete&&on.call(t,en)});const e=document.querySelectorAll(`article img[${tn}="true"]`);e.length&&e.forEach(t=>{sn.call(t)})}(),dayjs.locale(an.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${an.attrTimestamp}]`).forEach(t=>{const e=dayjs.unix(an.getTimestamp(t)),n=e.format(an.getDateFormat(t));if(t.textContent=n,t.removeAttribute(an.attrTimestamp),t.removeAttribute(an.attrDateFormat),t.hasAttribute("data-bs-toggle")&&"tooltip"===t.getAttribute("data-bs-toggle")){const n=e.format("llll");t.setAttribute("data-bs-title",n)}}),Xn.onclick=Gn.onclick=()=>Jn.toggle(),ei.addEventListener("click",()=>{hi.on(),mi.on(),ci.focus()}),ni.addEventListener("click",()=>{hi.off(),mi.off()}),ci.addEventListener("focus",()=>{ri.classList.add(di)}),ci.addEventListener("focusout",()=>{ri.classList.remove(di)}),ci.addEventListener("input",()=>{""===ci.value?gi()?li.classList.remove(fi):mi.off():(mi.on(),gi()&&li.classList.add(fi))}),Theme.isToggleable&&(Un.querySelectorAll(".dropdown-item").forEach(t=>{t.dataset.themeMode!==Kn||t.classList.add(Yn)}),Un.addEventListener("click",t=>{const e=t.target.closest(".dropdown-item");if(!e)return;const n=Un.querySelector(`.${Yn}`);n!==e&&(n.classList.remove(Yn),e.classList.add(Yn),Theme.update(e.dataset.themeMode))})),function(){const t=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?t.classList.add("show"):t.classList.remove("show")}),t.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(t=>new Je(t))}();
diff --git a/assets/js/dist/misc.min.js b/assets/js/dist/misc.min.js
index 7640e035..a3e87ba2 100644
--- a/assets/js/dist/misc.min.js
+++ b/assets/js/dist/misc.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(e=>{e=$(e.target);(e.prop("tagName")==="button".toUpperCase()?e:e.parent()).blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),t="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let a=0,l=!1,r=!1;return{hideTopbar:()=>e.attr(t,!1),showTopbar:()=>e.attr(t,!0),addScrollUpTask:()=>{a+=1,l=l||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===l,unlockTopbar:()=>l=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}(),LocaleHelper=($(function(){const e=$("#sidebar-trigger"),t=$("#search-trigger"),o=$("#search-cancel"),a=$("#main"),l=$("#topbar-title"),r=$("#search-wrapper"),n=$("#search-result-wrapper"),s=$("#search-results"),i=$("#search-input"),c=$("#search-hints"),d=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),p={on(){e.addClass("unloaded"),l.addClass("unloaded"),t.addClass("unloaded"),r.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),r.removeClass("d-flex"),e.removeClass("unloaded"),l.removeClass("unloaded"),t.removeClass("unloaded")}},u=function(){let e=!1;return{on(){e||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),e=!0)},off(){e&&(s.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),i.val(""),e=!1)},isVisible(){return e}}}();function f(){return o.hasClass("loaded")}t.click(function(){p.on(),u.on(),i.focus()}),o.click(function(){p.off(),u.off()}),i.focus(function(){r.addClass("input-focus")}),i.focusout(function(){r.removeClass("input-focus")}),i.on("input",()=>{""===i.val()?f()?c.removeClass("unloaded"):u.off():(u.on(),f()&&c.addClass("unloaded"))})}),$(function(){var e=function(){const e="sidebar-display";let t=!1;const o=$("body");return{toggle(){!1===t?o.attr(e,""):o.removeAttr(e),t=!t}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const t=$("#search-input"),o=ScrollHelper.getTopbarHeight();let e,a=0;function l(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||l()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&l()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(!function(){var e=$(this).scrollTop();if(!(Math.abs(a-e)<=o)){if(e>a)ScrollHelper.hideTopbar(),t.is(":focus")&&t.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=e}}(),e=!1)},250)}),$(function(){var e="div.post>h1:first-of-type",t=$(e);const n=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=t.text().trim(),l=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(e=>{var t,o;l?(o=$(window).scrollTop(),t=re,attrTimestamp:()=>t,attrDateFormat:()=>o,getTimestamp:e=>Number(e.attr(t)),getDateFormat:e=>e.attr(o)}}());$(function(){dayjs.locale(LocaleHelper.locale()),dayjs.extend(window.dayjs_plugin_localizedFormat),$(`[${LocaleHelper.attrTimestamp()}]`).each(function(){var e=dayjs.unix(LocaleHelper.getTimestamp($(this))),t=e.format(LocaleHelper.getDateFormat($(this))),t=($(this).text(t),$(this).removeAttr(LocaleHelper.attrTimestamp()),$(this).removeAttr(LocaleHelper.attrDateFormat()),$(this).attr("data-toggle"));void 0!==t&&"tooltip"===t&&(t=e.format("llll"),$(this).attr("data-original-title",t))})});
+!function(){"use strict";const e=new Map;var t={set(t,n,i){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=f();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of d)e()}),d.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},v=/[^.]*(?=\..*)\.|.*/,b=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function A(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=k(e);return O.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=A(e),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=x(s,t.replace(v,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return P(i,{delegateTarget:e}),n.oneOff&&D.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,e.addEventListener(a,d,r)}function S(e,t,n,i,o){const r=C(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function j(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function k(e){return e=e.replace(b,""),E[e]||e}const D={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=A(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))j(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=f();let o=null,r=!0,s=!0,a=!1;t!==k(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const B={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class I{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?B.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?B.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends I{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const F=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},H={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=F(e);return t&&H.findOne(t)?t:null},getElementFromSelector(e){const t=F(e);return t?H.findOne(t):null},getMultipleElementsFromSelector(e){const t=F(e);return t?H.find(t):[]}},q=".bs.collapse",z=`show${q}`,W=`shown${q}`,R=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,K="show",U="collapse",Q="collapsing",X=`:scope .${U} .${U}`,G='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=H.find(G);for(const e of n){const t=H.getSelectorFromElement(e),n=H.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(U),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U,K),this._element.style[t]="",D.trigger(this._element,W)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,R).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(U,K);for(const e of this._triggerArray){const t=H.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(U),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(K)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(G);for(const t of e){const e=H.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=H.find(X,this._config.parent);return H.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}D.on(document,Y,G,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of H.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",fe="popper",de="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",ve="afterRead",be="beforeMain",_e="main",ye="afterMain",we="beforeWrite",Ee="write",Oe="afterWrite",xe=[me,ge,ve,be,_e,ye,we,Ee,Oe];function Ae(e){return e?(e.nodeName||"").toLowerCase():null}function Ce(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ce(e).Element||e instanceof Element}function Le(e){return e instanceof Ce(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ce(e).ShadowRoot||e instanceof ShadowRoot)}var je={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Ae(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Ae(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function ke(e){return e.split("-")[0]}var De=Math.max,Pe=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Be(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Ie(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ce(e):window).visualViewport,a=!Be()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function $e(e){var t=Ie(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function Fe(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function He(e){return Ce(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Ae(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function We(e){return"html"===Ae(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function Re(e){return Le(e)&&"fixed"!==He(e).position?e.offsetParent:null}function Ve(e){for(var t=Ce(e),n=Re(e);n&&qe(n)&&"static"===He(n).position;)n=Re(n);return n&&("html"===Ae(n)||"body"===Ae(n)&&"static"===He(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===He(e).position)return null;var n=We(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Ae(n))<0;){var i=He(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ke(e,t,n){return De(e,Pe(t,n))}function Ue(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Xe={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=ke(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ue("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),f=$e(r),d="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),v=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,_=u[d],y=v-f[l]-u[p],w=v/2-f[l]/2+b,E=Ke(_,w,y),O=c;n.modifiersData[i]=((t={})[O]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&Fe(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ge(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=s.x,p=void 0===d?0:d,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var v=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),_=oe,y=te,w=window;if(l){var E=Ve(n),O="clientHeight",x="clientWidth";if(E===Ce(n)&&"static"!==He(E=ze(n)).position&&"absolute"===a&&(O="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(f&&E===w&&w.visualViewport?w.visualViewport.height:E[O])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)_=ie,p-=(f&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var A,C=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ce(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((A={})[y]=b?"0":"",A[_]=v?"0":"",A.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",A)):Object.assign({},C,((t={})[y]=b?m+"px":"",t[_]=v?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:ke(t.placement),variation:Ge(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ce(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ce(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Ie(ze(e)).left+at(e).scrollLeft}function lt(e){var t=He(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Ae(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(We(e))}function ft(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ce(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(ft(We(s)))}function dt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?dt(function(e,t){var n=Ce(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Be();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Ie(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):dt(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===He(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=ft(We(e)),n=["absolute","fixed"].indexOf(He(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&Fe(e,n)&&"body"!==Ae(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=De(o.top,t.top),t.right=Pe(o.right,t.right),t.bottom=Pe(o.bottom,t.bottom),t.left=De(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?ke(o):null,s=o?Ge(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,f=n.elementContext,d=void 0===f?fe:f,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,v=Ue("number"!=typeof g?g:Qe(g,se)),b=d===fe?de:fe,_=e.rects.popper,y=e.elements[h?b:d],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Ie(e.elements.reference),O=mt({reference:E,element:_,placement:o}),x=dt(Object.assign({},_,O)),A=d===fe?x:E,C={top:w.top-A.top+v.top,bottom:A.bottom-w.bottom+v.bottom,left:w.left-A.left+v.left,right:A.right-w.right+v.right},T=e.modifiersData.offset;if(d===fe&&T){var L=T[o];Object.keys(C).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";C[e]+=L[n]*t})}return C}function vt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Ge(i),f=u?a?pe:pe.filter(function(e){return Ge(e)===u}):se,d=f.filter(function(e){return l.indexOf(e)>=0});0===d.length&&(d=f);var p=d.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[ke(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var bt={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,v=ke(g),b=c||(v===g||!h?[ot(g)]:function(e){if(ke(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),_=[g].concat(b).reduce(function(e,n){return e.concat(ke(n)===re?vt(t,{placement:n,boundary:u,rootBoundary:f,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,O=!0,x=_[0],A=0;A<_.length;A++){var C=_[A],T=ke(C),L=Ge(C)===ae,S=[te,ne].indexOf(T)>=0,j=S?"width":"height",k=gt(t,{placement:C,boundary:u,rootBoundary:f,altBoundary:d,padding:l}),D=S?L?ie:oe:L?ne:te;y[j]>w[j]&&(D=ot(D));var P=ot(D),N=[];if(r&&N.push(k[T]<=0),a&&N.push(k[D]<=0,k[P]<=0),N.every(function(e){return e})){x=C,O=!1;break}E.set(C,N)}if(O)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},B=h?3:1;B>0;B--){if("break"===M(B))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _t(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=_t(s,i),l=_t(a,o,r),u=yt(c),f=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=ke(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var Ot={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=void 0===d||d,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:f,altBoundary:u}),v=ke(t.placement),b=Ge(t.placement),_=!b,y=Ye(v),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,O=t.rects.reference,x=t.rects.popper,A="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,C="number"==typeof A?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,j="y"===y?te:oe,k="y"===y?ne:ie,D="y"===y?"height":"width",P=E[y],N=P+g[j],M=P-g[k],B=p?-x[D]/2:0,I=b===ae?O[D]:x[D],$=b===ae?-x[D]:-O[D],F=t.elements.arrow,H=p&&F?$e(F):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[j],W=q[k],R=Ke(0,O[D],H[D]),V=_?O[D]/2-B-R-z-C.mainAxis:I-R-z-C.mainAxis,Y=_?-O[D]/2+B+R+W+C.mainAxis:$+R+W+C.mainAxis,K=t.elements.arrow&&Ve(t.elements.arrow),U=K?"y"===y?K.clientTop||0:K.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,X=P+Y-Q,G=Ke(p?Pe(N,P+V-Q-U):N,P,p?De(M,X):M);E[y]=G,L[y]=G-P}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(v),fe=null!=(J=null==T?void 0:T[w])?J:0,de=ue?ce:re-O[se]-x[se]-fe+C.altAxis,pe=ue?re+O[se]+x[se]-fe-C.altAxis:le,he=p&&ue?function(e,t,n){var i=Ke(e,t,n);return i>n?n:i}(de,re,pe):Ke(p?de:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function At(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Ie(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Ae(t)||lt(a))&&(l=(i=t)!==Ce(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Ie(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ct(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Pt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const Bt={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},It={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ft extends I{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Bt}static get DefaultType(){return It}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=H.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ht=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Wt=".tooltip-inner",Rt=".modal",Vt="hide.bs.modal",Yt="hover",Kt="focus",Ut="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Xt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'t.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...sn].forEach(e=>{e.onclick=()=>this.showPopup()}),an.onclick=e=>this.clickBackdrop(e),cn.onclick=()=>this.hidePopup(),an.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var dn={_:!0},pn={_:48};tn(fn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:en(nn=fn,nn,pn)._});tn(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Theme.newThemeMap("default","dark");const hn="dropdown",mn=".bs.dropdown",gn=".data-api",vn="ArrowUp",bn="ArrowDown",_n=`hide${mn}`,yn=`hidden${mn}`,wn=`show${mn}`,En=`shown${mn}`,On=`click${mn}${gn}`,xn=`keydown${mn}${gn}`,An=`keyup${mn}${gn}`,Cn="show",Tn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Ln=`${Tn}.${Cn}`,Sn=".dropdown-menu",jn=p()?"top-end":"top-start",kn=p()?"top-start":"top-end",Dn=p()?"bottom-end":"bottom-start",Pn=p()?"bottom-start":"bottom-end",Nn=p()?"left-start":"right-start",Mn=p()?"right-start":"left-start",Bn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},In={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class $n extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=H.next(this._element,Sn)[0]||H.prev(this._element,Sn)[0]||H.findOne(Sn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Bn}static get DefaultType(){return In}static get NAME(){return hn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!D.trigger(this._element,wn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Cn),this._element.classList.add(Cn),D.trigger(this._element,En,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!D.trigger(this._element,_n,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Cn),this._element.classList.remove(Cn),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,yn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${hn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===kt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=jt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Cn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Nn;if(e.classList.contains("dropstart"))return Mn;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?kn:jn:t?Pn:Dn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=H.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===bn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=$n.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=H.find(Ln);for(const n of t){const t=$n.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[vn,bn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Tn)?this:H.prev(this,Tn)[0]||H.next(this,Tn)[0]||H.findOne(Tn,e.delegateTarget.parentNode),r=$n.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}D.on(document,xn,Tn,$n.dataApiKeydownHandler),D.on(document,xn,Sn,$n.dataApiKeydownHandler),D.on(document,On,$n.clearMenus),D.on(document,An,$n.clearMenus),D.on(document,On,Tn,function(e){e.preventDefault(),$n.getOrCreateInstance(this).toggle()}),h($n);const Fn="active",Hn=document.querySelector("#mode-toggle + .dropdown-menu"),qn=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const zn=document.getElementById("sidebar"),Wn=document.getElementById("sidebar-trigger"),Rn=document.getElementById("mask");class Vn{static toggle(){Yn._=en(Vn,this,!en(Vn,this,Yn)._),document.body.toggleAttribute("sidebar-display",en(Vn,this,Yn)._),zn.classList.toggle("z-2",en(Vn,this,Yn)._),Rn.classList.toggle("d-none",!en(Vn,this,Yn)._)}}var Yn={_:!1};const Kn=document.getElementById("sidebar-trigger"),Un=document.getElementById("search-trigger"),Qn=document.getElementById("search-cancel"),Xn=document.querySelectorAll("#main-wrapper>.container>.row"),Gn=document.getElementById("topbar-title"),Jn=document.getElementById("search"),Zn=document.getElementById("search-result-wrapper"),ei=document.getElementById("search-results"),ti=document.getElementById("search-input"),ni=document.getElementById("search-hints"),ii="d-block",oi="d-none",ri="input-focus",si="d-flex";class ai{static on(){Kn.classList.add(oi),Gn.classList.add(oi),Un.classList.add(oi),Jn.classList.add(si),Qn.classList.add(ii)}static off(){Qn.classList.remove(ii),Jn.classList.remove(si),Kn.classList.remove(oi),Gn.classList.remove(oi),Un.classList.remove(oi)}}class ci{static on(){this.resultVisible||(Zn.classList.remove(oi),Xn.forEach(e=>{e.classList.add(oi)}),this.resultVisible=!0)}static off(){this.resultVisible&&(ei.innerHTML="",ni.classList.contains(oi)&&ni.classList.remove(oi),Zn.classList.add(oi),Xn.forEach(e=>{e.classList.remove(oi)}),ti.textContent="",this.resultVisible=!1)}}function li(){return Qn.classList.contains(ii)}tn(ci,"resultVisible",!1),Wn.onclick=Rn.onclick=()=>Vn.toggle(),Un.addEventListener("click",()=>{ai.on(),ci.on(),ti.focus()}),Qn.addEventListener("click",()=>{ai.off(),ci.off()}),ti.addEventListener("focus",()=>{Jn.classList.add(ri)}),ti.addEventListener("focusout",()=>{Jn.classList.remove(ri)}),ti.addEventListener("input",()=>{""===ti.value?li()?ni.classList.remove(oi):ci.off():(ci.on(),li()&&ni.classList.add(oi))}),dayjs.locale(Zt.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${Zt.attrTimestamp}]`).forEach(e=>{const t=dayjs.unix(Zt.getTimestamp(e)),n=t.format(Zt.getDateFormat(e));if(e.textContent=n,e.removeAttribute(Zt.attrTimestamp),e.removeAttribute(Zt.attrDateFormat),e.hasAttribute("data-bs-toggle")&&"tooltip"===e.getAttribute("data-bs-toggle")){const n=t.format("llll");e.setAttribute("data-bs-title",n)}}),Theme.isToggleable&&(Hn.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==qn||e.classList.add(Fn)}),Hn.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=Hn.querySelector(`.${Fn}`);n!==t&&(n.classList.remove(Fn),t.classList.add(Fn),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/page.min.js b/assets/js/dist/page.min.js
index cd907220..6cfbd5c3 100644
--- a/assets/js/dist/page.min.js
+++ b/assets/js/dist/page.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(t=>{t=$(t.target);(t.prop("tagName")==="button".toUpperCase()?t:t.parent()).blur(),flipMode()})});const ScrollHelper=function(){const t=$("body"),e="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let r=0,a=!1,l=!1;return{hideTopbar:()=>t.attr(e,!1),showTopbar:()=>t.attr(e,!0),addScrollUpTask:()=>{r+=1,a=a||!0},popScrollUpTask:()=>--r,hasScrollUpTask:()=>0!0===a,unlockTopbar:()=>a=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===l,lockOrientation:()=>l=!0,unLockOrientation:()=>l=!1}}();$(function(){const t=$("#sidebar-trigger"),e=$("#search-trigger"),o=$("#search-cancel"),r=$("#main"),a=$("#topbar-title"),l=$("#search-wrapper"),n=$("#search-result-wrapper"),i=$("#search-results"),s=$("#search-input"),c=$("#search-hints"),d=function(){let t=0;return{block(){t=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(t)},getOffset(){return t}}}(),p={on(){t.addClass("unloaded"),a.addClass("unloaded"),e.addClass("unloaded"),l.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),l.removeClass("d-flex"),t.removeClass("unloaded"),a.removeClass("unloaded"),e.removeClass("unloaded")}},u=function(){let t=!1;return{on(){t||(d.block(),n.removeClass("unloaded"),r.addClass("unloaded"),t=!0)},off(){t&&(i.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),r.removeClass("unloaded"),d.release(),s.val(""),t=!1)},isVisible(){return t}}}();function h(){return o.hasClass("loaded")}e.click(function(){p.on(),u.on(),s.focus()}),o.click(function(){p.off(),u.off()}),s.focus(function(){l.addClass("input-focus")}),s.focusout(function(){l.removeClass("input-focus")}),s.on("input",()=>{""===s.val()?h()?c.removeClass("unloaded"):u.off():(u.on(),h()&&c.addClass("unloaded"))})}),$(function(){var t=function(){const t="sidebar-display";let e=!1;const o=$("body");return{toggle(){!1===e?o.attr(t,""):o.removeAttr(t),e=!e}}}();$("#sidebar-trigger").click(t.toggle),$("#mask").click(t.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),o=ScrollHelper.getTopbarHeight();let t,r=0;function a(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var t=screen.orientation.type;"landscape-primary"!==t&&"landscape-secondary"!==t||a()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&a()}),$(window).scroll(()=>{t=t||!0}),setInterval(()=>{t&&(!function(){var t=$(this).scrollTop();if(!(Math.abs(r-t)<=o)){if(t>r)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(t+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}r=t}}(),t=!1)},250)}),$(function(){var t="div.post>h1:first-of-type",e=$(t);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const i=n.text().trim();let r=e.text().trim(),a=!1,l=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(r)&&(r=r.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(r);new IntersectionObserver(t=>{var e,o;a?(o=$(window).scrollTop(),e=l img[data-src], ${t} img[data-src].preview-img`).each(function(){var t=$(this).next(),t="EM"===t.prop("tagName")?t.text():"",e=$(this).attr("data-src");$(this).wrap(``)}),$(".popup").magnificPopup({type:"image",closeOnContentClick:!0,showCloseBtn:!1,zoom:{enabled:!0,duration:300,easing:"ease-in-out"}}),$(t+" a").has("img").addClass("img-link"))}),$(function(){var t=".code-header>button";const e="timeout",a="data-title-succeed",l="data-original-title";function n(t){if($(t)[0].hasAttribute(e)){t=$(t).attr(e);if(Number(t)>Date.now())return 1}}function i(t){$(t).attr(e,Date.now()+2e3)}function s(t){$(t).removeAttr(e)}var o=new ClipboardJS(t,{target(t){return t.parentNode.nextElementSibling.querySelector("code .rouge-code")}});$(t).tooltip({trigger:"hover",placement:"left"});const r=$(t).children().attr("class");o.on("success",t=>{t.clearSelection();const e=t.trigger;var o;n(e)||(t=e,$(t).children().attr("class","fas fa-check"),t=e,o=$(t).attr(a),$(t).attr(l,o).tooltip("show"),i(e),setTimeout(()=>{var t;t=e,$(t).tooltip("hide").removeAttr(l),t=e,$(t).children().attr("class",r),s(e)},2e3))}),$("#copy-link").click(t=>{let e=$(t.target);if(!n(e)){var t=window.location.href,o=$("");$("body").append(o),o.val(t).select(),document.execCommand("copy"),o.remove();const r=e.attr(l);t=e.attr(a);e.attr(l,t).tooltip("show"),i(e),setTimeout(()=>{e.attr(l,r),s(e)},2e3)}})}),$(function(){const t=$("#topbar-title"),s="scroll-focus";$("a[href*='#']").not("[href='#']").not("[href='#0']").click(function(a){if(this.pathname.replace(/^\//,"")===location.pathname.replace(/^\//,"")&&location.hostname===this.hostname){var l=decodeURI(this.hash);let e=RegExp(/^#fnref:/).test(l),o=!e&&RegExp(/^#fn:/).test(l);var n=l.includes(":")?l.replace(/:/g,"\\:"):l;let r=$(n);var n=t.is(":visible"),i=$(window).width()<$(window).height();if(void 0!==r){a.preventDefault(),history.pushState&&history.pushState(null,null,l);a=$(window).scrollTop();let t=r.offset().top-=8;t{if(r.focus(),$(`[${s}=true]`).length&&$(`[${s}=true]`).attr(s,!1),$(":target").length&&$(":target").attr(s,!1),(o||e)&&r.attr(s,!0),r.is(":focus"))return!1;r.attr("tabindex","-1"),r.focus(),ScrollHelper.hasScrollUpTask()&&ScrollHelper.popScrollUpTask()})}}})});
+!function(){"use strict";const e=new Map;var t={set(t,n,i){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},d=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=d();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of f)e()}),f.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},b=/[^.]*(?=\..*)\.|.*/,v=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},A=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function O(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return A.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=O(e),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const d=x(s,t.replace(b,"")),f=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return P(i,{delegateTarget:e}),n.oneOff&&D.off(e,i.type,t),t.apply(e,[i])}}(e,s);f.delegationSelector=r?n:null,f.callable=s,f.oneOff=o,f.uidEvent=d,l[d]=f,e.addEventListener(a,f,r)}function S(e,t,n,i,o){const r=C(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(v,""),E[e]||e}const D={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=O(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=d();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const I={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class B{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?I.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?I.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends B{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const H=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},F={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=H(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){const t=H(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){const t=H(e);return t?F.find(t):[]}},q=".bs.collapse",z=`show${q}`,R=`shown${q}`,W=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,U="show",K="collapse",Q="collapsing",G=`:scope .${K} .${K}`,X='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=F.find(X);for(const e of n){const t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(K),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K,U),this._element.style[t]="",D.trigger(this._element,R)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,W).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(K,U);for(const e of this._triggerArray){const t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(U)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(X);for(const t of e){const e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=F.find(G,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}D.on(document,Y,X,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of F.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",de="popper",fe="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",be="afterRead",ve="beforeMain",_e="main",ye="afterMain",we="beforeWrite",Ee="write",Ae="afterWrite",xe=[me,ge,be,ve,_e,ye,we,Ee,Ae];function Oe(e){return e?(e.nodeName||"").toLowerCase():null}function Ce(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ce(e).Element||e instanceof Element}function Le(e){return e instanceof Ce(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ce(e).ShadowRoot||e instanceof ShadowRoot)}var ke={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Oe(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Oe(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function je(e){return e.split("-")[0]}var De=Math.max,Pe=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Ie(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Be(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ce(e):window).visualViewport,a=!Ie()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,d=i.height/r;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c,x:c,y:l}}function $e(e){var t=Be(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function He(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Fe(e){return Ce(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Oe(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function Re(e){return"html"===Oe(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function We(e){return Le(e)&&"fixed"!==Fe(e).position?e.offsetParent:null}function Ve(e){for(var t=Ce(e),n=We(e);n&&qe(n)&&"static"===Fe(n).position;)n=We(n);return n&&("html"===Oe(n)||"body"===Oe(n)&&"static"===Fe(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===Fe(e).position)return null;var n=Re(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Oe(n))<0;){var i=Fe(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ue(e,t,n){return De(e,Pe(t,n))}function Ke(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Ge={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=je(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ke("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),d=$e(r),f="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),b=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,v=h/2-m/2,_=u[f],y=b-d[l]-u[p],w=b/2-d[l]/2+v,E=Ue(_,w,y),A=c;n.modifiersData[i]=((t={})[A]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&He(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Xe(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,d=e.isFixed,f=s.x,p=void 0===f?0:f,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var b=s.hasOwnProperty("x"),v=s.hasOwnProperty("y"),_=oe,y=te,w=window;if(l){var E=Ve(n),A="clientHeight",x="clientWidth";if(E===Ce(n)&&"static"!==Fe(E=ze(n)).position&&"absolute"===a&&(A="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(d&&E===w&&w.visualViewport?w.visualViewport.height:E[A])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)_=ie,p-=(d&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var O,C=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ce(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((O={})[y]=v?"0":"",O[_]=b?"0":"",O.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",O)):Object.assign({},C,((t={})[y]=v?m+"px":"",t[_]=b?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:je(t.placement),variation:Xe(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ce(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ce(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Be(ze(e)).left+at(e).scrollLeft}function lt(e){var t=Fe(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Oe(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(Re(e))}function dt(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ce(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(dt(Re(s)))}function ft(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?ft(function(e,t){var n=Ce(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Ie();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Be(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):ft(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===Fe(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=dt(Re(e)),n=["absolute","fixed"].indexOf(Fe(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&He(e,n)&&"body"!==Oe(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=De(o.top,t.top),t.right=Pe(o.right,t.right),t.bottom=Pe(o.bottom,t.bottom),t.left=De(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?je(o):null,s=o?Xe(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,d=n.elementContext,f=void 0===d?de:d,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,b=Ke("number"!=typeof g?g:Qe(g,se)),v=f===de?fe:de,_=e.rects.popper,y=e.elements[h?v:f],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Be(e.elements.reference),A=mt({reference:E,element:_,placement:o}),x=ft(Object.assign({},_,A)),O=f===de?x:E,C={top:w.top-O.top+b.top,bottom:O.bottom-w.bottom+b.bottom,left:w.left-O.left+b.left,right:O.right-w.right+b.right},T=e.modifiersData.offset;if(f===de&&T){var L=T[o];Object.keys(C).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";C[e]+=L[n]*t})}return C}function bt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Xe(i),d=u?a?pe:pe.filter(function(e){return Xe(e)===u}):se,f=d.filter(function(e){return l.indexOf(e)>=0});0===f.length&&(f=d);var p=f.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[je(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var vt={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,b=je(g),v=c||(b===g||!h?[ot(g)]:function(e){if(je(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),_=[g].concat(v).reduce(function(e,n){return e.concat(je(n)===re?bt(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,A=!0,x=_[0],O=0;O<_.length;O++){var C=_[O],T=je(C),L=Xe(C)===ae,S=[te,ne].indexOf(T)>=0,k=S?"width":"height",j=gt(t,{placement:C,boundary:u,rootBoundary:d,altBoundary:f,padding:l}),D=S?L?ie:oe:L?ne:te;y[k]>w[k]&&(D=ot(D));var P=ot(D),N=[];if(r&&N.push(j[T]<=0),a&&N.push(j[D]<=0,j[P]<=0),N.every(function(e){return e})){x=C,A=!1;break}E.set(C,N)}if(A)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},I=h?3:1;I>0;I--){if("break"===M(I))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _t(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=_t(s,i),l=_t(a,o,r),u=yt(c),d=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=je(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,f=n.tether,p=void 0===f||f,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),b=je(t.placement),v=Xe(t.placement),_=!v,y=Ye(b),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,A=t.rects.reference,x=t.rects.popper,O="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,C="number"==typeof O?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,k="y"===y?te:oe,j="y"===y?ne:ie,D="y"===y?"height":"width",P=E[y],N=P+g[k],M=P-g[j],I=p?-x[D]/2:0,B=v===ae?A[D]:x[D],$=v===ae?-x[D]:-A[D],H=t.elements.arrow,F=p&&H?$e(H):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],R=q[j],W=Ue(0,A[D],F[D]),V=_?A[D]/2-I-W-z-C.mainAxis:B-W-z-C.mainAxis,Y=_?-A[D]/2+I+W+R+C.mainAxis:$+W+R+C.mainAxis,U=t.elements.arrow&&Ve(t.elements.arrow),K=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,G=P+Y-Q,X=Ue(p?Pe(N,P+V-Q-K):N,P,p?De(M,G):M);E[y]=X,L[y]=X-P}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(b),de=null!=(J=null==T?void 0:T[w])?J:0,fe=ue?ce:re-A[se]-x[se]-de+C.altAxis,pe=ue?re+A[se]+x[se]-de-C.altAxis:le,he=p&&ue?function(e,t,n){var i=Ue(e,t,n);return i>n?n:i}(fe,re,pe):Ue(p?fe:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function Ot(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Be(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Oe(t)||lt(a))&&(l=(i=t)!==Ce(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Be(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ct(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Pt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const It={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Bt={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ht extends B{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return It}static get DefaultType(){return Bt}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=F.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ft=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Rt=".tooltip-inner",Wt=".modal",Vt="hide.bs.modal",Yt="hover",Ut="focus",Kt="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Gt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'t.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...xn].forEach(e=>{e.onclick=()=>this.showPopup()}),On.onclick=e=>this.clickBackdrop(e),Cn.onclick=()=>this.hidePopup(),On.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var kn={_:!0},jn={_:48};yn(Sn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:_n(wn=Sn,wn,jn)._});yn(class{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)");const Dn="mermaid",Pn=Theme.newThemeMap("default","dark");function Nn(e){if(e.source===window&&e.data&&e.data.id===Theme.eventId){[...document.getElementsByClassName(Dn)].forEach(e=>{const t=e.previousSibling.children.item(0).textContent;e.textContent=t,e.removeAttribute("data-processed")});const e=Pn[Theme.resolvedTheme];mermaid.initialize({theme:e}),mermaid.init(null,`.${Dn}`)}}function Mn(e){const t=e.textContent,n=e.parentElement;n.classList.add("d-none");const i=document.createElement("pre");i.classList.add(Dn);const o=document.createTextNode(t);i.appendChild(o),n.after(i)}const In="dropdown",Bn=".bs.dropdown",$n=".data-api",Hn="ArrowUp",Fn="ArrowDown",qn=`hide${Bn}`,zn=`hidden${Bn}`,Rn=`show${Bn}`,Wn=`shown${Bn}`,Vn=`click${Bn}${$n}`,Yn=`keydown${Bn}${$n}`,Un=`keyup${Bn}${$n}`,Kn="show",Qn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Gn=`${Qn}.${Kn}`,Xn=".dropdown-menu",Jn=p()?"top-end":"top-start",Zn=p()?"top-start":"top-end",ei=p()?"bottom-end":"bottom-start",ti=p()?"bottom-start":"bottom-end",ni=p()?"left-start":"right-start",ii=p()?"right-start":"left-start",oi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},ri={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class si extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=F.next(this._element,Xn)[0]||F.prev(this._element,Xn)[0]||F.findOne(Xn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return oi}static get DefaultType(){return ri}static get NAME(){return In}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!D.trigger(this._element,Rn,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Kn),this._element.classList.add(Kn),D.trigger(this._element,Wn,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!D.trigger(this._element,qn,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Kn),this._element.classList.remove(Kn),this._element.setAttribute("aria-expanded","false"),I.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,zn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${In.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===jt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=kt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Kn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return ni;if(e.classList.contains("dropstart"))return ii;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?Zn:Jn:t?ti:ei}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(I.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=F.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===Fn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=si.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=F.find(Gn);for(const n of t){const t=si.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[Hn,Fn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Qn)?this:F.prev(this,Qn)[0]||F.next(this,Qn)[0]||F.findOne(Qn,e.delegateTarget.parentNode),r=si.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}D.on(document,Yn,Qn,si.dataApiKeydownHandler),D.on(document,Yn,Xn,si.dataApiKeydownHandler),D.on(document,Vn,si.clearMenus),D.on(document,Un,si.clearMenus),D.on(document,Vn,Qn,function(e){e.preventDefault(),si.getOrCreateInstance(this).toggle()}),h(si);const ai="active",ci=document.querySelector("#mode-toggle + .dropdown-menu"),li=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const ui=document.getElementById("sidebar"),di=document.getElementById("sidebar-trigger"),fi=document.getElementById("mask");class pi{static toggle(){hi._=_n(pi,this,!_n(pi,this,hi)._),document.body.toggleAttribute("sidebar-display",_n(pi,this,hi)._),ui.classList.toggle("z-2",_n(pi,this,hi)._),fi.classList.toggle("d-none",!_n(pi,this,hi)._)}}var hi={_:!1};const mi=document.getElementById("sidebar-trigger"),gi=document.getElementById("search-trigger"),bi=document.getElementById("search-cancel"),vi=document.querySelectorAll("#main-wrapper>.container>.row"),_i=document.getElementById("topbar-title"),yi=document.getElementById("search"),wi=document.getElementById("search-result-wrapper"),Ei=document.getElementById("search-results"),Ai=document.getElementById("search-input"),xi=document.getElementById("search-hints"),Oi="d-block",Ci="d-none",Ti="input-focus",Li="d-flex";class Si{static on(){mi.classList.add(Ci),_i.classList.add(Ci),gi.classList.add(Ci),yi.classList.add(Li),bi.classList.add(Oi)}static off(){bi.classList.remove(Oi),yi.classList.remove(Li),mi.classList.remove(Ci),_i.classList.remove(Ci),gi.classList.remove(Ci)}}class ki{static on(){this.resultVisible||(wi.classList.remove(Ci),vi.forEach(e=>{e.classList.add(Ci)}),this.resultVisible=!0)}static off(){this.resultVisible&&(Ei.innerHTML="",xi.classList.contains(Ci)&&xi.classList.remove(Ci),wi.classList.add(Ci),vi.forEach(e=>{e.classList.remove(Ci)}),Ai.textContent="",this.resultVisible=!1)}}function ji(){return bi.classList.contains(Oi)}yn(ki,"resultVisible",!1),function(){const e=document.querySelectorAll("article img");if(0===e.length)return;e.forEach(e=>{e.addEventListener("load",hn)}),document.querySelectorAll('article img[loading="lazy"]').forEach(e=>{e.complete&&pn.call(e,dn)});const t=document.querySelectorAll(`article img[${un}="true"]`);t.length&&t.forEach(e=>{mn.call(e)})}(),function(){if(null===document.querySelector(".popup"))return;const e=!(null===document.querySelector(".popup.light")&&null===document.querySelector(".popup.dark"));Theme.isDark&&(vn=bn);let t=GLightbox({selector:`${vn}`});if(e&&Theme.isToggleable){let e=null;window.addEventListener("message",n=>{n.source===window&&n.data&&n.data.id===Theme.eventId&&([t,e]=function(e,t){return vn=vn===gn?bn:gn,null===t&&(t=GLightbox({selector:`${vn}`})),[t,e]}(t,e))})}}(),di.onclick=fi.onclick=()=>pi.toggle(),gi.addEventListener("click",()=>{Si.on(),ki.on(),Ai.focus()}),bi.addEventListener("click",()=>{Si.off(),ki.off()}),Ai.addEventListener("focus",()=>{yi.classList.add(Ti)}),Ai.addEventListener("focusout",()=>{yi.classList.remove(Ti)}),Ai.addEventListener("input",()=>{""===Ai.value?ji()?xi.classList.remove(Ci):ki.off():(ki.on(),ji()&&xi.classList.add(Ci))}),cn(),function(){const e=document.getElementById("copy-link");null!==e&&(e.addEventListener("click",e=>{const t=e.target;rn(t)||navigator.clipboard.writeText(window.location.href).then(()=>{const e=t.getAttribute(nn),n=t.getAttribute(tn);t.setAttribute(nn,n),Jt.getInstance(t).show(),sn(t),setTimeout(()=>{t.setAttribute(nn,e),an(t)},on)})}),e.addEventListener("mouseleave",e=>{Jt.getInstance(e.target).hide()}))}(),function(){if("undefined"==typeof mermaid||"function"!=typeof mermaid.initialize)return;let e={theme:Pn[Theme.resolvedTheme]};[...document.getElementsByClassName("language-mermaid")].forEach(Mn),mermaid.initialize(e),Theme.isToggleable&&window.addEventListener("message",Nn)}(),Theme.isToggleable&&(ci.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==li||e.classList.add(ai)}),ci.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=ci.querySelector(`.${ai}`);n!==t&&(n.classList.remove(ai),t.classList.add(ai),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/post.min.js b/assets/js/dist/post.min.js
index c1d086c5..c24a5bce 100644
--- a/assets/js/dist/post.min.js
+++ b/assets/js/dist/post.min.js
@@ -1,6 +1,4 @@
/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
*/
-$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(t=>{t=$(t.target);(t.prop("tagName")==="button".toUpperCase()?t:t.parent()).blur(),flipMode()})});const ScrollHelper=function(){const t=$("body"),e="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let a=0,r=!1,l=!1;return{hideTopbar:()=>t.attr(e,!1),showTopbar:()=>t.attr(e,!0),addScrollUpTask:()=>{a+=1,r=r||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0!0===r,unlockTopbar:()=>r=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===l,lockOrientation:()=>l=!0,unLockOrientation:()=>l=!1}}(),LocaleHelper=($(function(){const t=$("#sidebar-trigger"),e=$("#search-trigger"),o=$("#search-cancel"),a=$("#main"),r=$("#topbar-title"),l=$("#search-wrapper"),n=$("#search-result-wrapper"),i=$("#search-results"),s=$("#search-input"),c=$("#search-hints"),d=function(){let t=0;return{block(){t=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(t)},getOffset(){return t}}}(),p={on(){t.addClass("unloaded"),r.addClass("unloaded"),e.addClass("unloaded"),l.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),l.removeClass("d-flex"),t.removeClass("unloaded"),r.removeClass("unloaded"),e.removeClass("unloaded")}},u=function(){let t=!1;return{on(){t||(d.block(),n.removeClass("unloaded"),a.addClass("unloaded"),t=!0)},off(){t&&(i.empty(),c.hasClass("unloaded")&&c.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("unloaded"),d.release(),s.val(""),t=!1)},isVisible(){return t}}}();function h(){return o.hasClass("loaded")}e.click(function(){p.on(),u.on(),s.focus()}),o.click(function(){p.off(),u.off()}),s.focus(function(){l.addClass("input-focus")}),s.focusout(function(){l.removeClass("input-focus")}),s.on("input",()=>{""===s.val()?h()?c.removeClass("unloaded"):u.off():(u.on(),h()&&c.addClass("unloaded"))})}),$(function(){var t=function(){const t="sidebar-display";let e=!1;const o=$("body");return{toggle(){!1===e?o.attr(t,""):o.removeAttr(t),e=!e}}}();$("#sidebar-trigger").click(t.toggle),$("#mask").click(t.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),o=ScrollHelper.getTopbarHeight();let t,a=0;function r(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var t=screen.orientation.type;"landscape-primary"!==t&&"landscape-secondary"!==t||r()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&r()}),$(window).scroll(()=>{t=t||!0}),setInterval(()=>{t&&(!function(){var t=$(this).scrollTop();if(!(Math.abs(a-t)<=o)){if(t>a)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(t+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=t}}(),t=!1)},250)}),$(function(){var t="div.post>h1:first-of-type",e=$(t);const n=$("#topbar-title");if(0!==e.length&&!e.hasClass("dynamic-title")&&!n.is(":hidden")){const i=n.text().trim();let a=e.text().trim(),r=!1,l=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),e.offset().top<$(window).scrollTop()&&n.text(a);new IntersectionObserver(t=>{var e,o;r?(o=$(window).scrollTop(),e=l img[data-src], ${t} img[data-src].preview-img`).each(function(){var t=$(this).next(),t="EM"===t.prop("tagName")?t.text():"",e=$(this).attr("data-src");$(this).wrap(``)}),$(".popup").magnificPopup({type:"image",closeOnContentClick:!0,showCloseBtn:!1,zoom:{enabled:!0,duration:300,easing:"ease-in-out"}}),$(t+" a").has("img").addClass("img-link"))}),function(){const t=$("html").attr("lang").substr(0,2),e="data-ts",o="data-df";return{locale:()=>t,attrTimestamp:()=>e,attrDateFormat:()=>o,getTimestamp:t=>Number(t.attr(e)),getDateFormat:t=>t.attr(o)}}());$(function(){dayjs.locale(LocaleHelper.locale()),dayjs.extend(window.dayjs_plugin_localizedFormat),$(`[${LocaleHelper.attrTimestamp()}]`).each(function(){var t=dayjs.unix(LocaleHelper.getTimestamp($(this))),e=t.format(LocaleHelper.getDateFormat($(this))),e=($(this).text(e),$(this).removeAttr(LocaleHelper.attrTimestamp()),$(this).removeAttr(LocaleHelper.attrDateFormat()),$(this).attr("data-toggle"));void 0!==e&&"tooltip"===e&&(e=t.format("llll"),$(this).attr("data-original-title",e))})}),$(function(){var t=".code-header>button";const e="timeout",r="data-title-succeed",l="data-original-title";function n(t){if($(t)[0].hasAttribute(e)){t=$(t).attr(e);if(Number(t)>Date.now())return 1}}function i(t){$(t).attr(e,Date.now()+2e3)}function s(t){$(t).removeAttr(e)}var o=new ClipboardJS(t,{target(t){return t.parentNode.nextElementSibling.querySelector("code .rouge-code")}});$(t).tooltip({trigger:"hover",placement:"left"});const a=$(t).children().attr("class");o.on("success",t=>{t.clearSelection();const e=t.trigger;var o;n(e)||(t=e,$(t).children().attr("class","fas fa-check"),t=e,o=$(t).attr(r),$(t).attr(l,o).tooltip("show"),i(e),setTimeout(()=>{var t;t=e,$(t).tooltip("hide").removeAttr(l),t=e,$(t).children().attr("class",a),s(e)},2e3))}),$("#copy-link").click(t=>{let e=$(t.target);if(!n(e)){var t=window.location.href,o=$("");$("body").append(o),o.val(t).select(),document.execCommand("copy"),o.remove();const a=e.attr(l);t=e.attr(r);e.attr(l,t).tooltip("show"),i(e),setTimeout(()=>{e.attr(l,a),s(e)},2e3)}})}),$(function(){const t=$("#topbar-title"),s="scroll-focus";$("a[href*='#']").not("[href='#']").not("[href='#0']").click(function(r){if(this.pathname.replace(/^\//,"")===location.pathname.replace(/^\//,"")&&location.hostname===this.hostname){var l=decodeURI(this.hash);let e=RegExp(/^#fnref:/).test(l),o=!e&&RegExp(/^#fn:/).test(l);var n=l.includes(":")?l.replace(/:/g,"\\:"):l;let a=$(n);var n=t.is(":visible"),i=$(window).width()<$(window).height();if(void 0!==a){r.preventDefault(),history.pushState&&history.pushState(null,null,l);r=$(window).scrollTop();let t=a.offset().top-=8;t{if(a.focus(),$(`[${s}=true]`).length&&$(`[${s}=true]`).attr(s,!1),$(":target").length&&$(":target").attr(s,!1),(o||e)&&a.attr(s,!0),a.is(":focus"))return!1;a.attr("tabindex","-1"),a.focus(),ScrollHelper.hasScrollUpTask()&&ScrollHelper.popScrollUpTask()})}}})});
+!function(){"use strict";const e=new Map;var t={set(t,n,i){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const i=e.get(t);i.delete(n),0===i.size&&e.delete(t)}};const n="transitionend",i=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),o=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),r=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),s=e=>r(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(i(e)):null,a=e=>{if(!r(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},c=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),l=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l(e.parentNode):null},u=()=>{},d=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,h=e=>{var t;t=()=>{const t=d();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of f)e()}),f.push(t)):t()},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e.call(...t):n},g=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void m(e);const i=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const r=i=>{let{target:s}=i;s===t&&(o=!0,t.removeEventListener(n,r),m(e))};t.addEventListener(n,r),setTimeout(()=>{o||t.dispatchEvent(new Event(n))},i)},b=/[^.]*(?=\..*)\.|.*/,v=/\..*/,_=/::\d+$/,y={};let w=1;const E={mouseenter:"mouseover",mouseleave:"mouseout"},A=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(e,t){return t&&`${t}::${w++}`||e.uidEvent||w++}function O(e){const t=x(e);return e.uidEvent=t,y[t]=y[t]||{},y[t]}function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function T(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=j(e);return A.has(r)||(r=e),[i,o,r]}function L(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=T(t,n,i);if(t in E){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=O(e),l=c[a]||(c[a]={}),u=C(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const d=x(s,t.replace(b,"")),f=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return P(o,{delegateTarget:s}),i.oneOff&&D.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return P(i,{delegateTarget:e}),n.oneOff&&D.off(e,i.type,t),t.apply(e,[i])}}(e,s);f.delegationSelector=r?n:null,f.callable=s,f.oneOff=o,f.uidEvent=d,l[d]=f,e.addEventListener(a,f,r)}function S(e,t,n,i,o){const r=C(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function k(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&S(e,t,n,s.callable,s.delegationSelector)}function j(e){return e=e.replace(v,""),E[e]||e}const D={on(e,t,n,i){L(e,t,n,i,!1)},one(e,t,n,i){L(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=T(t,n,i),a=s!==t,c=O(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))k(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(_,"");a&&!t.includes(o)||S(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;S(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=d();let o=null,r=!0,s=!0,a=!1;t!==j(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=P(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function N(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function M(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const I={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${M(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${M(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(e=>e.startsWith("bs")&&!e.startsWith("bsConfig"));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=N(e.dataset[i])}return t},getDataAttribute:(e,t)=>N(e.getAttribute(`data-bs-${M(t)}`))};class B{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=r(t)?I.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...r(t)?I.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[n,i]of Object.entries(t)){const t=e[n],s=r(t)?"element":o(t);if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${s}" but expected type "${i}".`)}}}class $ extends B{constructor(e,n){super(),(e=s(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),D.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){g(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(s(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const F=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map(e=>i(e)).join(","):null},H={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter(e=>e.matches(t)),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(e=>!c(e)&&a(e))},getSelectorFromElement(e){const t=F(e);return t&&H.findOne(t)?t:null},getElementFromSelector(e){const t=F(e);return t?H.findOne(t):null},getMultipleElementsFromSelector(e){const t=F(e);return t?H.find(t):[]}},q=".bs.collapse",z=`show${q}`,R=`shown${q}`,W=`hide${q}`,V=`hidden${q}`,Y=`click${q}.data-api`,U="show",K="collapse",Q="collapsing",G=`:scope .${K} .${K}`,X='[data-bs-toggle="collapse"]',J={parent:null,toggle:!0},Z={parent:"(null|element)",toggle:"boolean"};class ee extends ${constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=H.find(X);for(const e of n){const t=H.getSelectorFromElement(e),n=H.find(t).filter(e=>e===this._element);null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get DefaultType(){return Z}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(e=>e!==this._element).map(e=>ee.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(D.trigger(this._element,z).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(K),this._element.classList.add(Q),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K,U),this._element.style[t]="",D.trigger(this._element,R)},this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(D.trigger(this._element,W).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(Q),this._element.classList.remove(K,U);for(const e of this._triggerArray){const t=H.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Q),this._element.classList.add(K),D.trigger(this._element,V)},this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(U)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=s(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(X);for(const t of e){const e=H.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=H.find(G,this._config.parent);return H.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const n=ee.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}}D.on(document,Y,X,function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of H.getMultipleElementsFromSelector(this))ee.getOrCreateInstance(e,{toggle:!1}).toggle()}),h(ee),document.getElementsByClassName("collapse");var te="top",ne="bottom",ie="right",oe="left",re="auto",se=[te,ne,ie,oe],ae="start",ce="end",le="clippingParents",ue="viewport",de="popper",fe="reference",pe=se.reduce(function(e,t){return e.concat([t+"-"+ae,t+"-"+ce])},[]),he=[].concat(se,[re]).reduce(function(e,t){return e.concat([t,t+"-"+ae,t+"-"+ce])},[]),me="beforeRead",ge="read",be="afterRead",ve="beforeMain",_e="main",ye="afterMain",we="beforeWrite",Ee="write",Ae="afterWrite",xe=[me,ge,be,ve,_e,ye,we,Ee,Ae];function Oe(e){return e?(e.nodeName||"").toLowerCase():null}function Ce(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ce(e).Element||e instanceof Element}function Le(e){return e instanceof Ce(e).HTMLElement||e instanceof HTMLElement}function Se(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ce(e).ShadowRoot||e instanceof ShadowRoot)}var ke={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];Le(o)&&Oe(o)&&(Object.assign(o.style,n),Object.keys(i).forEach(function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]="",e},{});Le(i)&&Oe(i)&&(Object.assign(i.style,r),Object.keys(o).forEach(function(e){i.removeAttribute(e)}))})}},requires:["computeStyles"]};function je(e){return e.split("-")[0]}var De=Math.max,Pe=Math.min,Ne=Math.round;function Me(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Ie(){return!/^((?!chrome|android).)*safari/i.test(Me())}function Be(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&Le(e)&&(o=e.offsetWidth>0&&Ne(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Ne(i.height)/e.offsetHeight||1);var s=(Te(e)?Ce(e):window).visualViewport,a=!Ie()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,d=i.height/r;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c,x:c,y:l}}function $e(e){var t=Be(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function Fe(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Se(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function He(e){return Ce(e).getComputedStyle(e)}function qe(e){return["table","td","th"].indexOf(Oe(e))>=0}function ze(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function Re(e){return"html"===Oe(e)?e:e.assignedSlot||e.parentNode||(Se(e)?e.host:null)||ze(e)}function We(e){return Le(e)&&"fixed"!==He(e).position?e.offsetParent:null}function Ve(e){for(var t=Ce(e),n=We(e);n&&qe(n)&&"static"===He(n).position;)n=We(n);return n&&("html"===Oe(n)||"body"===Oe(n)&&"static"===He(n).position)?t:n||function(e){var t=/firefox/i.test(Me());if(/Trident/i.test(Me())&&Le(e)&&"fixed"===He(e).position)return null;var n=Re(e);for(Se(n)&&(n=n.host);Le(n)&&["html","body"].indexOf(Oe(n))<0;){var i=He(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function Ye(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ue(e,t,n){return De(e,Pe(t,n))}function Ke(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function Qe(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Ge={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,o=e.options,r=n.elements.arrow,s=n.modifiersData.popperOffsets,a=je(n.placement),c=Ye(a),l=[oe,ie].indexOf(a)>=0?"height":"width";if(r&&s){var u=function(e,t){return Ke("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:Qe(e,se))}(o.padding,n),d=$e(r),f="y"===c?te:oe,p="y"===c?ne:ie,h=n.rects.reference[l]+n.rects.reference[c]-s[c]-n.rects.popper[l],m=s[c]-n.rects.reference[c],g=Ve(r),b=g?"y"===c?g.clientHeight||0:g.clientWidth||0:0,v=h/2-m/2,_=u[f],y=b-d[l]-u[p],w=b/2-d[l]/2+v,E=Ue(_,w,y),A=c;n.modifiersData[i]=((t={})[A]=E,t.centerOffset=E-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&Fe(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Xe(e){return e.split("-")[1]}var Je={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ze(e){var t,n=e.popper,i=e.popperRect,o=e.placement,r=e.variation,s=e.offsets,a=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,d=e.isFixed,f=s.x,p=void 0===f?0:f,h=s.y,m=void 0===h?0:h,g="function"==typeof u?u({x:p,y:m}):{x:p,y:m};p=g.x,m=g.y;var b=s.hasOwnProperty("x"),v=s.hasOwnProperty("y"),_=oe,y=te,w=window;if(l){var E=Ve(n),A="clientHeight",x="clientWidth";if(E===Ce(n)&&"static"!==He(E=ze(n)).position&&"absolute"===a&&(A="scrollHeight",x="scrollWidth"),o===te||(o===oe||o===ie)&&r===ce)y=ne,m-=(d&&E===w&&w.visualViewport?w.visualViewport.height:E[A])-i.height,m*=c?1:-1;if(o===oe||(o===te||o===ne)&&r===ce)_=ie,p-=(d&&E===w&&w.visualViewport?w.visualViewport.width:E[x])-i.width,p*=c?1:-1}var O,C=Object.assign({position:a},l&&Je),T=!0===u?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ne(n*o)/o||0,y:Ne(i*o)/o||0}}({x:p,y:m},Ce(n)):{x:p,y:m};return p=T.x,m=T.y,c?Object.assign({},C,((O={})[y]=v?"0":"",O[_]=b?"0":"",O.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",O)):Object.assign({},C,((t={})[y]=v?m+"px":"",t[_]=b?p+"px":"",t.transform="",t))}var et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:je(t.placement),variation:Xe(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Ze(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ze(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},tt={passive:!0};var nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=Ce(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach(function(e){e.addEventListener("scroll",n.update,tt)}),a&&c.addEventListener("resize",n.update,tt),function(){r&&l.forEach(function(e){e.removeEventListener("scroll",n.update,tt)}),a&&c.removeEventListener("resize",n.update,tt)}},data:{}},it={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(e){return e.replace(/left|right|bottom|top/g,function(e){return it[e]})}var rt={start:"end",end:"start"};function st(e){return e.replace(/start|end/g,function(e){return rt[e]})}function at(e){var t=Ce(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ct(e){return Be(ze(e)).left+at(e).scrollLeft}function lt(e){var t=He(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ut(e){return["html","body","#document"].indexOf(Oe(e))>=0?e.ownerDocument.body:Le(e)&<(e)?e:ut(Re(e))}function dt(e,t){var n;void 0===t&&(t=[]);var i=ut(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ce(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(dt(Re(s)))}function ft(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pt(e,t,n){return t===ue?ft(function(e,t){var n=Ce(e),i=ze(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=Ie();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ct(e),y:c}}(e,n)):Te(t)?function(e,t){var n=Be(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):ft(function(e){var t,n=ze(e),i=at(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=De(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=De(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ct(e),c=-i.scrollTop;return"rtl"===He(o||n).direction&&(a+=De(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(ze(e)))}function ht(e,t,n,i){var o="clippingParents"===t?function(e){var t=dt(Re(e)),n=["absolute","fixed"].indexOf(He(e).position)>=0&&Le(e)?Ve(e):e;return Te(n)?t.filter(function(e){return Te(e)&&Fe(e,n)&&"body"!==Oe(e)}):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce(function(t,n){var o=pt(e,n,i);return t.top=De(o.top,t.top),t.right=Pe(o.right,t.right),t.bottom=Pe(o.bottom,t.bottom),t.left=De(o.left,t.left),t},pt(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(e){var t,n=e.reference,i=e.element,o=e.placement,r=o?je(o):null,s=o?Xe(o):null,a=n.x+n.width/2-i.width/2,c=n.y+n.height/2-i.height/2;switch(r){case te:t={x:a,y:n.y-i.height};break;case ne:t={x:a,y:n.y+n.height};break;case ie:t={x:n.x+n.width,y:c};break;case oe:t={x:n.x-i.width,y:c};break;default:t={x:n.x,y:n.y}}var l=r?Ye(r):null;if(null!=l){var u="y"===l?"height":"width";switch(s){case ae:t[l]=t[l]-(n[u]/2-i[u]/2);break;case ce:t[l]=t[l]+(n[u]/2-i[u]/2)}}return t}function gt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=void 0===i?e.placement:i,r=n.strategy,s=void 0===r?e.strategy:r,a=n.boundary,c=void 0===a?le:a,l=n.rootBoundary,u=void 0===l?ue:l,d=n.elementContext,f=void 0===d?de:d,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,g=void 0===m?0:m,b=Ke("number"!=typeof g?g:Qe(g,se)),v=f===de?fe:de,_=e.rects.popper,y=e.elements[h?v:f],w=ht(Te(y)?y:y.contextElement||ze(e.elements.popper),c,u,s),E=Be(e.elements.reference),A=mt({reference:E,element:_,placement:o}),x=ft(Object.assign({},_,A)),O=f===de?x:E,C={top:w.top-O.top+b.top,bottom:O.bottom-w.bottom+b.bottom,left:w.left-O.left+b.left,right:O.right-w.right+b.right},T=e.modifiersData.offset;if(f===de&&T){var L=T[o];Object.keys(C).forEach(function(e){var t=[ie,ne].indexOf(e)>=0?1:-1,n=[te,ne].indexOf(e)>=0?"y":"x";C[e]+=L[n]*t})}return C}function bt(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,r=n.rootBoundary,s=n.padding,a=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?he:c,u=Xe(i),d=u?a?pe:pe.filter(function(e){return Xe(e)===u}):se,f=d.filter(function(e){return l.indexOf(e)>=0});0===f.length&&(f=d);var p=f.reduce(function(t,n){return t[n]=gt(e,{placement:n,boundary:o,rootBoundary:r,padding:s})[je(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}var vt={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0===s||s,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,g=t.options.placement,b=je(g),v=c||(b===g||!h?[ot(g)]:function(e){if(je(e)===re)return[];var t=ot(e);return[st(e),t,st(t)]}(g)),_=[g].concat(v).reduce(function(e,n){return e.concat(je(n)===re?bt(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:m}):n)},[]),y=t.rects.reference,w=t.rects.popper,E=new Map,A=!0,x=_[0],O=0;O<_.length;O++){var C=_[O],T=je(C),L=Xe(C)===ae,S=[te,ne].indexOf(T)>=0,k=S?"width":"height",j=gt(t,{placement:C,boundary:u,rootBoundary:d,altBoundary:f,padding:l}),D=S?L?ie:oe:L?ne:te;y[k]>w[k]&&(D=ot(D));var P=ot(D),N=[];if(r&&N.push(j[T]<=0),a&&N.push(j[D]<=0,j[P]<=0),N.every(function(e){return e})){x=C,A=!1;break}E.set(C,N)}if(A)for(var M=function(e){var t=_.find(function(t){var n=E.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return x=t,"break"},I=h?3:1;I>0;I--){if("break"===M(I))break}t.placement!==x&&(t.modifiersData[i]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function _t(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function yt(e){return[te,ie,ne,oe].some(function(t){return e[t]>=0})}var wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=gt(t,{elementContext:"reference"}),a=gt(t,{altBoundary:!0}),c=_t(s,i),l=_t(a,o,r),u=yt(c),d=yt(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}};var Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.offset,r=void 0===o?[0,0]:o,s=he.reduce(function(e,n){return e[n]=function(e,t,n){var i=je(e),o=[oe,te].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,s=r[0],a=r[1];return s=s||0,a=(a||0)*o,[oe,ie].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}(n,t.rects,r),e},{}),a=s[t.placement],c=a.x,l=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=s}};var At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,o=n.mainAxis,r=void 0===o||o,s=n.altAxis,a=void 0!==s&&s,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,f=n.tether,p=void 0===f||f,h=n.tetherOffset,m=void 0===h?0:h,g=gt(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),b=je(t.placement),v=Xe(t.placement),_=!v,y=Ye(b),w="x"===y?"y":"x",E=t.modifiersData.popperOffsets,A=t.rects.reference,x=t.rects.popper,O="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,C="number"==typeof O?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(E){if(r){var S,k="y"===y?te:oe,j="y"===y?ne:ie,D="y"===y?"height":"width",P=E[y],N=P+g[k],M=P-g[j],I=p?-x[D]/2:0,B=v===ae?A[D]:x[D],$=v===ae?-x[D]:-A[D],F=t.elements.arrow,H=p&&F?$e(F):{width:0,height:0},q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=q[k],R=q[j],W=Ue(0,A[D],H[D]),V=_?A[D]/2-I-W-z-C.mainAxis:B-W-z-C.mainAxis,Y=_?-A[D]/2+I+W+R+C.mainAxis:$+W+R+C.mainAxis,U=t.elements.arrow&&Ve(t.elements.arrow),K=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,Q=null!=(S=null==T?void 0:T[y])?S:0,G=P+Y-Q,X=Ue(p?Pe(N,P+V-Q-K):N,P,p?De(M,G):M);E[y]=X,L[y]=X-P}if(a){var J,Z="x"===y?te:oe,ee="x"===y?ne:ie,re=E[w],se="y"===w?"height":"width",ce=re+g[Z],le=re-g[ee],ue=-1!==[te,oe].indexOf(b),de=null!=(J=null==T?void 0:T[w])?J:0,fe=ue?ce:re-A[se]-x[se]-de+C.altAxis,pe=ue?re+A[se]+x[se]-de-C.altAxis:le,he=p&&ue?function(e,t,n){var i=Ue(e,t,n);return i>n?n:i}(fe,re,pe):Ue(p?fe:ce,re,p?pe:le);E[w]=he,L[w]=he-re}t.modifiersData[i]=L}},requiresIfExists:["offset"]};function Ot(e,t,n){void 0===n&&(n=!1);var i,o,r=Le(t),s=Le(t)&&function(e){var t=e.getBoundingClientRect(),n=Ne(t.width)/e.offsetWidth||1,i=Ne(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=ze(t),c=Be(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==Oe(t)||lt(a))&&(l=(i=t)!==Ce(i)&&Le(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:at(i)),Le(t)?((u=Be(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ct(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ct(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}}),i.push(e)}return e.forEach(function(e){t.set(e.name,e)}),e.forEach(function(e){n.has(e.name)||o(e)}),i}var Tt={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.nodeName.toLowerCase();return t.includes(n)?!Pt.has(n)||Boolean(Nt.test(e.nodeValue)):t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};const It={allowList:Dt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Bt={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},$t={entry:"(string|element|function|null)",selector:"(string|element)"};class Ft extends B{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return It}static get DefaultType(){return Bt}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},$t)}_setContent(e,t,n){const i=H.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?r(t)?this._putElementInTemplate(s(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)Mt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return m(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ht=new Set(["sanitize","allowList","sanitizeFn"]),qt="fade",zt="show",Rt=".tooltip-inner",Wt=".modal",Vt="hide.bs.modal",Yt="hover",Ut="focus",Kt="click",Qt={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Gt={allowList:Dt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'t.right||e.clientYt.bottom)&&this.hidePopup()}static initComponents(){this.initBar(),[...On].forEach(e=>{e.onclick=()=>this.showPopup()}),Cn.onclick=e=>this.clickBackdrop(e),Tn.onclick=()=>this.hidePopup(),Cn.oncancel=e=>{e.preventDefault(),this.hidePopup()}}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}var jn={_:!0},Dn={_:48};wn(kn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:yn(En=kn,En,Dn)._});class Pn{static refresh(){tocbot.refresh(this.options)}static init(){tocbot.init(this.options)}}wn(Pn,"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32});const Nn=matchMedia("(min-width: 1200px)");function Mn(e){e.matches?(kn.popupOpened&&kn.hidePopup(),Pn.refresh()):kn.refresh()}const In="mermaid",Bn=Theme.newThemeMap("default","dark");function $n(e){if(e.source===window&&e.data&&e.data.id===Theme.eventId){[...document.getElementsByClassName(In)].forEach(e=>{const t=e.previousSibling.children.item(0).textContent;e.textContent=t,e.removeAttribute("data-processed")});const e=Bn[Theme.resolvedTheme];mermaid.initialize({theme:e}),mermaid.init(null,`.${In}`)}}function Fn(e){const t=e.textContent,n=e.parentElement;n.classList.add("d-none");const i=document.createElement("pre");i.classList.add(In);const o=document.createTextNode(t);i.appendChild(o),n.after(i)}const Hn="dropdown",qn=".bs.dropdown",zn=".data-api",Rn="ArrowUp",Wn="ArrowDown",Vn=`hide${qn}`,Yn=`hidden${qn}`,Un=`show${qn}`,Kn=`shown${qn}`,Qn=`click${qn}${zn}`,Gn=`keydown${qn}${zn}`,Xn=`keyup${qn}${zn}`,Jn="show",Zn='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ei=`${Zn}.${Jn}`,ti=".dropdown-menu",ni=p()?"top-end":"top-start",ii=p()?"top-start":"top-end",oi=p()?"bottom-end":"bottom-start",ri=p()?"bottom-start":"bottom-end",si=p()?"left-start":"right-start",ai=p()?"right-start":"left-start",ci={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},li={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class ui extends ${constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=H.next(this._element,ti)[0]||H.prev(this._element,ti)[0]||H.findOne(ti,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return ci}static get DefaultType(){return li}static get NAME(){return Hn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!D.trigger(this._element,Un,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Jn),this._element.classList.add(Jn),D.trigger(this._element,Kn,e)}}hide(){if(c(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!D.trigger(this._element,Vn,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._popper&&this._popper.destroy(),this._menu.classList.remove(Jn),this._element.classList.remove(Jn),this._element.setAttribute("aria-expanded","false"),I.removeDataAttribute(this._menu,"popper"),D.trigger(this._element,Yn,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!r(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${Hn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===jt)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:r(this._config.reference)?e=s(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=kt(e,this._menu,t)}_isShown(){return this._menu.classList.contains(Jn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return si;if(e.classList.contains("dropstart"))return ai;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?ii:ni:t?ri:oi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(I.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...m(this._config.popperConfig,[void 0,e])}}_selectMenuItem(e){let{key:t,target:n}=e;const i=H.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(e=>a(e));i.length&&((e,t,n,i)=>{const o=e.length;let r=e.indexOf(t);return-1===r?!n&&i?e[o-1]:e[0]:(r+=n?1:-1,i&&(r=(r+o)%o),e[Math.max(0,Math.min(r,o-1))])})(i,n,t===Wn,!i.includes(n)).focus()}static jQueryInterface(e){return this.each(function(){const t=ui.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=H.find(ei);for(const n of t){const t=ui.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),o=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!o||"outside"===t._config.autoClose&&o)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const r={relatedTarget:t._element};"click"===e.type&&(r.clickEvent=e),t._completeHide(r)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[Rn,Wn].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const o=this.matches(Zn)?this:H.prev(this,Zn)[0]||H.next(this,Zn)[0]||H.findOne(Zn,e.delegateTarget.parentNode),r=ui.getOrCreateInstance(o);if(i)return e.stopPropagation(),r.show(),void r._selectMenuItem(e);r._isShown()&&(e.stopPropagation(),r.hide(),o.focus())}}D.on(document,Gn,Zn,ui.dataApiKeydownHandler),D.on(document,Gn,ti,ui.dataApiKeydownHandler),D.on(document,Qn,ui.clearMenus),D.on(document,Xn,ui.clearMenus),D.on(document,Qn,Zn,function(e){e.preventDefault(),ui.getOrCreateInstance(this).toggle()}),h(ui);const di="active",fi=document.querySelector("#mode-toggle + .dropdown-menu"),pi=Theme.isSystemTheme?Theme.Mode.SYSTEM:Theme.resolvedTheme;const hi=document.getElementById("sidebar"),mi=document.getElementById("sidebar-trigger"),gi=document.getElementById("mask");class bi{static toggle(){vi._=yn(bi,this,!yn(bi,this,vi)._),document.body.toggleAttribute("sidebar-display",yn(bi,this,vi)._),hi.classList.toggle("z-2",yn(bi,this,vi)._),gi.classList.toggle("d-none",!yn(bi,this,vi)._)}}var vi={_:!1};const _i=document.getElementById("sidebar-trigger"),yi=document.getElementById("search-trigger"),wi=document.getElementById("search-cancel"),Ei=document.querySelectorAll("#main-wrapper>.container>.row"),Ai=document.getElementById("topbar-title"),xi=document.getElementById("search"),Oi=document.getElementById("search-result-wrapper"),Ci=document.getElementById("search-results"),Ti=document.getElementById("search-input"),Li=document.getElementById("search-hints"),Si="d-block",ki="d-none",ji="input-focus",Di="d-flex";class Pi{static on(){_i.classList.add(ki),Ai.classList.add(ki),yi.classList.add(ki),xi.classList.add(Di),wi.classList.add(Si)}static off(){wi.classList.remove(Si),xi.classList.remove(Di),_i.classList.remove(ki),Ai.classList.remove(ki),yi.classList.remove(ki)}}class Ni{static on(){this.resultVisible||(Oi.classList.remove(ki),Ei.forEach(e=>{e.classList.add(ki)}),this.resultVisible=!0)}static off(){this.resultVisible&&(Ci.innerHTML="",Li.classList.contains(ki)&&Li.classList.remove(ki),Oi.classList.add(ki),Ei.forEach(e=>{e.classList.remove(ki)}),Ti.textContent="",this.resultVisible=!1)}}function Mi(){return wi.classList.contains(Si)}wn(Ni,"resultVisible",!1),function(){const e=document.querySelectorAll("article img");if(0===e.length)return;e.forEach(e=>{e.addEventListener("load",hn)}),document.querySelectorAll('article img[loading="lazy"]').forEach(e=>{e.complete&&pn.call(e,dn)});const t=document.querySelectorAll(`article img[${un}="true"]`);t.length&&t.forEach(e=>{mn.call(e)})}(),function(){if(null===document.querySelector('main>article[data-toc="true"]'))return;Nn.matches?Pn.init():kn.init(),document.getElementById("toc-wrapper").classList.remove("invisible"),Nn.onchange=Mn}(),function(){if(null===document.querySelector(".popup"))return;const e=!(null===document.querySelector(".popup.light")&&null===document.querySelector(".popup.dark"));Theme.isDark&&(vn=bn);let t=GLightbox({selector:`${vn}`});if(e&&Theme.isToggleable){let e=null;window.addEventListener("message",n=>{n.source===window&&n.data&&n.data.id===Theme.eventId&&([t,e]=function(e,t){return vn=vn===gn?bn:gn,null===t&&(t=GLightbox({selector:`${vn}`})),[t,e]}(t,e))})}}(),mi.onclick=gi.onclick=()=>bi.toggle(),dayjs.locale(_n.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${_n.attrTimestamp}]`).forEach(e=>{const t=dayjs.unix(_n.getTimestamp(e)),n=t.format(_n.getDateFormat(e));if(e.textContent=n,e.removeAttribute(_n.attrTimestamp),e.removeAttribute(_n.attrDateFormat),e.hasAttribute("data-bs-toggle")&&"tooltip"===e.getAttribute("data-bs-toggle")){const n=t.format("llll");e.setAttribute("data-bs-title",n)}}),cn(),function(){const e=document.getElementById("copy-link");null!==e&&(e.addEventListener("click",e=>{const t=e.target;rn(t)||navigator.clipboard.writeText(window.location.href).then(()=>{const e=t.getAttribute(nn),n=t.getAttribute(tn);t.setAttribute(nn,n),Jt.getInstance(t).show(),sn(t),setTimeout(()=>{t.setAttribute(nn,e),an(t)},on)})}),e.addEventListener("mouseleave",e=>{Jt.getInstance(e.target).hide()}))}(),yi.addEventListener("click",()=>{Pi.on(),Ni.on(),Ti.focus()}),wi.addEventListener("click",()=>{Pi.off(),Ni.off()}),Ti.addEventListener("focus",()=>{xi.classList.add(ji)}),Ti.addEventListener("focusout",()=>{xi.classList.remove(ji)}),Ti.addEventListener("input",()=>{""===Ti.value?Mi()?Li.classList.remove(ki):Ni.off():(Ni.on(),Mi()&&Li.classList.add(ki))}),function(){if("undefined"==typeof mermaid||"function"!=typeof mermaid.initialize)return;let e={theme:Bn[Theme.resolvedTheme]};[...document.getElementsByClassName("language-mermaid")].forEach(Fn),mermaid.initialize(e),Theme.isToggleable&&window.addEventListener("message",$n)}(),Theme.isToggleable&&(fi.querySelectorAll(".dropdown-item").forEach(e=>{e.dataset.themeMode!==pi||e.classList.add(di)}),fi.addEventListener("click",e=>{const t=e.target.closest(".dropdown-item");if(!t)return;const n=fi.querySelector(`.${di}`);n!==t&&(n.classList.remove(di),t.classList.add(di),Theme.update(t.dataset.themeMode))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")}),e.addEventListener("click",()=>{window.scrollTo({top:0})})}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map(e=>new Jt(e))}();
diff --git a/assets/js/dist/pvreport.min.js b/assets/js/dist/pvreport.min.js
deleted file mode 100644
index f64fa4e0..00000000
--- a/assets/js/dist/pvreport.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Chirpy v5.3.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
- * © 2019 Cotes Chung
- * MIT Licensed
- */
-const getInitStatus=function(){let t=!1;return()=>{var e=t;return t=t||!0,e}}(),PvOpts=function(){function t(e){return $(e).attr("content")}function e(e){e=t(e);return void 0!==e&&!1!==e}return{getProxyMeta(){return t("meta[name=pv-proxy-endpoint]")},getLocalMeta(){return t("meta[name=pv-cache-path]")},hasProxyMeta(){return e("meta[name=pv-proxy-endpoint]")},hasLocalMeta(){return e("meta[name=pv-cache-path]")}}}(),PvStorage=function(){const a={KEY_PV:"pv",KEY_PV_SRC:"pv_src",KEY_CREATION:"pv_created_date"},t={LOCAL:"same-origin",PROXY:"cors"};function r(e){return localStorage.getItem(e)}function o(e,t){localStorage.setItem(e,t)}function n(e,t){o(a.KEY_PV,e),o(a.KEY_PV_SRC,t),o(a.KEY_CREATION,(new Date).toJSON())}return{keysCount(){return Object.keys(a).length},hasCache(){return null!==localStorage.getItem(a.KEY_PV)},getCache(){return JSON.parse(localStorage.getItem(a.KEY_PV))},saveLocalCache(e){n(e,t.LOCAL)},saveProxyCache(e){n(e,t.PROXY)},isExpired(){var e=new Date(r(a.KEY_CREATION));return e.setHours(e.getHours()+1),Date.now()>=e.getTime()},isFromLocal(){return r(a.KEY_PV_SRC)===t.LOCAL},isFromProxy(){return r(a.KEY_PV_SRC)===t.PROXY},newerThan(e){return PvStorage.getCache().totalsForAllResults["ga:pageviews"]>e.totalsForAllResults["ga:pageviews"]},inspectKeys(){if(localStorage.length!==PvStorage.keysCount())localStorage.clear();else for(let e=0;e{PvStorage.saveProxyCache(JSON.stringify(e))},error:(e,t,a)=>{console.log("Failed to load pageviews from proxy server: "+a)}})}function fetchLocalPageviews(t=!1){return fetch(PvOpts.getLocalMeta()).then(e=>e.json()).then(e=>{t&&PvStorage.isFromProxy()&&PvStorage.newerThan(e)||(displayPageviews(e),PvStorage.saveLocalCache(JSON.stringify(e)))})}$(function(){$(".pageviews").length<=0||(PvStorage.inspectKeys(),PvStorage.hasCache()?(displayPageviews(PvStorage.getCache()),PvStorage.isExpired()?PvOpts.hasLocalMeta()?fetchLocalPageviews(!0).then(fetchProxyPageviews):fetchProxyPageviews():PvStorage.isFromLocal()&&fetchProxyPageviews()):PvOpts.hasLocalMeta()?fetchLocalPageviews().then(fetchProxyPageviews):fetchProxyPageviews())});
diff --git a/assets/js/dist/sw.min.js b/assets/js/dist/sw.min.js
new file mode 100644
index 00000000..87e253b4
--- /dev/null
+++ b/assets/js/dist/sw.min.js
@@ -0,0 +1,7 @@
+---
+permalink: /:basename
+---
+/*!
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
+ */
+!function(){"use strict";importScripts("./assets/js/data/swconf.js");const e=swconf.purge,t=swconf.interceptor;self.addEventListener("install",t=>{e||t.waitUntil(caches.open(swconf.cacheName).then(e=>e.addAll(swconf.resources)))}),self.addEventListener("activate",t=>{t.waitUntil(caches.keys().then(t=>Promise.all(t.map(t=>e||t!==swconf.cacheName?caches.delete(t):void 0))))}),self.addEventListener("message",e=>{"SKIP_WAITING"===e.data&&self.skipWaiting()}),self.addEventListener("fetch",s=>{s.request.headers.has("range")||s.respondWith(caches.match(s.request).then(n=>n||fetch(s.request).then(n=>{const r=s.request.url;if(e||"GET"!==s.request.method||!function(e){const s=new URL(e),n=s.pathname;if(!s.protocol.startsWith("http"))return!1;for(const e of t.urlPrefixes)if(s.href.startsWith(e))return!1;for(const e of t.paths)if(n.startsWith(e))return!1;return!0}(r))return n;let a=n.clone();return caches.open(swconf.cacheName).then(e=>{e.put(s.request,a)}),n})))})}();
diff --git a/assets/js/dist/theme.min.js b/assets/js/dist/theme.min.js
new file mode 100644
index 00000000..ddfcef4b
--- /dev/null
+++ b/assets/js/dist/theme.min.js
@@ -0,0 +1,4 @@
+/*!
+ * jekyll-theme-chirpy v7.6.0 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/
+ */
+var Theme=function(){"use strict";function t(t,e,i){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:i;throw new TypeError("Private element is not present on this object")}function e(e,i,s){return s(t(e,i))}function i(t,e,i){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var s=i.call(t,e);if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var s;class r{static get resolvedTheme(){return e(r,this,n)||e(r,this,o)}static get isSystemTheme(){return null===e(r,this,n)}static get isDark(){return this.resolvedTheme===this.Mode.DARK}static newThemeMap(t,e){return{[this.Mode.LIGHT]:t,[this.Mode.DARK]:e}}static init(){if(!this.isToggleable)return void t(r,this,l).call(this);const i=e(r,this,n);i?t(r,this,a).call(this,i,{domPersist:!0}):t(r,this,a).call(this,e(r,this,o)),t(r,this,m)._.addEventListener("change",()=>{e(r,this,n)||(t(r,this,a).call(this,e(r,this,o)),t(r,this,c).call(this))})}static update(i){const s=i===this.Mode.SYSTEM?e(r,this,o):i;s!==this.resolvedTheme&&t(r,this,c).call(this),t(r,this,a).call(this,s,{persist:i!==this.Mode.SYSTEM}),i===this.Mode.SYSTEM&&t(r,this,l).call(this)}}function n(e){return localStorage.getItem(t(s,e,u)._)}function o(t){return e(s,t,h)?t.Mode.DARK:t.Mode.LIGHT}function h(e){return t(s,e,m)._.matches}function a(e){let{persist:i=!1,domPersist:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t(s,this,d)._.dataset.bsTheme=e,i&&localStorage.setItem(t(s,this,u)._,e),(r||i)&&t(s,this,d)._.toggleAttribute("data-theme-persisted",!0)}function l(){localStorage.removeItem(t(s,this,u)._),t(s,this,d)._.toggleAttribute("data-theme-persisted",!1)}function c(){window.postMessage({id:this.eventId},"*")}s=r;var u={_:"theme"};i(r,"Mode",Object.freeze({DARK:"dark",LIGHT:"light",SYSTEM:"system"}));var d={_:document.documentElement},m={_:window.matchMedia("(prefers-color-scheme: dark)")};return i(r,"isToggleable",null===e(s,s,function(e){return t(s,e,d)._.dataset.bsTheme||null})),i(r,"eventId","theme-updated"),r.init(),r}();
diff --git a/assets/js/lightbox.js b/assets/js/lightbox.js
deleted file mode 100644
index c42a2896..00000000
--- a/assets/js/lightbox.js
+++ /dev/null
@@ -1,141 +0,0 @@
-function is_youtubelink(url) {
- var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
- return (url.match(p)) ? RegExp.$1 : false;
-}
-function is_imagelink(url) {
- var p = /([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/i;
- return (url.match(p)) ? true : false;
-}
-function is_vimeolink(url,el) {
- var id = false;
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function() {
- if (xmlhttp.readyState == XMLHttpRequest.DONE) { // XMLHttpRequest.DONE == 4
- if (xmlhttp.status == 200) {
- var response = JSON.parse(xmlhttp.responseText);
- id = response.video_id;
- console.log(id);
- el.classList.add('lightbox-vimeo');
- el.setAttribute('data-id',id);
-
- el.addEventListener("click", function(event) {
- event.preventDefault();
- document.getElementById('lightbox').innerHTML = '›‹0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;)this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t li > .active",gn=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&i.default(this._element).hasClass(dn)||i.default(this._element).hasClass("disabled"))){var e,n,o=i.default(this._element).closest(".nav, .list-group")[0],r=u.getSelectorFromElement(this._element);if(o){var a="UL"===o.nodeName||"OL"===o.nodeName?mn:pn;n=(n=i.default.makeArray(i.default(o).find(a)))[n.length-1]}var s=i.default.Event("hide.bs.tab",{relatedTarget:this._element}),l=i.default.Event("show.bs.tab",{relatedTarget:n});if(n&&i.default(n).trigger(s),i.default(this._element).trigger(l),!l.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,o);var f=function(){var e=i.default.Event("hidden.bs.tab",{relatedTarget:t._element}),o=i.default.Event("shown.bs.tab",{relatedTarget:n});i.default(n).trigger(e),i.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,f):f()}}},e.dispose=function(){i.default.removeData(this._element,un),this._element=null},e._activate=function(t,e,n){var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.default(e).children(pn):i.default(e).find(mn))[0],a=n&&r&&i.default(r).hasClass(cn),s=function(){return o._transitionComplete(t,r,n)};if(r&&a){var l=u.getTransitionDurationFromElement(r);i.default(r).removeClass(hn).one(u.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._transitionComplete=function(t,e,n){if(e){i.default(e).removeClass(dn);var o=i.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&i.default(o).removeClass(dn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}i.default(t).addClass(dn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u.reflow(t),t.classList.contains(cn)&&t.classList.add(hn);var r=t.parentNode;if(r&&"LI"===r.nodeName&&(r=r.parentNode),r&&i.default(r).hasClass("dropdown-menu")){var a=i.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));i.default(s).addClass(dn)}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data(un);if(o||(o=new t(this),n.data(un,o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();i.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),gn._jQueryInterface.call(i.default(this),"show")})),i.default.fn.tab=gn._jQueryInterface,i.default.fn.tab.Constructor=gn,i.default.fn.tab.noConflict=function(){return i.default.fn.tab=fn,gn._jQueryInterface};var _n="bs.toast",vn=i.default.fn.toast,bn="hide",yn="show",En="showing",wn="click.dismiss.bs.toast",Tn={animation:!0,autohide:!0,delay:500},Cn={animation:"boolean",autohide:"boolean",delay:"number"},Sn=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=i.default.Event("show.bs.toast");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove(En),t._element.classList.add(yn),i.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove(bn),u.reflow(this._element),this._element.classList.add(En),this._config.animation){var o=u.getTransitionDurationFromElement(this._element);i.default(this._element).one(u.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},e.hide=function(){if(this._element.classList.contains(yn)){var t=i.default.Event("hide.bs.toast");i.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains(yn)&&this._element.classList.remove(yn),i.default(this._element).off(wn),i.default.removeData(this._element,_n),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},Tn,i.default(this._element).data(),"object"==typeof t&&t?t:{}),u.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;i.default(this._element).on(wn,'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add(bn),i.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove(yn),this._config.animation){var n=u.getTransitionDurationFromElement(this._element);i.default(this._element).one(u.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data(_n);if(o||(o=new t(this,"object"==typeof e&&e),n.data(_n,o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"DefaultType",get:function(){return Cn}},{key:"Default",get:function(){return Tn}}]),t}();i.default.fn.toast=Sn._jQueryInterface,i.default.fn.toast.Constructor=Sn,i.default.fn.toast.noConflict=function(){return i.default.fn.toast=vn,Sn._jQueryInterface},t.Alert=c,t.Button=b,t.Carousel=O,t.Collapse=W,t.Dropdown=le,t.Modal=Se,t.Popover=Je,t.Scrollspy=ln,t.Tab=gn,t.Toast=Sn,t.Tooltip=Ve,t.Util=u,Object.defineProperty(t,"__esModule",{value:!0})}));
-//# sourceMappingURL=bootstrap.bundle.min.js.map
\ No newline at end of file
diff --git a/assets/lib/bootstrap-4.6.1/bootstrap.bundle.min.js.map b/assets/lib/bootstrap-4.6.1/bootstrap.bundle.min.js.map
deleted file mode 100644
index 0c7d8e0e..00000000
--- a/assets/lib/bootstrap-4.6.1/bootstrap.bundle.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/popper.js/dist/esm/popper.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"names":["TRANSITION_END","Util","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","$","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","triggerTransitionEnd","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","fn","jquery","emulateTransitionEnd","duration","_this","this","called","one","setTimeout","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","DATA_KEY","JQUERY_NO_CONFLICT","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_INPUT","SELECTOR_BUTTON","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","NAME","DIRECTION_NEXT","DIRECTION_PREV","EVENT_SLID","SELECTOR_ACTIVE_ITEM","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_extends$1","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","e","move","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","elementInterval","parseInt","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","SELECTOR_DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","isBrowser","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","resolve","then","scheduled","isFunction","functionToCheck","getStyleComputedProperty","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","undefined","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","max","getWindowSizes","height","width","classCallCheck","instance","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","_extends","assign","source","getClientRect","offsets","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","sort","a","b","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","ends","prop","findIndex","cur","forEach","console","warn","enabled","update","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","attachToScrollParents","callback","scrollParents","isBody","addEventListener","passive","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","concat","reverse","Defaults","shift","basePlacement","shiftvariation","_data$offsets","isVertical","shiftOffsets","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","parseOffset","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Popper","requestAnimationFrame","Utils","global","PopperUtils","Popper$1","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","CLASS_NAME_DISABLED","CLASS_NAME_MENURIGHT","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","SELECTOR_MENU","boundary","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","noop","hideEvent","stopPropagation","constructor","_getPlacement","$parentDropdown","_getOffset","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","CLASS_NAME_OPEN","CLASS_NAME_FADE","CLASS_NAME_STATIC","EVENT_SHOW","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEDOWN_DISMISS","SELECTOR_FIXED_CONTENT","backdrop","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","appendChild","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","elements","margin","scrollDiv","scrollbarWidth","_this11","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","HOVER_STATE_SHOW","HOVER_STATE_OUT","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","template","title","delay","container","fallbackPlacement","customClass","sanitize","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","content","text","empty","append","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","$tip","tabClass","join","popperData","initConfigAnimation","Popover","_getContent","METHOD_POSITION","SELECTOR_NAV_LIST_GROUP","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","pageYOffset","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","parents","SELECTOR_NAV_LINKS","scrollSpys","$spy","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","CLASS_NAME_HIDE","CLASS_NAME_SHOWING","autohide","Toast","_clearTimeout","_close"],"mappings":";;;;;s3BAaA,IAAMA,EAAiB,oBAoDjBC,EAAO,CACXD,eAAgB,kBAEhBE,OAHW,SAGJC,GACL,GAEEA,MAzDU,IAyDGC,KAAKC,gBACXC,SAASC,eAAeJ,IAEjC,OAAOA,GAGTK,uBAZW,SAYYC,GACrB,IAAIC,EAAWD,EAAQE,aAAa,eAEpC,IAAKD,GAAyB,MAAbA,EAAkB,CACjC,IAAME,EAAWH,EAAQE,aAAa,QACtCD,EAAWE,GAAyB,MAAbA,EAAmBA,EAASC,OAAS,GAG9D,IACE,OAAOP,SAASQ,cAAcJ,GAAYA,EAAW,KACrD,MAAOK,GACP,OAAO,OAIXC,iCA3BW,SA2BsBP,GAC/B,IAAKA,EACH,OAAO,EAIT,IAAIQ,EAAqBC,EAAAA,QAAET,GAASU,IAAI,uBACpCC,EAAkBF,EAAAA,QAAET,GAASU,IAAI,oBAE/BE,EAA0BC,WAAWL,GACrCM,EAAuBD,WAAWF,GAGxC,OAAKC,GAA4BE,GAKjCN,EAAqBA,EAAmBO,MAAM,KAAK,GACnDJ,EAAkBA,EAAgBI,MAAM,KAAK,GAhGjB,KAkGpBF,WAAWL,GAAsBK,WAAWF,KAP3C,GAUXK,OAnDW,SAmDJhB,GACL,OAAOA,EAAQiB,cAGjBC,qBAvDW,SAuDUlB,GACnBS,EAAAA,QAAET,GAASmB,QAAQ5B,IAGrB6B,sBA3DW,WA4DT,OAAOC,QAAQ9B,IAGjB+B,UA/DW,SA+DDC,GACR,OAAQA,EAAI,IAAMA,GAAKC,UAGzBC,gBAnEW,SAmEKC,EAAeC,EAAQC,GACrC,IAAK,IAAMC,KAAYD,EACrB,GAAIE,OAAOC,UAAUC,eAAeC,KAAKL,EAAaC,GAAW,CAC/D,IAAMK,EAAgBN,EAAYC,GAC5BM,EAAQR,EAAOE,GACfO,EAAYD,GAAS3C,EAAK8B,UAAUa,GACxC,UAvHI,QADEZ,EAwHaY,IAvHQ,oBAARZ,EACzB,GAAUA,EAGL,GAAGc,SAASJ,KAAKV,GAAKe,MAAM,eAAe,GAAGC,cAqH/C,IAAK,IAAIC,OAAON,GAAeO,KAAKL,GAClC,MAAM,IAAIM,MACLhB,EAAciB,cAAdjB,aACQG,EADX,oBACuCO,EADpCV,wBAEmBQ,EAFtB,MA5HZ,IAAgBX,GAoIdqB,eArFW,SAqFI5C,GACb,IAAKH,SAASgD,gBAAgBC,aAC5B,OAAO,KAIT,GAAmC,mBAAxB9C,EAAQ+C,YAA4B,CAC7C,IAAMC,EAAOhD,EAAQ+C,cACrB,OAAOC,aAAgBC,WAAaD,EAAO,KAG7C,OAAIhD,aAAmBiD,WACdjD,EAIJA,EAAQkD,WAIN1D,EAAKoD,eAAe5C,EAAQkD,YAH1B,MAMXC,gBA5GW,WA6GT,GAAiB,oBAAN1C,EAAAA,QACT,MAAM,IAAI2C,UAAU,kGAGtB,IAAMC,EAAU5C,EAAAA,QAAE6C,GAAGC,OAAOxC,MAAM,KAAK,GAAGA,MAAM,KAOhD,GAAIsC,EAAQ,GALI,GAKYA,EAAQ,GAJnB,GAFA,IAMoCA,EAAQ,IAJ5C,IAI+DA,EAAQ,IAAmBA,EAAQ,GAHlG,GAGmHA,EAAQ,IAF3H,EAGf,MAAM,IAAIX,MAAM,iFAKtBlD,EAAK2D,kBAtIH1C,EAAAA,QAAE6C,GAAGE,qBAjBP,SAA+BC,GAAU,IAAAC,EAAAC,KACnCC,GAAS,EAYb,OAVAnD,EAAAA,QAAEkD,MAAME,IAAIrE,EAAKD,gBAAgB,WAC/BqE,GAAS,KAGXE,YAAW,WACJF,GACHpE,EAAK0B,qBAAqBwC,KAE3BD,GAEIE,MAKPlD,EAAAA,QAAEsD,MAAMC,QAAQxE,EAAKD,gBA/Bd,CACL0E,SAAU1E,EACV2E,aAAc3E,EACd4E,OAHK,SAGEJ,GACL,GAAItD,EAAAA,QAAEsD,EAAMK,QAAQC,GAAGV,MACrB,OAAOI,EAAMO,UAAUC,QAAQC,MAAMb,KAAMc,aClBnD,IAEMC,EAAW,WAGXC,EAAqBlE,EAAAA,QAAE6C,GAAF,MAgBrBsB,EAAAA,WACJ,SAAAA,EAAY5E,GACV2D,KAAKkB,SAAW7E,6BASlB8E,MAAA,SAAM9E,GACJ,IAAI+E,EAAcpB,KAAKkB,SACnB7E,IACF+E,EAAcpB,KAAKqB,gBAAgBhF,IAGjB2D,KAAKsB,mBAAmBF,GAE5BG,sBAIhBvB,KAAKwB,eAAeJ,MAGtBK,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAC5Bf,KAAKkB,SAAW,QAIlBG,gBAAA,SAAgBhF,GACd,IAAMC,EAAWT,EAAKO,uBAAuBC,GACzCsF,GAAS,EAUb,OARIrF,IACFqF,EAASzF,SAASQ,cAAcJ,IAG7BqF,IACHA,EAAS7E,EAAAA,QAAET,GAASuF,QAAX,UAA2C,IAG/CD,KAGTL,mBAAA,SAAmBjF,GACjB,IAAMwF,EAAa/E,EAAAA,QAAEgF,MA1DR,kBA6Db,OADAhF,EAAAA,QAAET,GAASmB,QAAQqE,GACZA,KAGTL,eAAA,SAAenF,GAAS,IAAA0D,EAAAC,KAGtB,GAFAlD,EAAAA,QAAET,GAAS0F,YAnES,QAqEfjF,EAAAA,QAAET,GAAS2F,SAtEI,QAsEpB,CAKA,IAAMnF,EAAqBhB,EAAKe,iCAAiCP,GAEjES,EAAAA,QAAET,GACC6D,IAAIrE,EAAKD,gBAAgB,SAAAwE,GAAK,OAAIL,EAAKkC,gBAAgB5F,EAAS+D,MAChEP,qBAAqBhD,QARtBmD,KAAKiC,gBAAgB5F,MAWzB4F,gBAAA,SAAgB5F,GACdS,EAAAA,QAAET,GACC6F,SACA1E,QAjFW,mBAkFX2E,YAIEC,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,GAEpBwB,IACHA,EAAO,IAAItB,EAAMjB,MACjBsC,EAASC,KAAKxB,EAAUwB,IAGX,UAAXvE,GACFuE,EAAKvE,GAAQgC,YAKZwC,eAAP,SAAsBC,GACpB,OAAO,SAAUrC,GACXA,GACFA,EAAMsC,iBAGRD,EAActB,MAAMnB,qCA7FxB,WACE,MA3BY,cAoBViB,GA4GNnE,EAAAA,QAAEZ,UAAUyG,GApHc,0BAED,yBAqHvB1B,EAAMuB,eAAe,IAAIvB,IAO3BnE,EAAAA,QAAE6C,GAAF,MAAasB,EAAMmB,iBACnBtF,EAAAA,QAAE6C,GAAF,MAAWiD,YAAc3B,EACzBnE,EAAAA,QAAE6C,GAAF,MAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,MAAaqB,EACNC,EAAMmB,kBChJf,IAEMrB,EAAW,YAGXC,EAAqBlE,EAAAA,QAAE6C,GAAF,OAErBmD,EAAoB,SASpBC,EAA8B,0BAI9BC,EAAiB,6BAEjBC,EAAkB,OAMlBC,EAAAA,WACJ,SAAAA,EAAY7G,GACV2D,KAAKkB,SAAW7E,EAChB2D,KAAKmD,0BAA2B,6BASlCC,OAAA,WACE,IAAIC,GAAqB,EACrBC,GAAiB,EACflC,EAActE,EAAAA,QAAEkD,KAAKkB,UAAUU,QA1BX,2BA0B0C,GAEpE,GAAIR,EAAa,CACf,IAAMmC,EAAQvD,KAAKkB,SAASxE,cAAcsG,GAE1C,GAAIO,EAAO,CACT,GAAmB,UAAfA,EAAMC,KACR,GAAID,EAAME,SAAWzD,KAAKkB,SAASwC,UAAUC,SAASb,GACpDO,GAAqB,MAChB,CACL,IAAMO,EAAgBxC,EAAY1E,cAhCtB,WAkCRkH,GACF9G,EAAAA,QAAE8G,GAAe7B,YAAYe,GAK/BO,IAEiB,aAAfE,EAAMC,MAAsC,UAAfD,EAAMC,OACrCD,EAAME,SAAWzD,KAAKkB,SAASwC,UAAUC,SAASb,IAG/C9C,KAAKmD,0BACRrG,EAAAA,QAAEyG,GAAO/F,QAAQ,WAIrB+F,EAAMM,QACNP,GAAiB,GAIftD,KAAKkB,SAAS4C,aAAa,aAAe9D,KAAKkB,SAASwC,UAAUC,SAAS,cAC3EL,GACFtD,KAAKkB,SAAS6C,aAAa,gBAAiB/D,KAAKkB,SAASwC,UAAUC,SAASb,IAG3EO,GACFvG,EAAAA,QAAEkD,KAAKkB,UAAU8C,YAAYlB,OAKnCrB,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAC5Bf,KAAKkB,SAAW,QAIXkB,iBAAP,SAAwBpE,EAAQiG,GAC9B,OAAOjE,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,GAEpBwB,IACHA,EAAO,IAAIW,EAAOlD,MAClBsC,EAASC,KAAKxB,EAAUwB,IAG1BA,EAAKY,yBAA2Bc,EAEjB,WAAXjG,GACFuE,EAAKvE,sCAxEX,WACE,MAnCY,cA2BVkF,GAyFNpG,EAAAA,QAAEZ,UACCyG,GA3GuB,2BA2GEI,GAA6B,SAAA3C,GACrD,IAAI8D,EAAS9D,EAAMK,OACb0D,EAAgBD,EAMtB,GAJKpH,EAAAA,QAAEoH,GAAQlC,SAlHO,SAmHpBkC,EAASpH,EAAAA,QAAEoH,GAAQtC,QAAQqB,GAAiB,KAGzCiB,GAAUA,EAAOJ,aAAa,aAAeI,EAAOR,UAAUC,SAAS,YAC1EvD,EAAMsC,qBACD,CACL,IAAM0B,EAAWF,EAAOxH,cAAcsG,GAEtC,GAAIoB,IAAaA,EAASN,aAAa,aAAeM,EAASV,UAAUC,SAAS,aAEhF,YADAvD,EAAMsC,iBAIsB,UAA1ByB,EAAcE,SAA0C,UAAnBH,EAAOG,SAC9CnB,EAAOd,iBAAiB9D,KAAKxB,EAAAA,QAAEoH,GAAS,SAAoC,UAA1BC,EAAcE,aAIrE1B,GAjI+B,mDAiIDI,GAA6B,SAAA3C,GAC1D,IAAM8D,EAASpH,EAAAA,QAAEsD,EAAMK,QAAQmB,QAAQqB,GAAiB,GACxDnG,EAAAA,QAAEoH,GAAQF,YAtIW,QAsImB,eAAelF,KAAKsB,EAAMoD,UAGtE1G,EAAAA,QAAEwH,QAAQ3B,GApIe,2BAoIS,WAKhC,IADA,IAAI4B,EAAU,GAAGC,MAAMlG,KAAKpC,SAASuI,iBAnID,iCAoI3BC,EAAI,EAAGC,EAAMJ,EAAQK,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAMR,EAASK,EAAQG,GACjBnB,EAAQW,EAAOxH,cAAcsG,GAC/BO,EAAME,SAAWF,EAAMO,aAAa,WACtCI,EAAOR,UAAUmB,IAAI/B,GAErBoB,EAAOR,UAAUvB,OAAOW,GAM5B,IAAK,IAAI4B,EAAI,EAAGC,GADhBJ,EAAU,GAAGC,MAAMlG,KAAKpC,SAASuI,iBAhJN,4BAiJGG,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAMR,EAASK,EAAQG,GACqB,SAAxCR,EAAO3H,aAAa,gBACtB2H,EAAOR,UAAUmB,IAAI/B,GAErBoB,EAAOR,UAAUvB,OAAOW,OAS9BhG,EAAAA,QAAE6C,GAAF,OAAauD,EAAOd,iBACpBtF,EAAAA,QAAE6C,GAAF,OAAWiD,YAAcM,EACzBpG,EAAAA,QAAE6C,GAAF,OAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,OAAaqB,EACNkC,EAAOd,kBCpLhB,IAAM0C,EAAO,WAEP/D,EAAW,cAGXC,EAAqBlE,EAAAA,QAAE6C,GAAGmF,GAO1BhC,EAAoB,SAQpBiC,EAAiB,OACjBC,EAAiB,OAKjBC,EAAU,mBAcVC,EAAuB,wBAQvBC,EAAU,CACdC,SAAU,IACVC,UAAU,EACVC,OAAO,EACPC,MAAO,QACPC,MAAM,EACNC,OAAO,GAGHC,EAAc,CAClBN,SAAU,mBACVC,SAAU,UACVC,MAAO,mBACPC,MAAO,mBACPC,KAAM,UACNC,MAAO,WAGHE,EAAc,CAClBC,MAAO,QACPC,IAAK,OAODC,EAAAA,WACJ,SAAAA,EAAYzJ,EAAS2B,GACnBgC,KAAK+F,OAAS,KACd/F,KAAKgG,UAAY,KACjBhG,KAAKiG,eAAiB,KACtBjG,KAAKkG,WAAY,EACjBlG,KAAKmG,YAAa,EAClBnG,KAAKoG,aAAe,KACpBpG,KAAKqG,YAAc,EACnBrG,KAAKsG,YAAc,EAEnBtG,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKkB,SAAW7E,EAChB2D,KAAKyG,mBAAqBzG,KAAKkB,SAASxE,cA5ChB,wBA6CxBsD,KAAK0G,gBAAkB,iBAAkBxK,SAASgD,iBAAmByH,UAAUC,eAAiB,EAChG5G,KAAK6G,cAAgBnJ,QAAQ4G,OAAOwC,cAAgBxC,OAAOyC,gBAE3D/G,KAAKgH,gDAaPC,KAAA,WACOjH,KAAKmG,YACRnG,KAAKkH,OAAOnC,MAIhBoC,gBAAA,WACE,IAAM7E,EAAWxF,EAAAA,QAAEkD,KAAKkB,WAGnBhF,SAASkL,QACX9E,EAAS5B,GAAG,aAA8C,WAA/B4B,EAASvF,IAAI,eACzCiD,KAAKiH,UAITI,KAAA,WACOrH,KAAKmG,YACRnG,KAAKkH,OAAOlC,MAIhBO,MAAA,SAAMnF,GACCA,IACHJ,KAAKkG,WAAY,GAGflG,KAAKkB,SAASxE,cAzFK,8CA0FrBb,EAAK0B,qBAAqByC,KAAKkB,UAC/BlB,KAAKsH,OAAM,IAGbC,cAAcvH,KAAKgG,WACnBhG,KAAKgG,UAAY,QAGnBsB,MAAA,SAAMlH,GACCA,IACHJ,KAAKkG,WAAY,GAGflG,KAAKgG,YACPuB,cAAcvH,KAAKgG,WACnBhG,KAAKgG,UAAY,MAGfhG,KAAKuG,QAAQnB,WAAapF,KAAKkG,YACjClG,KAAKwH,kBAELxH,KAAKgG,UAAYyB,aACdvL,SAASwL,gBAAkB1H,KAAKmH,gBAAkBnH,KAAKiH,MAAMU,KAAK3H,MACnEA,KAAKuG,QAAQnB,cAKnBwC,GAAA,SAAGC,GAAO,IAAA9H,EAAAC,KACRA,KAAKiG,eAAiBjG,KAAKkB,SAASxE,cAAcwI,GAElD,IAAM4C,EAAc9H,KAAK+H,cAAc/H,KAAKiG,gBAE5C,KAAI4B,EAAQ7H,KAAK+F,OAAOnB,OAAS,GAAKiD,EAAQ,GAI9C,GAAI7H,KAAKmG,WACPrJ,EAAAA,QAAEkD,KAAKkB,UAAUhB,IAAI+E,GAAY,WAAA,OAAMlF,EAAK6H,GAAGC,UADjD,CAKA,GAAIC,IAAgBD,EAGlB,OAFA7H,KAAKuF,aACLvF,KAAKsH,QAIP,IAAMU,EAAYH,EAAQC,EACxB/C,EACAC,EAEFhF,KAAKkH,OAAOc,EAAWhI,KAAK+F,OAAO8B,QAGrCpG,QAAA,WACE3E,EAAAA,QAAEkD,KAAKkB,UAAU+G,IA1LN,gBA2LXnL,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAE5Bf,KAAK+F,OAAS,KACd/F,KAAKuG,QAAU,KACfvG,KAAKkB,SAAW,KAChBlB,KAAKgG,UAAY,KACjBhG,KAAKkG,UAAY,KACjBlG,KAAKmG,WAAa,KAClBnG,KAAKiG,eAAiB,KACtBjG,KAAKyG,mBAAqB,QAI5BD,WAAA,SAAWxI,GAMT,OALAA,EAAMkK,EAAA,GACD/C,EACAnH,GAELnC,EAAKiC,gBAAgBgH,EAAM9G,EAAQ0H,GAC5B1H,KAGTmK,aAAA,WACE,IAAMC,EAAYpM,KAAKqM,IAAIrI,KAAKsG,aAEhC,KAAI8B,GA9MgB,IA8MpB,CAIA,IAAMJ,EAAYI,EAAYpI,KAAKsG,YAEnCtG,KAAKsG,YAAc,EAGf0B,EAAY,GACdhI,KAAKqH,OAIHW,EAAY,GACdhI,KAAKiH,WAITD,mBAAA,WAAqB,IAAAsB,EAAAtI,KACfA,KAAKuG,QAAQlB,UACfvI,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjNJ,uBAiNsB,SAAAvC,GAAK,OAAIkI,EAAKC,SAASnI,MAGjC,UAAvBJ,KAAKuG,QAAQhB,OACfzI,EAAAA,QAAEkD,KAAKkB,UACJyB,GArNa,0BAqNQ,SAAAvC,GAAK,OAAIkI,EAAK/C,MAAMnF,MACzCuC,GArNa,0BAqNQ,SAAAvC,GAAK,OAAIkI,EAAKhB,MAAMlH,MAG1CJ,KAAKuG,QAAQd,OACfzF,KAAKwI,6BAITA,wBAAA,WAA0B,IAAAC,EAAAzI,KACxB,GAAKA,KAAK0G,gBAAV,CAIA,IAAMgC,EAAQ,SAAAtI,GACRqI,EAAK5B,eAAiBlB,EAAYvF,EAAMuI,cAAcC,YAAY5J,eACpEyJ,EAAKpC,YAAcjG,EAAMuI,cAAcE,QAC7BJ,EAAK5B,gBACf4B,EAAKpC,YAAcjG,EAAMuI,cAAcG,QAAQ,GAAGD,UAWhDE,EAAM,SAAA3I,GACNqI,EAAK5B,eAAiBlB,EAAYvF,EAAMuI,cAAcC,YAAY5J,iBACpEyJ,EAAKnC,YAAclG,EAAMuI,cAAcE,QAAUJ,EAAKpC,aAGxDoC,EAAKN,eACsB,UAAvBM,EAAKlC,QAAQhB,QASfkD,EAAKlD,QACDkD,EAAKrC,cACP4C,aAAaP,EAAKrC,cAGpBqC,EAAKrC,aAAejG,YAAW,SAAAC,GAAK,OAAIqI,EAAKnB,MAAMlH,KA1R5B,IA0R6DqI,EAAKlC,QAAQnB,YAIrGtI,EAAAA,QAAEkD,KAAKkB,SAASuD,iBA5PM,uBA6PnB9B,GApQe,yBAoQM,SAAAsG,GAAC,OAAIA,EAAEvG,oBAE3B1C,KAAK6G,eACP/J,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAzQA,2BAyQsB,SAAAvC,GAAK,OAAIsI,EAAMtI,MACtDtD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAzQF,yBAyQsB,SAAAvC,GAAK,OAAI2I,EAAI3I,MAElDJ,KAAKkB,SAASwC,UAAUmB,IA3RG,mBA6R3B/H,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjRD,0BAiRsB,SAAAvC,GAAK,OAAIsI,EAAMtI,MACrDtD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjRF,yBAiRsB,SAAAvC,GAAK,OAzC/B,SAAAA,GAEXqI,EAAKnC,YAAclG,EAAMuI,cAAcG,SAAW1I,EAAMuI,cAAcG,QAAQlE,OAAS,EACrF,EACAxE,EAAMuI,cAAcG,QAAQ,GAAGD,QAAUJ,EAAKpC,YAqCF6C,CAAK9I,MACnDtD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjRH,wBAiRsB,SAAAvC,GAAK,OAAI2I,EAAI3I,WAIrDmI,SAAA,SAASnI,GACP,IAAI,kBAAkBtB,KAAKsB,EAAMK,OAAO4D,SAIxC,OAAQjE,EAAM+I,OACZ,KArTqB,GAsTnB/I,EAAMsC,iBACN1C,KAAKqH,OACL,MACF,KAxTsB,GAyTpBjH,EAAMsC,iBACN1C,KAAKiH,WAMXc,cAAA,SAAc1L,GAIZ,OAHA2D,KAAK+F,OAAS1J,GAAWA,EAAQkD,WAC/B,GAAGiF,MAAMlG,KAAKjC,EAAQkD,WAAWkF,iBAhSjB,mBAiShB,GACKzE,KAAK+F,OAAOqD,QAAQ/M,MAG7BgN,oBAAA,SAAoBrB,EAAWpE,GAC7B,IAAM0F,EAAkBtB,IAAcjD,EAChCwE,EAAkBvB,IAAchD,EAChC8C,EAAc9H,KAAK+H,cAAcnE,GACjC4F,EAAgBxJ,KAAK+F,OAAOnB,OAAS,EAI3C,IAHsB2E,GAAmC,IAAhBzB,GACjBwB,GAAmBxB,IAAgB0B,KAErCxJ,KAAKuG,QAAQf,KACjC,OAAO5B,EAGT,IACM6F,GAAa3B,GADLE,IAAchD,GAAkB,EAAI,IACRhF,KAAK+F,OAAOnB,OAEtD,OAAsB,IAAf6E,EACLzJ,KAAK+F,OAAO/F,KAAK+F,OAAOnB,OAAS,GAAK5E,KAAK+F,OAAO0D,MAGtDC,mBAAA,SAAmBC,EAAeC,GAChC,IAAMC,EAAc7J,KAAK+H,cAAc4B,GACjCG,EAAY9J,KAAK+H,cAAc/H,KAAKkB,SAASxE,cAAcwI,IAC3D6E,EAAajN,EAAAA,QAAEgF,MA3UR,oBA2U2B,CACtC6H,cAAAA,EACA3B,UAAW4B,EACXI,KAAMF,EACNlC,GAAIiC,IAKN,OAFA/M,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQuM,GAElBA,KAGTE,2BAAA,SAA2B5N,GACzB,GAAI2D,KAAKyG,mBAAoB,CAC3B,IAAMyD,EAAa,GAAG1F,MAAMlG,KAAK0B,KAAKyG,mBAAmBhC,iBA3UvC,YA4UlB3H,EAAAA,QAAEoN,GAAYnI,YAAYe,GAE1B,IAAMqH,EAAgBnK,KAAKyG,mBAAmB2D,SAC5CpK,KAAK+H,cAAc1L,IAGjB8N,GACFrN,EAAAA,QAAEqN,GAAeE,SAASvH,OAKhC0E,gBAAA,WACE,IAAMnL,EAAU2D,KAAKiG,gBAAkBjG,KAAKkB,SAASxE,cAAcwI,GAEnE,GAAK7I,EAAL,CAIA,IAAMiO,EAAkBC,SAASlO,EAAQE,aAAa,iBAAkB,IAEpE+N,GACFtK,KAAKuG,QAAQiE,gBAAkBxK,KAAKuG,QAAQiE,iBAAmBxK,KAAKuG,QAAQnB,SAC5EpF,KAAKuG,QAAQnB,SAAWkF,GAExBtK,KAAKuG,QAAQnB,SAAWpF,KAAKuG,QAAQiE,iBAAmBxK,KAAKuG,QAAQnB,aAIzE8B,OAAA,SAAOc,EAAW3L,GAAS,IAQrBoO,EACAC,EACAd,EAVqBe,EAAA3K,KACnB4D,EAAgB5D,KAAKkB,SAASxE,cAAcwI,GAC5C0F,EAAqB5K,KAAK+H,cAAcnE,GACxCiH,EAAcxO,GAAWuH,GAC7B5D,KAAKqJ,oBAAoBrB,EAAWpE,GAChCkH,EAAmB9K,KAAK+H,cAAc8C,GACtCE,EAAYrN,QAAQsC,KAAKgG,WAgB/B,GAVIgC,IAAcjD,GAChB0F,EA9YkB,qBA+YlBC,EA9YkB,qBA+YlBd,EAzYiB,SA2YjBa,EAnZmB,sBAoZnBC,EAjZkB,qBAkZlBd,EA5YkB,SA+YhBiB,GAAe/N,EAAAA,QAAE+N,GAAa7I,SAASc,GACzC9C,KAAKmG,YAAa,OAKpB,IADmBnG,KAAK0J,mBAAmBmB,EAAajB,GACzCrI,sBAIVqC,GAAkBiH,EAAvB,CAKA7K,KAAKmG,YAAa,EAEd4E,GACF/K,KAAKuF,QAGPvF,KAAKiK,2BAA2BY,GAChC7K,KAAKiG,eAAiB4E,EAEtB,IAAMG,EAAYlO,EAAAA,QAAEgF,MAAMmD,EAAY,CACpC0E,cAAekB,EACf7C,UAAW4B,EACXI,KAAMY,EACNhD,GAAIkD,IAGN,GAAIhO,EAAAA,QAAEkD,KAAKkB,UAAUc,SAxbA,SAwb4B,CAC/ClF,EAAAA,QAAE+N,GAAaR,SAASK,GAExB7O,EAAKwB,OAAOwN,GAEZ/N,EAAAA,QAAE8G,GAAeyG,SAASI,GAC1B3N,EAAAA,QAAE+N,GAAaR,SAASI,GAExB,IAAM5N,EAAqBhB,EAAKe,iCAAiCgH,GAEjE9G,EAAAA,QAAE8G,GACC1D,IAAIrE,EAAKD,gBAAgB,WACxBkB,EAAAA,QAAE+N,GACC9I,YAAe0I,EADlB,IAC0CC,GACvCL,SAASvH,GAEZhG,EAAAA,QAAE8G,GAAe7B,YAAee,UAAqB4H,EAArD,IAAuED,GAEvEE,EAAKxE,YAAa,EAElBhG,YAAW,WAAA,OAAMrD,EAAAA,QAAE6N,EAAKzJ,UAAU1D,QAAQwN,KAAY,MAEvDnL,qBAAqBhD,QAExBC,EAAAA,QAAE8G,GAAe7B,YAAYe,GAC7BhG,EAAAA,QAAE+N,GAAaR,SAASvH,GAExB9C,KAAKmG,YAAa,EAClBrJ,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQwN,GAGvBD,GACF/K,KAAKsH,YAKFlF,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,GACpBwF,EAAO2B,EAAA,GACN/C,EACArI,EAAAA,QAAEkD,MAAMuC,QAGS,iBAAXvE,IACTuI,EAAO2B,EAAA,GACF3B,EACAvI,IAIP,IAAMiN,EAA2B,iBAAXjN,EAAsBA,EAASuI,EAAQjB,MAO7D,GALK/C,IACHA,EAAO,IAAIuD,EAAS9F,KAAMuG,GAC1BzJ,EAAAA,QAAEkD,MAAMuC,KAAKxB,EAAUwB,IAGH,iBAAXvE,EACTuE,EAAKqF,GAAG5J,QACH,GAAsB,iBAAXiN,EAAqB,CACrC,GAA4B,oBAAjB1I,EAAK0I,GACd,MAAM,IAAIxL,UAAJ,oBAAkCwL,EAAlC,KAGR1I,EAAK0I,UACI1E,EAAQnB,UAAYmB,EAAQ2E,OACrC3I,EAAKgD,QACLhD,EAAK+E,eAKJ6D,qBAAP,SAA4B/K,GAC1B,IAAM9D,EAAWT,EAAKO,uBAAuB4D,MAE7C,GAAK1D,EAAL,CAIA,IAAMmE,EAAS3D,EAAAA,QAAER,GAAU,GAE3B,GAAKmE,GAAW3D,EAAAA,QAAE2D,GAAQuB,SA7gBF,YA6gBxB,CAIA,IAAMhE,EAAMkK,EAAA,GACPpL,EAAAA,QAAE2D,GAAQ8B,OACVzF,EAAAA,QAAEkD,MAAMuC,QAEP6I,EAAapL,KAAKzD,aAAa,iBAEjC6O,IACFpN,EAAOoH,UAAW,GAGpBU,EAAS1D,iBAAiB9D,KAAKxB,EAAAA,QAAE2D,GAASzC,GAEtCoN,GACFtO,EAAAA,QAAE2D,GAAQ8B,KAAKxB,GAAU6G,GAAGwD,GAG9BhL,EAAMsC,iDA5cR,WACE,MAhGY,6BAmGd,WACE,OAAOyC,QA1BLW,GAyeNhJ,EAAAA,QAAEZ,UAAUyG,GA/gBc,6BAQE,gCAugB8BmD,EAASqF,sBAEnErO,EAAAA,QAAEwH,QAAQ3B,GAlhBe,6BAkhBS,WAEhC,IADA,IAAM0I,EAAY,GAAG7G,MAAMlG,KAAKpC,SAASuI,iBAzgBhB,2BA0gBhBC,EAAI,EAAGC,EAAM0G,EAAUzG,OAAQF,EAAIC,EAAKD,IAAK,CACpD,IAAM4G,EAAYxO,EAAAA,QAAEuO,EAAU3G,IAC9BoB,EAAS1D,iBAAiB9D,KAAKgN,EAAWA,EAAU/I,YAQxDzF,EAAAA,QAAE6C,GAAGmF,GAAQgB,EAAS1D,iBACtBtF,EAAAA,QAAE6C,GAAGmF,GAAMlC,YAAckD,EACzBhJ,EAAAA,QAAE6C,GAAGmF,GAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,GAAQ9D,EACN8E,EAAS1D,kBCtkBlB,IAAM0C,EAAO,WAEP/D,EAAW,cAGXC,EAAqBlE,EAAAA,QAAE6C,GAAGmF,GAE1ByG,EAAkB,OAClBC,EAAsB,WACtBC,EAAwB,aACxBC,EAAuB,YAEvBC,EAAkB,QAUlBC,EAAuB,2BAEvBzG,EAAU,CACd/B,QAAQ,EACRzB,OAAQ,IAGJ+D,EAAc,CAClBtC,OAAQ,UACRzB,OAAQ,oBAOJkK,EAAAA,WACJ,SAAAA,EAAYxP,EAAS2B,GACnBgC,KAAK8L,kBAAmB,EACxB9L,KAAKkB,SAAW7E,EAChB2D,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAK+L,cAAgB,GAAGvH,MAAMlG,KAAKpC,SAASuI,iBAC1C,mCAAmCpI,EAAQ2P,GAA3C,6CAC0C3P,EAAQ2P,GADlD,OAKF,IADA,IAAMC,EAAa,GAAGzH,MAAMlG,KAAKpC,SAASuI,iBAAiBmH,IAClDlH,EAAI,EAAGC,EAAMsH,EAAWrH,OAAQF,EAAIC,EAAKD,IAAK,CACrD,IAAMwH,EAAOD,EAAWvH,GAClBpI,EAAWT,EAAKO,uBAAuB8P,GACvCC,EAAgB,GAAG3H,MAAMlG,KAAKpC,SAASuI,iBAAiBnI,IAC3D8P,QAAO,SAAAC,GAAS,OAAIA,IAAchQ,KAEpB,OAAbC,GAAqB6P,EAAcvH,OAAS,IAC9C5E,KAAKsM,UAAYhQ,EACjB0D,KAAK+L,cAAcQ,KAAKL,IAI5BlM,KAAKwM,QAAUxM,KAAKuG,QAAQ5E,OAAS3B,KAAKyM,aAAe,KAEpDzM,KAAKuG,QAAQ5E,QAChB3B,KAAK0M,0BAA0B1M,KAAKkB,SAAUlB,KAAK+L,eAGjD/L,KAAKuG,QAAQnD,QACfpD,KAAKoD,oCAcTA,OAAA,WACMtG,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASuJ,GAC5BvL,KAAK2M,OAEL3M,KAAK4M,UAITA,KAAA,WAAO,IAMDC,EACAC,EAPC/M,EAAAC,KACL,KAAIA,KAAK8L,kBACPhP,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASuJ,KAOxBvL,KAAKwM,SAUgB,KATvBK,EAAU,GAAGrI,MAAMlG,KAAK0B,KAAKwM,QAAQ/H,iBA/ElB,uBAgFhB2H,QAAO,SAAAF,GACN,MAAmC,iBAAxBnM,EAAKwG,QAAQ5E,OACfuK,EAAK3P,aAAa,iBAAmBwD,EAAKwG,QAAQ5E,OAGpDuK,EAAKxI,UAAUC,SAAS6H,OAGvB5G,SACViI,EAAU,MAIVA,IACFC,EAAchQ,EAAAA,QAAE+P,GAASE,IAAI/M,KAAKsM,WAAW/J,KAAKxB,KAC/B+L,EAAYhB,mBAFjC,CAOA,IAAMkB,EAAalQ,EAAAA,QAAEgF,MA1GT,oBA4GZ,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQwP,IACrBA,EAAWzL,qBAAf,CAIIsL,IACFhB,EAASzJ,iBAAiB9D,KAAKxB,EAAAA,QAAE+P,GAASE,IAAI/M,KAAKsM,WAAY,QAC1DQ,GACHhQ,EAAAA,QAAE+P,GAAStK,KAAKxB,EAAU,OAI9B,IAAMkM,EAAYjN,KAAKkN,gBAEvBpQ,EAAAA,QAAEkD,KAAKkB,UACJa,YAAYyJ,GACZnB,SAASoB,GAEZzL,KAAKkB,SAASiM,MAAMF,GAAa,EAE7BjN,KAAK+L,cAAcnH,QACrB9H,EAAAA,QAAEkD,KAAK+L,eACJhK,YAAY2J,GACZ0B,KAAK,iBAAiB,GAG3BpN,KAAKqN,kBAAiB,GAEtB,IAaMC,EAAU,UADaL,EAAU,GAAGjO,cAAgBiO,EAAUzI,MAAM,IAEpE3H,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,gBAjBK,WACfkB,EAAAA,QAAEiD,EAAKmB,UACJa,YAAY0J,GACZpB,SAAYmB,iBAEfzL,EAAKmB,SAASiM,MAAMF,GAAa,GAEjClN,EAAKsN,kBAAiB,GAEtBvQ,EAAAA,QAAEiD,EAAKmB,UAAU1D,QA/IN,wBAwJVqC,qBAAqBhD,GAExBmD,KAAKkB,SAASiM,MAAMF,GAAgBjN,KAAKkB,SAASoM,GAAlD,UAGFX,KAAA,WAAO,IAAArE,EAAAtI,KACL,IAAIA,KAAK8L,kBACNhP,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASuJ,GAD7B,CAKA,IAAMyB,EAAalQ,EAAAA,QAAEgF,MAlKT,oBAoKZ,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQwP,IACrBA,EAAWzL,qBAAf,CAIA,IAAM0L,EAAYjN,KAAKkN,gBAEvBlN,KAAKkB,SAASiM,MAAMF,GAAgBjN,KAAKkB,SAASqM,wBAAwBN,GAA1E,KAEApR,EAAKwB,OAAO2C,KAAKkB,UAEjBpE,EAAAA,QAAEkD,KAAKkB,UACJmJ,SAASoB,GACT1J,YAAeyJ,iBAElB,IAAMgC,EAAqBxN,KAAK+L,cAAcnH,OAC9C,GAAI4I,EAAqB,EACvB,IAAK,IAAI9I,EAAI,EAAGA,EAAI8I,EAAoB9I,IAAK,CAC3C,IAAMlH,EAAUwC,KAAK+L,cAAcrH,GAC7BpI,EAAWT,EAAKO,uBAAuBoB,GAE5B,OAAblB,IACYQ,EAAAA,QAAE,GAAG0H,MAAMlG,KAAKpC,SAASuI,iBAAiBnI,KAC7C0F,SAASuJ,IAClBzO,EAAAA,QAAEU,GAAS6M,SAASqB,GACjB0B,KAAK,iBAAiB,IAMjCpN,KAAKqN,kBAAiB,GAUtBrN,KAAKkB,SAASiM,MAAMF,GAAa,GACjC,IAAMpQ,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,gBAZK,WACf0M,EAAK+E,kBAAiB,GACtBvQ,EAAAA,QAAEwL,EAAKpH,UACJa,YAAY0J,GACZpB,SAASmB,GACThO,QAxMS,yBAgNXqC,qBAAqBhD,QAG1BwQ,iBAAA,SAAiBI,GACfzN,KAAK8L,iBAAmB2B,KAG1BhM,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,GAE5Bf,KAAKuG,QAAU,KACfvG,KAAKwM,QAAU,KACfxM,KAAKkB,SAAW,KAChBlB,KAAK+L,cAAgB,KACrB/L,KAAK8L,iBAAmB,QAI1BtF,WAAA,SAAWxI,GAOT,OANAA,EAAMkK,EAAA,GACD/C,EACAnH,IAEEoF,OAAS1F,QAAQM,EAAOoF,QAC/BvH,EAAKiC,gBAAgBgH,EAAM9G,EAAQ0H,GAC5B1H,KAGTkP,cAAA,WAEE,OADiBpQ,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2J,GACzBA,EAnPG,YAsPvBc,WAAA,WAAa,IACP9K,EADO8G,EAAAzI,KAGPnE,EAAK8B,UAAUqC,KAAKuG,QAAQ5E,SAC9BA,EAAS3B,KAAKuG,QAAQ5E,OAGoB,oBAA/B3B,KAAKuG,QAAQ5E,OAAO/B,SAC7B+B,EAAS3B,KAAKuG,QAAQ5E,OAAO,KAG/BA,EAASzF,SAASQ,cAAcsD,KAAKuG,QAAQ5E,QAG/C,IAAMrF,EAAQ,yCAA4C0D,KAAKuG,QAAQ5E,OAAzD,KACRyI,EAAW,GAAG5F,MAAMlG,KAAKqD,EAAO8C,iBAAiBnI,IASvD,OAPAQ,EAAAA,QAAEsN,GAAU/H,MAAK,SAACqC,EAAGrI,GACnBoM,EAAKiE,0BACHb,EAAS6B,sBAAsBrR,GAC/B,CAACA,OAIEsF,KAGT+K,0BAAA,SAA0BrQ,EAASsR,GACjC,IAAMC,EAAS9Q,EAAAA,QAAET,GAAS2F,SAASuJ,GAE/BoC,EAAa/I,QACf9H,EAAAA,QAAE6Q,GACC3J,YAAY0H,GAAuBkC,GACnCR,KAAK,gBAAiBQ,MAKtBF,sBAAP,SAA6BrR,GAC3B,IAAMC,EAAWT,EAAKO,uBAAuBC,GAC7C,OAAOC,EAAWJ,SAASQ,cAAcJ,GAAY,QAGhD8F,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,GACnBwF,EAAO2B,EAAA,GACR/C,EACA7C,EAASC,OACU,iBAAXvE,GAAuBA,EAASA,EAAS,IAYtD,IATKuE,GAAQgE,EAAQnD,QAA4B,iBAAXpF,GAAuB,YAAYc,KAAKd,KAC5EuI,EAAQnD,QAAS,GAGdb,IACHA,EAAO,IAAIsJ,EAAS7L,KAAMuG,GAC1BjE,EAASC,KAAKxB,EAAUwB,IAGJ,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA7PX,WACE,MAzEY,6BA4Ed,WACE,OAAOmH,QAxCL0G,GA0SN/O,EAAAA,QAAEZ,UAAUyG,GA7Tc,6BA6TWiJ,GAAsB,SAAUxL,GAE/B,MAAhCA,EAAMyN,cAAcxJ,SACtBjE,EAAMsC,iBAGR,IAAMoL,EAAWhR,EAAAA,QAAEkD,MACb1D,EAAWT,EAAKO,uBAAuB4D,MACvC+N,EAAY,GAAGvJ,MAAMlG,KAAKpC,SAASuI,iBAAiBnI,IAE1DQ,EAAAA,QAAEiR,GAAW1L,MAAK,WAChB,IAAM2L,EAAUlR,EAAAA,QAAEkD,MAEZhC,EADOgQ,EAAQzL,KAAKxB,GACJ,SAAW+M,EAASvL,OAC1CsJ,EAASzJ,iBAAiB9D,KAAK0P,EAAShQ,SAQ5ClB,EAAAA,QAAE6C,GAAGmF,GAAQ+G,EAASzJ,iBACtBtF,EAAAA,QAAE6C,GAAGmF,GAAMlC,YAAciJ,EACzB/O,EAAAA,QAAE6C,GAAGmF,GAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,GAAQ9D,EACN6K,EAASzJ,kBChWlB,IAAI6L,EAA8B,oBAAX3J,QAA8C,oBAAbpI,UAAiD,oBAAdyK,UAEvFuH,EAAkB,WAEpB,IADA,IAAIC,EAAwB,CAAC,OAAQ,UAAW,WACvCzJ,EAAI,EAAGA,EAAIyJ,EAAsBvJ,OAAQF,GAAK,EACrD,GAAIuJ,GAAatH,UAAUyH,UAAUhF,QAAQ+E,EAAsBzJ,KAAO,EACxE,OAAO,EAGX,OAAO,EAPa,GAgDlB2J,EAXqBJ,GAAa3J,OAAOgK,QA3B7C,SAA2B3O,GACzB,IAAIM,GAAS,EACb,OAAO,WACDA,IAGJA,GAAS,EACTqE,OAAOgK,QAAQC,UAAUC,MAAK,WAC5BvO,GAAS,EACTN,UAKN,SAAsBA,GACpB,IAAI8O,GAAY,EAChB,OAAO,WACAA,IACHA,GAAY,EACZtO,YAAW,WACTsO,GAAY,EACZ9O,MACCuO,MAyBT,SAASQ,EAAWC,GAElB,OAAOA,GAA8D,sBADvD,GACoBjQ,SAASJ,KAAKqQ,GAUlD,SAASC,EAAyBvS,EAAS6B,GACzC,GAAyB,IAArB7B,EAAQwB,SACV,MAAO,GAGT,IACId,EADSV,EAAQwS,cAAcC,YAClBC,iBAAiB1S,EAAS,MAC3C,OAAO6B,EAAWnB,EAAImB,GAAYnB,EAUpC,SAASiS,EAAc3S,GACrB,MAAyB,SAArBA,EAAQ4S,SACH5S,EAEFA,EAAQkD,YAAclD,EAAQ6S,KAUvC,SAASC,EAAgB9S,GAEvB,IAAKA,EACH,OAAOH,SAASkT,KAGlB,OAAQ/S,EAAQ4S,UACd,IAAK,OACL,IAAK,OACH,OAAO5S,EAAQwS,cAAcO,KAC/B,IAAK,YACH,OAAO/S,EAAQ+S,KAKnB,IAAIC,EAAwBT,EAAyBvS,GACjDiT,EAAWD,EAAsBC,SACjCC,EAAYF,EAAsBE,UAClCC,EAAYH,EAAsBG,UAEtC,MAAI,wBAAwB1Q,KAAKwQ,EAAWE,EAAYD,GAC/ClT,EAGF8S,EAAgBH,EAAc3S,IAUvC,SAASoT,EAAiBC,GACxB,OAAOA,GAAaA,EAAUC,cAAgBD,EAAUC,cAAgBD,EAG1E,IAAIE,EAAS3B,MAAgB3J,OAAOuL,uBAAwB3T,SAAS4T,cACjEC,EAAS9B,GAAa,UAAUnP,KAAK6H,UAAUyH,WASnD,SAAS4B,GAAKtQ,GACZ,OAAgB,KAAZA,EACKkQ,EAEO,KAAZlQ,EACKqQ,EAEFH,GAAUG,EAUnB,SAASE,GAAgB5T,GACvB,IAAKA,EACH,OAAOH,SAASgD,gBAQlB,IALA,IAAIgR,EAAiBF,GAAK,IAAM9T,SAASkT,KAAO,KAG5Ce,EAAe9T,EAAQ8T,cAAgB,KAEpCA,IAAiBD,GAAkB7T,EAAQ+T,oBAChDD,GAAgB9T,EAAUA,EAAQ+T,oBAAoBD,aAGxD,IAAIlB,EAAWkB,GAAgBA,EAAalB,SAE5C,OAAKA,GAAyB,SAAbA,GAAoC,SAAbA,GAMsB,IAA1D,CAAC,KAAM,KAAM,SAAS7F,QAAQ+G,EAAalB,WAA2E,WAAvDL,EAAyBuB,EAAc,YACjGF,GAAgBE,GAGlBA,EATE9T,EAAUA,EAAQwS,cAAc3P,gBAAkBhD,SAASgD,gBA4BtE,SAASmR,GAAQC,GACf,OAAwB,OAApBA,EAAK/Q,WACA8Q,GAAQC,EAAK/Q,YAGf+Q,EAWT,SAASC,GAAuBC,EAAUC,GAExC,KAAKD,GAAaA,EAAS3S,UAAa4S,GAAaA,EAAS5S,UAC5D,OAAO3B,SAASgD,gBAIlB,IAAIwR,EAAQF,EAASG,wBAAwBF,GAAYG,KAAKC,4BAC1DnI,EAAQgI,EAAQF,EAAWC,EAC3B1H,EAAM2H,EAAQD,EAAWD,EAGzBM,EAAQ5U,SAAS6U,cACrBD,EAAME,SAAStI,EAAO,GACtBoI,EAAMG,OAAOlI,EAAK,GAClB,IA/CyB1M,EACrB4S,EA8CAiC,EAA0BJ,EAAMI,wBAIpC,GAAIV,IAAaU,GAA2BT,IAAaS,GAA2BxI,EAAM/E,SAASoF,GACjG,MAjDe,UAFbkG,GADqB5S,EAoDD6U,GAnDDjC,WAKH,SAAbA,GAAuBgB,GAAgB5T,EAAQ8U,qBAAuB9U,EAkDpE4T,GAAgBiB,GAHdA,EAOX,IAAIE,EAAef,GAAQG,GAC3B,OAAIY,EAAalC,KACRqB,GAAuBa,EAAalC,KAAMuB,GAE1CF,GAAuBC,EAAUH,GAAQI,GAAUvB,MAY9D,SAASmC,GAAUhV,GACjB,IAAIiV,EAAOxQ,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,MAE3E0Q,EAAqB,QAATF,EAAiB,YAAc,aAC3CrC,EAAW5S,EAAQ4S,SAEvB,GAAiB,SAAbA,GAAoC,SAAbA,EAAqB,CAC9C,IAAIwC,EAAOpV,EAAQwS,cAAc3P,gBAC7BwS,EAAmBrV,EAAQwS,cAAc6C,kBAAoBD,EACjE,OAAOC,EAAiBF,GAG1B,OAAOnV,EAAQmV,GAYjB,SAASG,GAAcC,EAAMvV,GAC3B,IAAIwV,EAAW/Q,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAE1EgR,EAAYT,GAAUhV,EAAS,OAC/B0V,EAAaV,GAAUhV,EAAS,QAChC2V,EAAWH,GAAY,EAAI,EAK/B,OAJAD,EAAKK,KAAOH,EAAYE,EACxBJ,EAAKM,QAAUJ,EAAYE,EAC3BJ,EAAKO,MAAQJ,EAAaC,EAC1BJ,EAAKQ,OAASL,EAAaC,EACpBJ,EAaT,SAASS,GAAeC,EAAQC,GAC9B,IAAIC,EAAiB,MAATD,EAAe,OAAS,MAChCE,EAAkB,SAAVD,EAAmB,QAAU,SAEzC,OAAOtV,WAAWoV,EAAO,SAAWE,EAAQ,UAAYtV,WAAWoV,EAAO,SAAWG,EAAQ,UAG/F,SAASC,GAAQH,EAAMnD,EAAMqC,EAAMkB,GACjC,OAAO3W,KAAK4W,IAAIxD,EAAK,SAAWmD,GAAOnD,EAAK,SAAWmD,GAAOd,EAAK,SAAWc,GAAOd,EAAK,SAAWc,GAAOd,EAAK,SAAWc,GAAOvC,GAAK,IAAMzF,SAASkH,EAAK,SAAWc,IAAShI,SAASoI,EAAc,UAAqB,WAATJ,EAAoB,MAAQ,UAAYhI,SAASoI,EAAc,UAAqB,WAATJ,EAAoB,SAAW,WAAa,GAG5U,SAASM,GAAe3W,GACtB,IAAIkT,EAAOlT,EAASkT,KAChBqC,EAAOvV,EAASgD,gBAChByT,EAAgB3C,GAAK,KAAOjB,iBAAiB0C,GAEjD,MAAO,CACLqB,OAAQJ,GAAQ,SAAUtD,EAAMqC,EAAMkB,GACtCI,MAAOL,GAAQ,QAAStD,EAAMqC,EAAMkB,IAIxC,IAAIK,GAAiB,SAAUC,EAAUrQ,GACvC,KAAMqQ,aAAoBrQ,GACxB,MAAM,IAAInD,UAAU,sCAIpByT,GAAc,WAChB,SAASC,EAAiB1S,EAAQ2S,GAChC,IAAK,IAAI1O,EAAI,EAAGA,EAAI0O,EAAMxO,OAAQF,IAAK,CACrC,IAAI2O,EAAaD,EAAM1O,GACvB2O,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDrV,OAAOsV,eAAehT,EAAQ4S,EAAWK,IAAKL,IAIlD,OAAO,SAAUzQ,EAAa+Q,EAAYC,GAGxC,OAFID,GAAYR,EAAiBvQ,EAAYxE,UAAWuV,GACpDC,GAAaT,EAAiBvQ,EAAagR,GACxChR,GAdO,GAsBd6Q,GAAiB,SAAU7V,EAAK8V,EAAKlV,GAYvC,OAXIkV,KAAO9V,EACTO,OAAOsV,eAAe7V,EAAK8V,EAAK,CAC9BlV,MAAOA,EACP8U,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZ5V,EAAI8V,GAAOlV,EAGNZ,GAGLiW,GAAW1V,OAAO2V,QAAU,SAAUrT,GACxC,IAAK,IAAIiE,EAAI,EAAGA,EAAI5D,UAAU8D,OAAQF,IAAK,CACzC,IAAIqP,EAASjT,UAAU4D,GAEvB,IAAK,IAAIgP,KAAOK,EACV5V,OAAOC,UAAUC,eAAeC,KAAKyV,EAAQL,KAC/CjT,EAAOiT,GAAOK,EAAOL,IAK3B,OAAOjT,GAUT,SAASuT,GAAcC,GACrB,OAAOJ,GAAS,GAAII,EAAS,CAC3B7B,MAAO6B,EAAQ9B,KAAO8B,EAAQlB,MAC9Bb,OAAQ+B,EAAQhC,IAAMgC,EAAQnB,SAWlC,SAASvF,GAAsBlR,GAC7B,IAAIuV,EAAO,GAKX,IACE,GAAI5B,GAAK,IAAK,CACZ4B,EAAOvV,EAAQkR,wBACf,IAAIuE,EAAYT,GAAUhV,EAAS,OAC/B0V,EAAaV,GAAUhV,EAAS,QACpCuV,EAAKK,KAAOH,EACZF,EAAKO,MAAQJ,EACbH,EAAKM,QAAUJ,EACfF,EAAKQ,OAASL,OAEdH,EAAOvV,EAAQkR,wBAEjB,MAAOtE,IAET,IAAIiL,EAAS,CACX/B,KAAMP,EAAKO,KACXF,IAAKL,EAAKK,IACVc,MAAOnB,EAAKQ,MAAQR,EAAKO,KACzBW,OAAQlB,EAAKM,OAASN,EAAKK,KAIzBkC,EAA6B,SAArB9X,EAAQ4S,SAAsB4D,GAAexW,EAAQwS,eAAiB,GAC9EkE,EAAQoB,EAAMpB,OAAS1W,EAAQ+X,aAAeF,EAAOnB,MACrDD,EAASqB,EAAMrB,QAAUzW,EAAQgY,cAAgBH,EAAOpB,OAExDwB,EAAiBjY,EAAQkY,YAAcxB,EACvCyB,EAAgBnY,EAAQiB,aAAewV,EAI3C,GAAIwB,GAAkBE,EAAe,CACnC,IAAIlC,EAAS1D,EAAyBvS,GACtCiY,GAAkBjC,GAAeC,EAAQ,KACzCkC,GAAiBnC,GAAeC,EAAQ,KAExC4B,EAAOnB,OAASuB,EAChBJ,EAAOpB,QAAU0B,EAGnB,OAAOR,GAAcE,GAGvB,SAASO,GAAqCrK,EAAUzI,GACtD,IAAI+S,EAAgB5T,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAE/EiP,EAASC,GAAK,IACd2E,EAA6B,SAApBhT,EAAOsN,SAChB2F,EAAerH,GAAsBnD,GACrCyK,EAAatH,GAAsB5L,GACnCmT,EAAe3F,EAAgB/E,GAE/BkI,EAAS1D,EAAyBjN,GAClCoT,EAAiB7X,WAAWoV,EAAOyC,gBACnCC,EAAkB9X,WAAWoV,EAAO0C,iBAGpCN,GAAiBC,IACnBE,EAAW5C,IAAMjW,KAAK4W,IAAIiC,EAAW5C,IAAK,GAC1C4C,EAAW1C,KAAOnW,KAAK4W,IAAIiC,EAAW1C,KAAM,IAE9C,IAAI8B,EAAUD,GAAc,CAC1B/B,IAAK2C,EAAa3C,IAAM4C,EAAW5C,IAAM8C,EACzC5C,KAAMyC,EAAazC,KAAO0C,EAAW1C,KAAO6C,EAC5CjC,MAAO6B,EAAa7B,MACpBD,OAAQ8B,EAAa9B,SASvB,GAPAmB,EAAQgB,UAAY,EACpBhB,EAAQiB,WAAa,GAMhBnF,GAAU4E,EAAQ,CACrB,IAAIM,EAAY/X,WAAWoV,EAAO2C,WAC9BC,EAAahY,WAAWoV,EAAO4C,YAEnCjB,EAAQhC,KAAO8C,EAAiBE,EAChChB,EAAQ/B,QAAU6C,EAAiBE,EACnChB,EAAQ9B,MAAQ6C,EAAkBE,EAClCjB,EAAQ7B,OAAS4C,EAAkBE,EAGnCjB,EAAQgB,UAAYA,EACpBhB,EAAQiB,WAAaA,EAOvB,OAJInF,IAAW2E,EAAgB/S,EAAOgC,SAASmR,GAAgBnT,IAAWmT,GAA0C,SAA1BA,EAAa7F,YACrGgF,EAAUtC,GAAcsC,EAAStS,IAG5BsS,EAGT,SAASkB,GAA8C9Y,GACrD,IAAI+Y,EAAgBtU,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAE/E2Q,EAAOpV,EAAQwS,cAAc3P,gBAC7BmW,EAAiBZ,GAAqCpY,EAASoV,GAC/DsB,EAAQ/W,KAAK4W,IAAInB,EAAK2C,YAAa9P,OAAOgR,YAAc,GACxDxC,EAAS9W,KAAK4W,IAAInB,EAAK4C,aAAc/P,OAAOiR,aAAe,GAE3DzD,EAAasD,EAAkC,EAAlB/D,GAAUI,GACvCM,EAAcqD,EAA0C,EAA1B/D,GAAUI,EAAM,QAE9C+D,EAAS,CACXvD,IAAKH,EAAYuD,EAAepD,IAAMoD,EAAeJ,UACrD9C,KAAMJ,EAAasD,EAAelD,KAAOkD,EAAeH,WACxDnC,MAAOA,EACPD,OAAQA,GAGV,OAAOkB,GAAcwB,GAWvB,SAASC,GAAQpZ,GACf,IAAI4S,EAAW5S,EAAQ4S,SACvB,GAAiB,SAAbA,GAAoC,SAAbA,EACzB,OAAO,EAET,GAAsD,UAAlDL,EAAyBvS,EAAS,YACpC,OAAO,EAET,IAAIkD,EAAayP,EAAc3S,GAC/B,QAAKkD,GAGEkW,GAAQlW,GAWjB,SAASmW,GAA6BrZ,GAEpC,IAAKA,IAAYA,EAAQsZ,eAAiB3F,KACxC,OAAO9T,SAASgD,gBAGlB,IADA,IAAI0W,EAAKvZ,EAAQsZ,cACVC,GAAoD,SAA9ChH,EAAyBgH,EAAI,cACxCA,EAAKA,EAAGD,cAEV,OAAOC,GAAM1Z,SAASgD,gBAcxB,SAAS2W,GAAcC,EAAQpG,EAAWqG,EAASC,GACjD,IAAItB,EAAgB5T,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAI/EmV,EAAa,CAAEhE,IAAK,EAAGE,KAAM,GAC7BhC,EAAeuE,EAAgBgB,GAA6BI,GAAUvF,GAAuBuF,EAAQrG,EAAiBC,IAG1H,GAA0B,aAAtBsG,EACFC,EAAad,GAA8ChF,EAAcuE,OACpE,CAEL,IAAIwB,OAAiB,EACK,iBAAtBF,EAE8B,UADhCE,EAAiB/G,EAAgBH,EAAcU,KAC5BT,WACjBiH,EAAiBJ,EAAOjH,cAAc3P,iBAGxCgX,EAD+B,WAAtBF,EACQF,EAAOjH,cAAc3P,gBAErB8W,EAGnB,IAAI/B,EAAUQ,GAAqCyB,EAAgB/F,EAAcuE,GAGjF,GAAgC,SAA5BwB,EAAejH,UAAwBwG,GAAQtF,GAWjD8F,EAAahC,MAXmD,CAChE,IAAIkC,EAAkBtD,GAAeiD,EAAOjH,eACxCiE,EAASqD,EAAgBrD,OACzBC,EAAQoD,EAAgBpD,MAE5BkD,EAAWhE,KAAOgC,EAAQhC,IAAMgC,EAAQgB,UACxCgB,EAAW/D,OAASY,EAASmB,EAAQhC,IACrCgE,EAAW9D,MAAQ8B,EAAQ9B,KAAO8B,EAAQiB,WAC1Ce,EAAW7D,MAAQW,EAAQkB,EAAQ9B,MASvC,IAAIiE,EAAqC,iBADzCL,EAAUA,GAAW,GAOrB,OALAE,EAAW9D,MAAQiE,EAAkBL,EAAUA,EAAQ5D,MAAQ,EAC/D8D,EAAWhE,KAAOmE,EAAkBL,EAAUA,EAAQ9D,KAAO,EAC7DgE,EAAW7D,OAASgE,EAAkBL,EAAUA,EAAQ3D,OAAS,EACjE6D,EAAW/D,QAAUkE,EAAkBL,EAAUA,EAAQ7D,QAAU,EAE5D+D,EAGT,SAASI,GAAQC,GAIf,OAHYA,EAAKvD,MACJuD,EAAKxD,OAcpB,SAASyD,GAAqBC,EAAWC,EAASX,EAAQpG,EAAWsG,GACnE,IAAID,EAAUjV,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,EAElF,IAAmC,IAA/B0V,EAAUpN,QAAQ,QACpB,OAAOoN,EAGT,IAAIP,EAAaJ,GAAcC,EAAQpG,EAAWqG,EAASC,GAEvDU,EAAQ,CACVzE,IAAK,CACHc,MAAOkD,EAAWlD,MAClBD,OAAQ2D,EAAQxE,IAAMgE,EAAWhE,KAEnCG,MAAO,CACLW,MAAOkD,EAAW7D,MAAQqE,EAAQrE,MAClCU,OAAQmD,EAAWnD,QAErBZ,OAAQ,CACNa,MAAOkD,EAAWlD,MAClBD,OAAQmD,EAAW/D,OAASuE,EAAQvE,QAEtCC,KAAM,CACJY,MAAO0D,EAAQtE,KAAO8D,EAAW9D,KACjCW,OAAQmD,EAAWnD,SAInB6D,EAAcxY,OAAOyY,KAAKF,GAAOG,KAAI,SAAUnD,GACjD,OAAOG,GAAS,CACdH,IAAKA,GACJgD,EAAMhD,GAAM,CACboD,KAAMT,GAAQK,EAAMhD,SAErBqD,MAAK,SAAUC,EAAGC,GACnB,OAAOA,EAAEH,KAAOE,EAAEF,QAGhBI,EAAgBP,EAAYvK,QAAO,SAAU+K,GAC/C,IAAIpE,EAAQoE,EAAMpE,MACdD,EAASqE,EAAMrE,OACnB,OAAOC,GAAS+C,EAAO1B,aAAetB,GAAUgD,EAAOzB,gBAGrD+C,EAAoBF,EAActS,OAAS,EAAIsS,EAAc,GAAGxD,IAAMiD,EAAY,GAAGjD,IAErF2D,EAAYb,EAAUpZ,MAAM,KAAK,GAErC,OAAOga,GAAqBC,EAAY,IAAMA,EAAY,IAa5D,SAASC,GAAoBC,EAAOzB,EAAQpG,GAC1C,IAAIgF,EAAgB5T,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,KAEpF0W,EAAqB9C,EAAgBgB,GAA6BI,GAAUvF,GAAuBuF,EAAQrG,EAAiBC,IAChI,OAAO+E,GAAqC/E,EAAW8H,EAAoB9C,GAU7E,SAAS+C,GAAcpb,GACrB,IACIiW,EADSjW,EAAQwS,cAAcC,YACfC,iBAAiB1S,GACjCqb,EAAIxa,WAAWoV,EAAO2C,WAAa,GAAK/X,WAAWoV,EAAOqF,cAAgB,GAC1EC,EAAI1a,WAAWoV,EAAO4C,YAAc,GAAKhY,WAAWoV,EAAOuF,aAAe,GAK9E,MAJa,CACX9E,MAAO1W,EAAQkY,YAAcqD,EAC7B9E,OAAQzW,EAAQiB,aAAeoa,GAYnC,SAASI,GAAqBtB,GAC5B,IAAIuB,EAAO,CAAE5F,KAAM,QAASC,MAAO,OAAQF,OAAQ,MAAOD,IAAK,UAC/D,OAAOuE,EAAUwB,QAAQ,0BAA0B,SAAUC,GAC3D,OAAOF,EAAKE,MAchB,SAASC,GAAiBpC,EAAQqC,EAAkB3B,GAClDA,EAAYA,EAAUpZ,MAAM,KAAK,GAGjC,IAAIgb,EAAaX,GAAc3B,GAG3BuC,EAAgB,CAClBtF,MAAOqF,EAAWrF,MAClBD,OAAQsF,EAAWtF,QAIjBwF,GAAoD,IAA1C,CAAC,QAAS,QAAQlP,QAAQoN,GACpC+B,EAAWD,EAAU,MAAQ,OAC7BE,EAAgBF,EAAU,OAAS,MACnCG,EAAcH,EAAU,SAAW,QACnCI,EAAwBJ,EAAqB,QAAX,SAStC,OAPAD,EAAcE,GAAYJ,EAAiBI,GAAYJ,EAAiBM,GAAe,EAAIL,EAAWK,GAAe,EAEnHJ,EAAcG,GADZhC,IAAcgC,EACeL,EAAiBK,GAAiBJ,EAAWM,GAE7CP,EAAiBL,GAAqBU,IAGhEH,EAYT,SAASM,GAAKC,EAAKC,GAEjB,OAAIC,MAAM1a,UAAUua,KACXC,EAAID,KAAKE,GAIXD,EAAIxM,OAAOyM,GAAO,GAqC3B,SAASE,GAAaC,EAAWzW,EAAM0W,GAoBrC,YAnB8B1H,IAAT0H,EAAqBD,EAAYA,EAAUxU,MAAM,EA1BxE,SAAmBoU,EAAKM,EAAM1a,GAE5B,GAAIsa,MAAM1a,UAAU+a,UAClB,OAAOP,EAAIO,WAAU,SAAUC,GAC7B,OAAOA,EAAQ,OAAM5a,KAKzB,IAAIG,EAAQga,GAAKC,GAAK,SAAUhb,GAC9B,OAAOA,EAAQ,OAAMY,KAEvB,OAAOoa,EAAIxP,QAAQzK,GAcsDwa,CAAUH,EAAW,EAAQC,KAEvFI,SAAQ,SAAUrH,GAC3BA,EAAmB,UAErBsH,QAAQC,KAAK,yDAEf,IAAI5Z,EAAKqS,EAAmB,UAAKA,EAASrS,GACtCqS,EAASwH,SAAW9K,EAAW/O,KAIjC4C,EAAK0R,QAAQ6B,OAAS9B,GAAczR,EAAK0R,QAAQ6B,QACjDvT,EAAK0R,QAAQvE,UAAYsE,GAAczR,EAAK0R,QAAQvE,WAEpDnN,EAAO5C,EAAG4C,EAAMyP,OAIbzP,EAUT,SAASkX,KAEP,IAAIzZ,KAAKuX,MAAMmC,YAAf,CAIA,IAAInX,EAAO,CACT0Q,SAAUjT,KACVsS,OAAQ,GACRqH,YAAa,GACbC,WAAY,GACZC,SAAS,EACT5F,QAAS,IAIX1R,EAAK0R,QAAQvE,UAAY4H,GAAoBtX,KAAKuX,MAAOvX,KAAK8V,OAAQ9V,KAAK0P,UAAW1P,KAAK8Z,QAAQC,eAKnGxX,EAAKiU,UAAYD,GAAqBvW,KAAK8Z,QAAQtD,UAAWjU,EAAK0R,QAAQvE,UAAW1P,KAAK8V,OAAQ9V,KAAK0P,UAAW1P,KAAK8Z,QAAQd,UAAUgB,KAAKhE,kBAAmBhW,KAAK8Z,QAAQd,UAAUgB,KAAKjE,SAG9LxT,EAAK0X,kBAAoB1X,EAAKiU,UAE9BjU,EAAKwX,cAAgB/Z,KAAK8Z,QAAQC,cAGlCxX,EAAK0R,QAAQ6B,OAASoC,GAAiBlY,KAAK8V,OAAQvT,EAAK0R,QAAQvE,UAAWnN,EAAKiU,WAEjFjU,EAAK0R,QAAQ6B,OAAOoE,SAAWla,KAAK8Z,QAAQC,cAAgB,QAAU,WAGtExX,EAAOwW,GAAa/Y,KAAKgZ,UAAWzW,GAI/BvC,KAAKuX,MAAM4C,UAIdna,KAAK8Z,QAAQM,SAAS7X,IAHtBvC,KAAKuX,MAAM4C,WAAY,EACvBna,KAAK8Z,QAAQO,SAAS9X,KAY1B,SAAS+X,GAAkBtB,EAAWuB,GACpC,OAAOvB,EAAUwB,MAAK,SAAUlE,GAC9B,IAAImE,EAAOnE,EAAKmE,KAEhB,OADcnE,EAAKkD,SACDiB,IAASF,KAW/B,SAASG,GAAyBxc,GAIhC,IAHA,IAAIyc,EAAW,EAAC,EAAO,KAAM,SAAU,MAAO,KAC1CC,EAAY1c,EAAS2c,OAAO,GAAG7b,cAAgBd,EAASsG,MAAM,GAEzDE,EAAI,EAAGA,EAAIiW,EAAS/V,OAAQF,IAAK,CACxC,IAAI3I,EAAS4e,EAASjW,GAClBoW,EAAU/e,EAAS,GAAKA,EAAS6e,EAAY1c,EACjD,GAA4C,oBAAjChC,SAASkT,KAAKjC,MAAM2N,GAC7B,OAAOA,EAGX,OAAO,KAQT,SAASC,KAsBP,OArBA/a,KAAKuX,MAAMmC,aAAc,EAGrBY,GAAkBta,KAAKgZ,UAAW,gBACpChZ,KAAK8V,OAAOkF,gBAAgB,eAC5Bhb,KAAK8V,OAAO3I,MAAM+M,SAAW,GAC7Bla,KAAK8V,OAAO3I,MAAM8E,IAAM,GACxBjS,KAAK8V,OAAO3I,MAAMgF,KAAO,GACzBnS,KAAK8V,OAAO3I,MAAMiF,MAAQ,GAC1BpS,KAAK8V,OAAO3I,MAAM+E,OAAS,GAC3BlS,KAAK8V,OAAO3I,MAAM8N,WAAa,GAC/Bjb,KAAK8V,OAAO3I,MAAMuN,GAAyB,cAAgB,IAG7D1a,KAAKkb,wBAIDlb,KAAK8Z,QAAQqB,iBACfnb,KAAK8V,OAAOvW,WAAW6b,YAAYpb,KAAK8V,QAEnC9V,KAQT,SAASqb,GAAUhf,GACjB,IAAIwS,EAAgBxS,EAAQwS,cAC5B,OAAOA,EAAgBA,EAAcC,YAAcxK,OAGrD,SAASgX,GAAsBxG,EAAc1U,EAAOmb,EAAUC,GAC5D,IAAIC,EAAmC,SAA1B3G,EAAa7F,SACtBxO,EAASgb,EAAS3G,EAAajG,cAAcC,YAAcgG,EAC/DrU,EAAOib,iBAAiBtb,EAAOmb,EAAU,CAAEI,SAAS,IAE/CF,GACHH,GAAsBnM,EAAgB1O,EAAOlB,YAAaa,EAAOmb,EAAUC,GAE7EA,EAAcjP,KAAK9L,GASrB,SAASmb,GAAoBlM,EAAWoK,EAASvC,EAAOsE,GAEtDtE,EAAMsE,YAAcA,EACpBR,GAAU3L,GAAWgM,iBAAiB,SAAUnE,EAAMsE,YAAa,CAAEF,SAAS,IAG9E,IAAIG,EAAgB3M,EAAgBO,GAKpC,OAJA4L,GAAsBQ,EAAe,SAAUvE,EAAMsE,YAAatE,EAAMiE,eACxEjE,EAAMuE,cAAgBA,EACtBvE,EAAMwE,eAAgB,EAEfxE,EAST,SAASyE,KACFhc,KAAKuX,MAAMwE,gBACd/b,KAAKuX,MAAQqE,GAAoB5b,KAAK0P,UAAW1P,KAAK8Z,QAAS9Z,KAAKuX,MAAOvX,KAAKic,iBAkCpF,SAASf,KAxBT,IAA8BxL,EAAW6H,EAyBnCvX,KAAKuX,MAAMwE,gBACbG,qBAAqBlc,KAAKic,gBAC1Bjc,KAAKuX,OA3BqB7H,EA2BQ1P,KAAK0P,UA3BF6H,EA2BavX,KAAKuX,MAzBzD8D,GAAU3L,GAAWyM,oBAAoB,SAAU5E,EAAMsE,aAGzDtE,EAAMiE,cAAcnC,SAAQ,SAAU5Y,GACpCA,EAAO0b,oBAAoB,SAAU5E,EAAMsE,gBAI7CtE,EAAMsE,YAAc,KACpBtE,EAAMiE,cAAgB,GACtBjE,EAAMuE,cAAgB,KACtBvE,EAAMwE,eAAgB,EACfxE,IAwBT,SAAS6E,GAAUC,GACjB,MAAa,KAANA,IAAaC,MAAMpf,WAAWmf,KAAOE,SAASF,GAWvD,SAASG,GAAUngB,EAASiW,GAC1BnU,OAAOyY,KAAKtE,GAAQ+G,SAAQ,SAAUH,GACpC,IAAIuD,EAAO,IAEkE,IAAzE,CAAC,QAAS,SAAU,MAAO,QAAS,SAAU,QAAQrT,QAAQ8P,IAAgBkD,GAAU9J,EAAO4G,MACjGuD,EAAO,MAETpgB,EAAQ8Q,MAAM+L,GAAQ5G,EAAO4G,GAAQuD,KAgIzC,IAAIC,GAAYzO,GAAa,WAAWnP,KAAK6H,UAAUyH,WA8GvD,SAASuO,GAAmB3D,EAAW4D,EAAgBC,GACrD,IAAIC,EAAanE,GAAKK,GAAW,SAAU1C,GAEzC,OADWA,EAAKmE,OACAmC,KAGdG,IAAeD,GAAc9D,EAAUwB,MAAK,SAAUxI,GACxD,OAAOA,EAASyI,OAASoC,GAAiB7K,EAASwH,SAAWxH,EAAStB,MAAQoM,EAAWpM,SAG5F,IAAKqM,EAAY,CACf,IAAIC,EAAc,IAAMJ,EAAiB,IACrCK,EAAY,IAAMJ,EAAgB,IACtCvD,QAAQC,KAAK0D,EAAY,4BAA8BD,EAAc,4DAA8DA,EAAc,KAEnJ,OAAOD,EAoIT,IAAIG,GAAa,CAAC,aAAc,OAAQ,WAAY,YAAa,MAAO,UAAW,cAAe,QAAS,YAAa,aAAc,SAAU,eAAgB,WAAY,OAAQ,cAGhLC,GAAkBD,GAAW1Y,MAAM,GAYvC,SAAS4Y,GAAU5G,GACjB,IAAI6G,EAAUvc,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,IAAmBA,UAAU,GAEzE+G,EAAQsV,GAAgB/T,QAAQoN,GAChCoC,EAAMuE,GAAgB3Y,MAAMqD,EAAQ,GAAGyV,OAAOH,GAAgB3Y,MAAM,EAAGqD,IAC3E,OAAOwV,EAAUzE,EAAI2E,UAAY3E,EAkfnC,IAkWI4E,GAAW,CAKbhH,UAAW,SAMXuD,eAAe,EAMfgC,eAAe,EAOfZ,iBAAiB,EAQjBd,SAAU,aAUVD,SAAU,aAOVpB,UAnZc,CASdyE,MAAO,CAEL/M,MAAO,IAEP8I,SAAS,EAET7Z,GA9HJ,SAAe4C,GACb,IAAIiU,EAAYjU,EAAKiU,UACjBkH,EAAgBlH,EAAUpZ,MAAM,KAAK,GACrCugB,EAAiBnH,EAAUpZ,MAAM,KAAK,GAG1C,GAAIugB,EAAgB,CAClB,IAAIC,EAAgBrb,EAAK0R,QACrBvE,EAAYkO,EAAclO,UAC1BoG,EAAS8H,EAAc9H,OAEvB+H,GAA2D,IAA9C,CAAC,SAAU,OAAOzU,QAAQsU,GACvCpM,EAAOuM,EAAa,OAAS,MAC7BpF,EAAcoF,EAAa,QAAU,SAErCC,EAAe,CACjBpV,MAAO+K,GAAe,GAAInC,EAAM5B,EAAU4B,IAC1CvI,IAAK0K,GAAe,GAAInC,EAAM5B,EAAU4B,GAAQ5B,EAAU+I,GAAe3C,EAAO2C,KAGlFlW,EAAK0R,QAAQ6B,OAASjC,GAAS,GAAIiC,EAAQgI,EAAaH,IAG1D,OAAOpb,IAgJPiT,OAAQ,CAEN9E,MAAO,IAEP8I,SAAS,EAET7Z,GA7RJ,SAAgB4C,EAAM+T,GACpB,IAQIrC,EARAuB,EAASc,EAAKd,OACdgB,EAAYjU,EAAKiU,UACjBoH,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1BgO,EAAgBlH,EAAUpZ,MAAM,KAAK,GAwBzC,OApBE6W,EADEmI,IAAW5G,GACH,EAAEA,EAAQ,GAvFxB,SAAqBA,EAAQ6C,EAAeF,EAAkBuF,GAC5D,IAAIzJ,EAAU,CAAC,EAAG,GAKd8J,GAA0D,IAA9C,CAAC,QAAS,QAAQ3U,QAAQsU,GAItCM,EAAYxI,EAAOpY,MAAM,WAAWyZ,KAAI,SAAUoH,GACpD,OAAOA,EAAKxhB,UAKVyhB,EAAUF,EAAU5U,QAAQuP,GAAKqF,GAAW,SAAUC,GACxD,OAAgC,IAAzBA,EAAKE,OAAO,YAGjBH,EAAUE,KAAiD,IAArCF,EAAUE,GAAS9U,QAAQ,MACnDkQ,QAAQC,KAAK,gFAKf,IAAI6E,EAAa,cACbC,GAAmB,IAAbH,EAAiB,CAACF,EAAUxZ,MAAM,EAAG0Z,GAASZ,OAAO,CAACU,EAAUE,GAAS9gB,MAAMghB,GAAY,KAAM,CAACJ,EAAUE,GAAS9gB,MAAMghB,GAAY,IAAId,OAAOU,EAAUxZ,MAAM0Z,EAAU,KAAO,CAACF,GAqC9L,OAlCAK,EAAMA,EAAIxH,KAAI,SAAUyH,EAAIzW,GAE1B,IAAI4Q,GAAyB,IAAV5Q,GAAekW,EAAYA,GAAa,SAAW,QAClEQ,GAAoB,EACxB,OAAOD,EAGNE,QAAO,SAAUxH,EAAGC,GACnB,MAAwB,KAApBD,EAAEA,EAAEpS,OAAS,KAAwC,IAA3B,CAAC,IAAK,KAAKwE,QAAQ6N,IAC/CD,EAAEA,EAAEpS,OAAS,GAAKqS,EAClBsH,GAAoB,EACbvH,GACEuH,GACTvH,EAAEA,EAAEpS,OAAS,IAAMqS,EACnBsH,GAAoB,EACbvH,GAEAA,EAAEsG,OAAOrG,KAEjB,IAEFJ,KAAI,SAAU4H,GACb,OAxGN,SAAiBA,EAAKhG,EAAaJ,EAAeF,GAEhD,IAAI/a,EAAQqhB,EAAI9f,MAAM,6BAClBH,GAASpB,EAAM,GACfqf,EAAOrf,EAAM,GAGjB,OAAKoB,EAIqB,IAAtBie,EAAKrT,QAAQ,KAYJ4K,GATJ,OADCyI,EAEMpE,EAKAF,GAIFM,GAAe,IAAMja,EACf,OAATie,GAA0B,OAATA,GAGb,OAATA,EACKzgB,KAAK4W,IAAI1W,SAASgD,gBAAgBmV,aAAc/P,OAAOiR,aAAe,GAEtEvZ,KAAK4W,IAAI1W,SAASgD,gBAAgBkV,YAAa9P,OAAOgR,YAAc,IAE/D,IAAM9W,EAIbA,EA7BAigB,EAgGEC,CAAQD,EAAKhG,EAAaJ,EAAeF,SAKpDkG,EAAIhF,SAAQ,SAAUiF,EAAIzW,GACxByW,EAAGjF,SAAQ,SAAU4E,EAAMU,GACrBvC,GAAU6B,KACZhK,EAAQpM,IAAUoW,GAA2B,MAAnBK,EAAGK,EAAS,IAAc,EAAI,UAIvD1K,EAyBK2K,CAAYpJ,EAAQM,EAAQpG,EAAWgO,GAG7B,SAAlBA,GACF5H,EAAO7D,KAAOgC,EAAQ,GACtB6B,EAAO3D,MAAQ8B,EAAQ,IACI,UAAlByJ,GACT5H,EAAO7D,KAAOgC,EAAQ,GACtB6B,EAAO3D,MAAQ8B,EAAQ,IACI,QAAlByJ,GACT5H,EAAO3D,MAAQ8B,EAAQ,GACvB6B,EAAO7D,KAAOgC,EAAQ,IACK,WAAlByJ,IACT5H,EAAO3D,MAAQ8B,EAAQ,GACvB6B,EAAO7D,KAAOgC,EAAQ,IAGxB1R,EAAKuT,OAASA,EACPvT,GAkQLiT,OAAQ,GAoBVqJ,gBAAiB,CAEfnO,MAAO,IAEP8I,SAAS,EAET7Z,GAlRJ,SAAyB4C,EAAMuX,GAC7B,IAAI9D,EAAoB8D,EAAQ9D,mBAAqB/F,GAAgB1N,EAAK0Q,SAAS6C,QAK/EvT,EAAK0Q,SAASvD,YAAcsG,IAC9BA,EAAoB/F,GAAgB+F,IAMtC,IAAI8I,EAAgBpE,GAAyB,aACzCqE,EAAexc,EAAK0Q,SAAS6C,OAAO3I,MACpC8E,EAAM8M,EAAa9M,IACnBE,EAAO4M,EAAa5M,KACpB6M,EAAYD,EAAaD,GAE7BC,EAAa9M,IAAM,GACnB8M,EAAa5M,KAAO,GACpB4M,EAAaD,GAAiB,GAE9B,IAAI7I,EAAaJ,GAActT,EAAK0Q,SAAS6C,OAAQvT,EAAK0Q,SAASvD,UAAWoK,EAAQ/D,QAASC,EAAmBzT,EAAKwX,eAIvHgF,EAAa9M,IAAMA,EACnB8M,EAAa5M,KAAOA,EACpB4M,EAAaD,GAAiBE,EAE9BlF,EAAQ7D,WAAaA,EAErB,IAAIvF,EAAQoJ,EAAQmF,SAChBnJ,EAASvT,EAAK0R,QAAQ6B,OAEtB+C,EAAQ,CACVqG,QAAS,SAAiB1I,GACxB,IAAIhY,EAAQsX,EAAOU,GAInB,OAHIV,EAAOU,GAAaP,EAAWO,KAAesD,EAAQqF,sBACxD3gB,EAAQxC,KAAK4W,IAAIkD,EAAOU,GAAYP,EAAWO,KAE1C/C,GAAe,GAAI+C,EAAWhY,IAEvC4gB,UAAW,SAAmB5I,GAC5B,IAAI+B,EAAyB,UAAd/B,EAAwB,OAAS,MAC5ChY,EAAQsX,EAAOyC,GAInB,OAHIzC,EAAOU,GAAaP,EAAWO,KAAesD,EAAQqF,sBACxD3gB,EAAQxC,KAAKqjB,IAAIvJ,EAAOyC,GAAWtC,EAAWO,IAA4B,UAAdA,EAAwBV,EAAO/C,MAAQ+C,EAAOhD,UAErGW,GAAe,GAAI8E,EAAU/Z,KAWxC,OAPAkS,EAAM2I,SAAQ,SAAU7C,GACtB,IAAIlF,GAA+C,IAAxC,CAAC,OAAQ,OAAOlI,QAAQoN,GAAoB,UAAY,YACnEV,EAASjC,GAAS,GAAIiC,EAAQ+C,EAAMvH,GAAMkF,OAG5CjU,EAAK0R,QAAQ6B,OAASA,EAEfvT,GA2NL0c,SAAU,CAAC,OAAQ,QAAS,MAAO,UAOnClJ,QAAS,EAMTC,kBAAmB,gBAYrBsJ,aAAc,CAEZ5O,MAAO,IAEP8I,SAAS,EAET7Z,GAlgBJ,SAAsB4C,GACpB,IAAIqb,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1B8G,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCmiB,EAAQvjB,KAAKujB,MACb1B,GAAuD,IAA1C,CAAC,MAAO,UAAUzU,QAAQoN,GACvClF,EAAOuM,EAAa,QAAU,SAC9B2B,EAAS3B,EAAa,OAAS,MAC/BpF,EAAcoF,EAAa,QAAU,SASzC,OAPI/H,EAAOxE,GAAQiO,EAAM7P,EAAU8P,MACjCjd,EAAK0R,QAAQ6B,OAAO0J,GAAUD,EAAM7P,EAAU8P,IAAW1J,EAAO2C,IAE9D3C,EAAO0J,GAAUD,EAAM7P,EAAU4B,MACnC/O,EAAK0R,QAAQ6B,OAAO0J,GAAUD,EAAM7P,EAAU4B,KAGzC/O,IA4fPkd,MAAO,CAEL/O,MAAO,IAEP8I,SAAS,EAET7Z,GApxBJ,SAAe4C,EAAMuX,GACnB,IAAI4F,EAGJ,IAAK/C,GAAmBpa,EAAK0Q,SAAS+F,UAAW,QAAS,gBACxD,OAAOzW,EAGT,IAAIod,EAAe7F,EAAQzd,QAG3B,GAA4B,iBAAjBsjB,GAIT,KAHAA,EAAepd,EAAK0Q,SAAS6C,OAAOpZ,cAAcijB,IAIhD,OAAOpd,OAKT,IAAKA,EAAK0Q,SAAS6C,OAAOnS,SAASgc,GAEjC,OADArG,QAAQC,KAAK,iEACNhX,EAIX,IAAIiU,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCwgB,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1BmO,GAAuD,IAA1C,CAAC,OAAQ,SAASzU,QAAQoN,GAEvC7R,EAAMkZ,EAAa,SAAW,QAC9B+B,EAAkB/B,EAAa,MAAQ,OACvCvM,EAAOsO,EAAgBhhB,cACvBihB,EAAUhC,EAAa,OAAS,MAChC2B,EAAS3B,EAAa,SAAW,QACjCiC,EAAmBrI,GAAckI,GAAchb,GAQ/C+K,EAAU8P,GAAUM,EAAmBhK,EAAOxE,KAChD/O,EAAK0R,QAAQ6B,OAAOxE,IAASwE,EAAOxE,IAAS5B,EAAU8P,GAAUM,IAG/DpQ,EAAU4B,GAAQwO,EAAmBhK,EAAO0J,KAC9Cjd,EAAK0R,QAAQ6B,OAAOxE,IAAS5B,EAAU4B,GAAQwO,EAAmBhK,EAAO0J,IAE3Ejd,EAAK0R,QAAQ6B,OAAS9B,GAAczR,EAAK0R,QAAQ6B,QAGjD,IAAIiK,EAASrQ,EAAU4B,GAAQ5B,EAAU/K,GAAO,EAAImb,EAAmB,EAInE/iB,EAAM6R,EAAyBrM,EAAK0Q,SAAS6C,QAC7CkK,EAAmB9iB,WAAWH,EAAI,SAAW6iB,IAC7CK,EAAmB/iB,WAAWH,EAAI,SAAW6iB,EAAkB,UAC/DM,EAAYH,EAASxd,EAAK0R,QAAQ6B,OAAOxE,GAAQ0O,EAAmBC,EAQxE,OALAC,EAAYlkB,KAAK4W,IAAI5W,KAAKqjB,IAAIvJ,EAAOnR,GAAOmb,EAAkBI,GAAY,GAE1E3d,EAAKod,aAAeA,EACpBpd,EAAK0R,QAAQwL,OAAmChM,GAA1BiM,EAAsB,GAAwCpO,EAAMtV,KAAKmkB,MAAMD,IAAazM,GAAeiM,EAAqBG,EAAS,IAAKH,GAE7Jnd,GA8sBLlG,QAAS,aAcX2d,KAAM,CAEJtJ,MAAO,IAEP8I,SAAS,EAET7Z,GA5oBJ,SAAc4C,EAAMuX,GAElB,GAAIQ,GAAkB/X,EAAK0Q,SAAS+F,UAAW,SAC7C,OAAOzW,EAGT,GAAIA,EAAKsX,SAAWtX,EAAKiU,YAAcjU,EAAK0X,kBAE1C,OAAO1X,EAGT,IAAI0T,EAAaJ,GAActT,EAAK0Q,SAAS6C,OAAQvT,EAAK0Q,SAASvD,UAAWoK,EAAQ/D,QAAS+D,EAAQ9D,kBAAmBzT,EAAKwX,eAE3HvD,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCgjB,EAAoBtI,GAAqBtB,GACzCa,EAAY9U,EAAKiU,UAAUpZ,MAAM,KAAK,IAAM,GAE5CijB,EAAY,GAEhB,OAAQvG,EAAQwG,UACd,IAhCI,OAiCFD,EAAY,CAAC7J,EAAW4J,GACxB,MACF,IAlCS,YAmCPC,EAAYjD,GAAU5G,GACtB,MACF,IApCgB,mBAqCd6J,EAAYjD,GAAU5G,GAAW,GACjC,MACF,QACE6J,EAAYvG,EAAQwG,SAyDxB,OAtDAD,EAAUhH,SAAQ,SAAUkH,EAAM1Y,GAChC,GAAI2O,IAAc+J,GAAQF,EAAUzb,SAAWiD,EAAQ,EACrD,OAAOtF,EAGTiU,EAAYjU,EAAKiU,UAAUpZ,MAAM,KAAK,GACtCgjB,EAAoBtI,GAAqBtB,GAEzC,IAAI6B,EAAgB9V,EAAK0R,QAAQ6B,OAC7B0K,EAAaje,EAAK0R,QAAQvE,UAG1B6P,EAAQvjB,KAAKujB,MACbkB,EAA4B,SAAdjK,GAAwB+I,EAAMlH,EAAcjG,OAASmN,EAAMiB,EAAWrO,OAAuB,UAAdqE,GAAyB+I,EAAMlH,EAAclG,MAAQoN,EAAMiB,EAAWpO,QAAwB,QAAdoE,GAAuB+I,EAAMlH,EAAcnG,QAAUqN,EAAMiB,EAAWvO,MAAsB,WAAduE,GAA0B+I,EAAMlH,EAAcpG,KAAOsN,EAAMiB,EAAWtO,QAEjUwO,EAAgBnB,EAAMlH,EAAclG,MAAQoN,EAAMtJ,EAAW9D,MAC7DwO,EAAiBpB,EAAMlH,EAAcjG,OAASmN,EAAMtJ,EAAW7D,OAC/DwO,EAAerB,EAAMlH,EAAcpG,KAAOsN,EAAMtJ,EAAWhE,KAC3D4O,EAAkBtB,EAAMlH,EAAcnG,QAAUqN,EAAMtJ,EAAW/D,QAEjE4O,EAAoC,SAAdtK,GAAwBkK,GAA+B,UAAdlK,GAAyBmK,GAAgC,QAAdnK,GAAuBoK,GAA8B,WAAdpK,GAA0BqK,EAG3KhD,GAAuD,IAA1C,CAAC,MAAO,UAAUzU,QAAQoN,GAGvCuK,IAA0BjH,EAAQkH,iBAAmBnD,GAA4B,UAAdxG,GAAyBqJ,GAAiB7C,GAA4B,QAAdxG,GAAuBsJ,IAAmB9C,GAA4B,UAAdxG,GAAyBuJ,IAAiB/C,GAA4B,QAAdxG,GAAuBwJ,GAGlQI,IAA8BnH,EAAQoH,0BAA4BrD,GAA4B,UAAdxG,GAAyBsJ,GAAkB9C,GAA4B,QAAdxG,GAAuBqJ,IAAkB7C,GAA4B,UAAdxG,GAAyBwJ,IAAoBhD,GAA4B,QAAdxG,GAAuBuJ,GAElRO,EAAmBJ,GAAyBE,GAE5CR,GAAeK,GAAuBK,KAExC5e,EAAKsX,SAAU,GAEX4G,GAAeK,KACjBtK,EAAY6J,EAAUxY,EAAQ,IAG5BsZ,IACF9J,EAvJR,SAA8BA,GAC5B,MAAkB,QAAdA,EACK,QACgB,UAAdA,EACF,MAEFA,EAiJW+J,CAAqB/J,IAGnC9U,EAAKiU,UAAYA,GAAaa,EAAY,IAAMA,EAAY,IAI5D9U,EAAK0R,QAAQ6B,OAASjC,GAAS,GAAItR,EAAK0R,QAAQ6B,OAAQoC,GAAiB3V,EAAK0Q,SAAS6C,OAAQvT,EAAK0R,QAAQvE,UAAWnN,EAAKiU,YAE5HjU,EAAOwW,GAAaxW,EAAK0Q,SAAS+F,UAAWzW,EAAM,YAGhDA,GA4jBL+d,SAAU,OAKVvK,QAAS,EAOTC,kBAAmB,WAQnBgL,gBAAgB,EAQhBE,yBAAyB,GAU3BG,MAAO,CAEL3Q,MAAO,IAEP8I,SAAS,EAET7Z,GArQJ,SAAe4C,GACb,IAAIiU,EAAYjU,EAAKiU,UACjBkH,EAAgBlH,EAAUpZ,MAAM,KAAK,GACrCwgB,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAE1B4I,GAAwD,IAA9C,CAAC,OAAQ,SAASlP,QAAQsU,GAEpC4D,GAA6D,IAA5C,CAAC,MAAO,QAAQlY,QAAQsU,GAO7C,OALA5H,EAAOwC,EAAU,OAAS,OAAS5I,EAAUgO,IAAkB4D,EAAiBxL,EAAOwC,EAAU,QAAU,UAAY,GAEvH/V,EAAKiU,UAAYsB,GAAqBtB,GACtCjU,EAAK0R,QAAQ6B,OAAS9B,GAAc8B,GAE7BvT,IAkQPoK,KAAM,CAEJ+D,MAAO,IAEP8I,SAAS,EAET7Z,GA9TJ,SAAc4C,GACZ,IAAKoa,GAAmBpa,EAAK0Q,SAAS+F,UAAW,OAAQ,mBACvD,OAAOzW,EAGT,IAAIkU,EAAUlU,EAAK0R,QAAQvE,UACvB6R,EAAQ5I,GAAKpW,EAAK0Q,SAAS+F,WAAW,SAAUhH,GAClD,MAAyB,oBAAlBA,EAASyI,QACfxE,WAEH,GAAIQ,EAAQvE,OAASqP,EAAMtP,KAAOwE,EAAQtE,KAAOoP,EAAMnP,OAASqE,EAAQxE,IAAMsP,EAAMrP,QAAUuE,EAAQrE,MAAQmP,EAAMpP,KAAM,CAExH,IAAkB,IAAd5P,EAAKoK,KACP,OAAOpK,EAGTA,EAAKoK,MAAO,EACZpK,EAAKqX,WAAW,uBAAyB,OACpC,CAEL,IAAkB,IAAdrX,EAAKoK,KACP,OAAOpK,EAGTA,EAAKoK,MAAO,EACZpK,EAAKqX,WAAW,wBAAyB,EAG3C,OAAOrX,IAoTPif,aAAc,CAEZ9Q,MAAO,IAEP8I,SAAS,EAET7Z,GAtgCJ,SAAsB4C,EAAMuX,GAC1B,IAAIpC,EAAIoC,EAAQpC,EACZE,EAAIkC,EAAQlC,EACZ9B,EAASvT,EAAK0R,QAAQ6B,OAItB2L,EAA8B9I,GAAKpW,EAAK0Q,SAAS+F,WAAW,SAAUhH,GACxE,MAAyB,eAAlBA,EAASyI,QACfiH,qBACiCnQ,IAAhCkQ,GACFnI,QAAQC,KAAK,iIAEf,IA6BIpH,EACAF,EA9BAyP,OAAkDnQ,IAAhCkQ,EAA4CA,EAA8B3H,EAAQ4H,gBAEpGvR,EAAeF,GAAgB1N,EAAK0Q,SAAS6C,QAC7C6L,EAAmBpU,GAAsB4C,GAGzCmC,EAAS,CACX4H,SAAUpE,EAAOoE,UAGfjG,EA9DN,SAA2B1R,EAAMqf,GAC/B,IAAIhE,EAAgBrb,EAAK0R,QACrB6B,EAAS8H,EAAc9H,OACvBpG,EAAYkO,EAAclO,UAC1ByQ,EAAQnkB,KAAKmkB,MACbZ,EAAQvjB,KAAKujB,MAEbsC,EAAU,SAAiBC,GAC7B,OAAOA,GAGLC,EAAiB5B,EAAMzQ,EAAUqD,OACjCiP,EAAc7B,EAAMrK,EAAO/C,OAE3B8K,GAA4D,IAA/C,CAAC,OAAQ,SAASzU,QAAQ7G,EAAKiU,WAC5CyL,GAA+C,IAAjC1f,EAAKiU,UAAUpN,QAAQ,KAIrC8Y,EAAuBN,EAAwB/D,GAAcoE,GAH3CF,EAAiB,GAAMC,EAAc,EAGuC7B,EAAQZ,EAAjEsC,EACrCM,EAAqBP,EAAwBzB,EAAV0B,EAEvC,MAAO,CACL1P,KAAM+P,EANWH,EAAiB,GAAM,GAAKC,EAAc,GAAM,IAMtBC,GAAeL,EAAc9L,EAAO3D,KAAO,EAAI2D,EAAO3D,MACjGF,IAAKkQ,EAAkBrM,EAAO7D,KAC9BC,OAAQiQ,EAAkBrM,EAAO5D,QACjCE,MAAO8P,EAAoBpM,EAAO1D,QAoCtBgQ,CAAkB7f,EAAM+B,OAAO+d,iBAAmB,IAAM3F,IAElElK,EAAc,WAANkF,EAAiB,MAAQ,SACjCjF,EAAc,UAANmF,EAAgB,OAAS,QAKjC0K,EAAmB5H,GAAyB,aAiChD,GAhBIzI,EAJU,WAAVO,EAG4B,SAA1BrC,EAAalB,UACRkB,EAAakE,aAAeJ,EAAQ/B,QAEpCyP,EAAiB7O,OAASmB,EAAQ/B,OAGrC+B,EAAQhC,IAIZE,EAFU,UAAVM,EAC4B,SAA1BtC,EAAalB,UACPkB,EAAaiE,YAAcH,EAAQ7B,OAEnCuP,EAAiB5O,MAAQkB,EAAQ7B,MAGpC6B,EAAQ9B,KAEbuP,GAAmBY,EACrBhQ,EAAOgQ,GAAoB,eAAiBnQ,EAAO,OAASF,EAAM,SAClEK,EAAOE,GAAS,EAChBF,EAAOG,GAAS,EAChBH,EAAO2I,WAAa,gBACf,CAEL,IAAIsH,EAAsB,WAAV/P,GAAsB,EAAI,EACtCgQ,EAAuB,UAAV/P,GAAqB,EAAI,EAC1CH,EAAOE,GAASP,EAAMsQ,EACtBjQ,EAAOG,GAASN,EAAOqQ,EACvBlQ,EAAO2I,WAAazI,EAAQ,KAAOC,EAIrC,IAAImH,EAAa,CACf,cAAerX,EAAKiU,WAQtB,OAJAjU,EAAKqX,WAAa/F,GAAS,GAAI+F,EAAYrX,EAAKqX,YAChDrX,EAAK+P,OAASuB,GAAS,GAAIvB,EAAQ/P,EAAK+P,QACxC/P,EAAKoX,YAAc9F,GAAS,GAAItR,EAAK0R,QAAQwL,MAAOld,EAAKoX,aAElDpX,GAo7BLmf,iBAAiB,EAMjBhK,EAAG,SAMHE,EAAG,SAkBL6K,WAAY,CAEV/R,MAAO,IAEP8I,SAAS,EAET7Z,GAzpCJ,SAAoB4C,GApBpB,IAAuBlG,EAASud,EAoC9B,OAXA4C,GAAUja,EAAK0Q,SAAS6C,OAAQvT,EAAK+P,QAzBhBjW,EA6BPkG,EAAK0Q,SAAS6C,OA7BE8D,EA6BMrX,EAAKqX,WA5BzCzb,OAAOyY,KAAKgD,GAAYP,SAAQ,SAAUH,IAE1B,IADFU,EAAWV,GAErB7c,EAAQ0H,aAAamV,EAAMU,EAAWV,IAEtC7c,EAAQ2e,gBAAgB9B,MA0BxB3W,EAAKod,cAAgBxhB,OAAOyY,KAAKrU,EAAKoX,aAAa/U,QACrD4X,GAAUja,EAAKod,aAAcpd,EAAKoX,aAG7BpX,GA2oCLmgB,OA9nCJ,SAA0BhT,EAAWoG,EAAQgE,EAAS6I,EAAiBpL,GAErE,IAAIY,EAAmBb,GAAoBC,EAAOzB,EAAQpG,EAAWoK,EAAQC,eAKzEvD,EAAYD,GAAqBuD,EAAQtD,UAAW2B,EAAkBrC,EAAQpG,EAAWoK,EAAQd,UAAUgB,KAAKhE,kBAAmB8D,EAAQd,UAAUgB,KAAKjE,SAQ9J,OANAD,EAAO/R,aAAa,cAAeyS,GAInCgG,GAAU1G,EAAQ,CAAEoE,SAAUJ,EAAQC,cAAgB,QAAU,aAEzDD,GAsnCL4H,qBAAiBnQ,KAuGjBqR,GAAS,WASX,SAASA,EAAOlT,EAAWoG,GACzB,IAAI/V,EAAQC,KAER8Z,EAAUhZ,UAAU8D,OAAS,QAAsB2M,IAAjBzQ,UAAU,GAAmBA,UAAU,GAAK,GAClFkS,GAAehT,KAAM4iB,GAErB5iB,KAAKic,eAAiB,WACpB,OAAO4G,sBAAsB9iB,EAAM0Z,SAIrCzZ,KAAKyZ,OAASpL,EAASrO,KAAKyZ,OAAO9R,KAAK3H,OAGxCA,KAAK8Z,QAAUjG,GAAS,GAAI+O,EAAOpF,SAAU1D,GAG7C9Z,KAAKuX,MAAQ,CACXmC,aAAa,EACbS,WAAW,EACXqB,cAAe,IAIjBxb,KAAK0P,UAAYA,GAAaA,EAAU9P,OAAS8P,EAAU,GAAKA,EAChE1P,KAAK8V,OAASA,GAAUA,EAAOlW,OAASkW,EAAO,GAAKA,EAGpD9V,KAAK8Z,QAAQd,UAAY,GACzB7a,OAAOyY,KAAK/C,GAAS,GAAI+O,EAAOpF,SAASxE,UAAWc,EAAQd,YAAYK,SAAQ,SAAUoB,GACxF1a,EAAM+Z,QAAQd,UAAUyB,GAAQ5G,GAAS,GAAI+O,EAAOpF,SAASxE,UAAUyB,IAAS,GAAIX,EAAQd,UAAYc,EAAQd,UAAUyB,GAAQ,OAIpIza,KAAKgZ,UAAY7a,OAAOyY,KAAK5W,KAAK8Z,QAAQd,WAAWnC,KAAI,SAAU4D,GACjE,OAAO5G,GAAS,CACd4G,KAAMA,GACL1a,EAAM+Z,QAAQd,UAAUyB,OAG5B1D,MAAK,SAAUC,EAAGC,GACjB,OAAOD,EAAEtG,MAAQuG,EAAEvG,SAOrB1Q,KAAKgZ,UAAUK,SAAQ,SAAUsJ,GAC3BA,EAAgBnJ,SAAW9K,EAAWiU,EAAgBD,SACxDC,EAAgBD,OAAO3iB,EAAM2P,UAAW3P,EAAM+V,OAAQ/V,EAAM+Z,QAAS6I,EAAiB5iB,EAAMwX,UAKhGvX,KAAKyZ,SAEL,IAAIsC,EAAgB/b,KAAK8Z,QAAQiC,cAC7BA,GAEF/b,KAAKgc,uBAGPhc,KAAKuX,MAAMwE,cAAgBA,EAqD7B,OA9CA7I,GAAY0P,EAAQ,CAAC,CACnBlP,IAAK,SACLlV,MAAO,WACL,OAAOib,GAAOnb,KAAK0B,QAEpB,CACD0T,IAAK,UACLlV,MAAO,WACL,OAAOuc,GAAQzc,KAAK0B,QAErB,CACD0T,IAAK,uBACLlV,MAAO,WACL,OAAOwd,GAAqB1d,KAAK0B,QAElC,CACD0T,IAAK,wBACLlV,MAAO,WACL,OAAO0c,GAAsB5c,KAAK0B,UA4B/B4iB,EA7HI,GAqJbA,GAAOE,OAA2B,oBAAXxe,OAAyBA,OAASye,QAAQC,YACjEJ,GAAO1F,WAAaA,GACpB0F,GAAOpF,SAAWA,GAElB,IAAAyF,GAAeL,GCviFT9d,GAAO,WAEP/D,GAAW,cAGXC,GAAqBlE,EAAAA,QAAE6C,GAAGmF,IAO1Boe,GAAiB,IAAIrkB,OAAUskB,YAE/BC,GAAsB,WACtB7X,GAAkB,OAIlB8X,GAAuB,sBAGvBC,GAAU,mBACVC,GAAY,qBAIZC,GAAoB,6BACpBC,GAAsB,+BAGtB7X,GAAuB,2BAEvB8X,GAAgB,iBAWhBve,GAAU,CACdqQ,OAAQ,EACRwE,MAAM,EACN2J,SAAU,eACVjU,UAAW,SACXkU,QAAS,UACTC,aAAc,MAGVne,GAAc,CAClB8P,OAAQ,2BACRwE,KAAM,UACN2J,SAAU,mBACVjU,UAAW,mBACXkU,QAAS,SACTC,aAAc,iBAOVC,GAAAA,WACJ,SAAAA,EAAYznB,EAAS2B,GACnBgC,KAAKkB,SAAW7E,EAChB2D,KAAK+jB,QAAU,KACf/jB,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKgkB,MAAQhkB,KAAKikB,kBAClBjkB,KAAKkkB,UAAYlkB,KAAKmkB,gBAEtBnkB,KAAKgH,gDAiBP5D,OAAA,WACE,IAAIpD,KAAKkB,SAASkjB,WAAYtnB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASohB,IAAxD,CAIA,IAAMiB,EAAWvnB,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASuJ,IAExCuY,EAASQ,cAELD,GAIJrkB,KAAK4M,MAAK,OAGZA,KAAA,SAAK2X,GACH,QADsB,IAAnBA,IAAAA,GAAY,KACXvkB,KAAKkB,SAASkjB,UAAYtnB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASohB,KAAwBtmB,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASuJ,KAAvG,CAIA,IAAM5B,EAAgB,CACpBA,cAAe3J,KAAKkB,UAEhBsjB,EAAY1nB,EAAAA,QAAEgF,MA3FR,mBA2F0B6H,GAChChI,EAASmiB,EAASW,sBAAsBzkB,KAAKkB,UAInD,GAFApE,EAAAA,QAAE6E,GAAQnE,QAAQgnB,IAEdA,EAAUjjB,qBAAd,CAKA,IAAKvB,KAAKkkB,WAAaK,EAAW,CAEhC,GAAsB,oBAAX3B,GACT,MAAM,IAAInjB,UAAU,gEAGtB,IAAIilB,EAAmB1kB,KAAKkB,SAEG,WAA3BlB,KAAKuG,QAAQmJ,UACfgV,EAAmB/iB,EACV9F,EAAK8B,UAAUqC,KAAKuG,QAAQmJ,aACrCgV,EAAmB1kB,KAAKuG,QAAQmJ,UAGa,oBAAlC1P,KAAKuG,QAAQmJ,UAAU9P,SAChC8kB,EAAmB1kB,KAAKuG,QAAQmJ,UAAU,KAOhB,iBAA1B1P,KAAKuG,QAAQod,UACf7mB,EAAAA,QAAE6E,GAAQ0I,SAhIiB,mBAmI7BrK,KAAK+jB,QAAU,IAAInB,GAAO8B,EAAkB1kB,KAAKgkB,MAAOhkB,KAAK2kB,oBAO3D,iBAAkBzoB,SAASgD,iBACuB,IAAlDpC,EAAAA,QAAE6E,GAAQC,QA7HU,eA6HmBgD,QACzC9H,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWzH,GAAG,YAAa,KAAM7F,EAAAA,QAAE8nB,MAGtD5kB,KAAKkB,SAAS2C,QACd7D,KAAKkB,SAAS6C,aAAa,iBAAiB,GAE5CjH,EAAAA,QAAEkD,KAAKgkB,OAAOhgB,YAAYuH,IAC1BzO,EAAAA,QAAE6E,GACCqC,YAAYuH,IACZ/N,QAAQV,EAAAA,QAAEgF,MAhJA,oBAgJmB6H,SAGlCgD,KAAA,WACE,IAAI3M,KAAKkB,SAASkjB,WAAYtnB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASohB,KAAyBtmB,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASuJ,IAAxG,CAIA,IAAM5B,EAAgB,CACpBA,cAAe3J,KAAKkB,UAEhB2jB,EAAY/nB,EAAAA,QAAEgF,MAAMwhB,GAAY3Z,GAChChI,EAASmiB,EAASW,sBAAsBzkB,KAAKkB,UAEnDpE,EAAAA,QAAE6E,GAAQnE,QAAQqnB,GAEdA,EAAUtjB,uBAIVvB,KAAK+jB,SACP/jB,KAAK+jB,QAAQhJ,UAGfje,EAAAA,QAAEkD,KAAKgkB,OAAOhgB,YAAYuH,IAC1BzO,EAAAA,QAAE6E,GACCqC,YAAYuH,IACZ/N,QAAQV,EAAAA,QAAEgF,MAAMyhB,GAAc5Z,SAGnClI,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5BjE,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAtMN,gBAuMXjI,KAAKkB,SAAW,KAChBlB,KAAKgkB,MAAQ,KACQ,OAAjBhkB,KAAK+jB,UACP/jB,KAAK+jB,QAAQhJ,UACb/a,KAAK+jB,QAAU,SAInBtK,OAAA,WACEzZ,KAAKkkB,UAAYlkB,KAAKmkB,gBACD,OAAjBnkB,KAAK+jB,SACP/jB,KAAK+jB,QAAQ9H,oBAKjBjV,mBAAA,WAAqB,IAAAjH,EAAAC,KACnBlD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAjMJ,qBAiMoB,SAAAvC,GAC/BA,EAAMsC,iBACNtC,EAAM0kB,kBACN/kB,EAAKqD,eAIToD,WAAA,SAAWxI,GAaT,OAZAA,EAAMkK,EAAA,GACDlI,KAAK+kB,YAAY5f,QACjBrI,EAAAA,QAAEkD,KAAKkB,UAAUqB,OACjBvE,GAGLnC,EAAKiC,gBACHgH,GACA9G,EACAgC,KAAK+kB,YAAYrf,aAGZ1H,KAGTimB,gBAAA,WACE,IAAKjkB,KAAKgkB,MAAO,CACf,IAAMriB,EAASmiB,EAASW,sBAAsBzkB,KAAKkB,UAE/CS,IACF3B,KAAKgkB,MAAQriB,EAAOjF,cAAcgnB,KAItC,OAAO1jB,KAAKgkB,SAGdgB,cAAA,WACE,IAAMC,EAAkBnoB,EAAAA,QAAEkD,KAAKkB,SAAS3B,YACpCiX,EAzNiB,eAwOrB,OAZIyO,EAAgBjjB,SAnPE,UAoPpBwU,EAAY1Z,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASqhB,IA9NhB,UADH,YAkOP4B,EAAgBjjB,SAtPF,aAuPvBwU,EA/NkB,cAgOTyO,EAAgBjjB,SAvPH,YAwPtBwU,EAhOiB,aAiOR1Z,EAAAA,QAAEkD,KAAKgkB,OAAOhiB,SAASqhB,MAChC7M,EApOsB,cAuOjBA,KAGT2N,cAAA,WACE,OAAOrnB,EAAAA,QAAEkD,KAAKkB,UAAUU,QAAQ,WAAWgD,OAAS,KAGtDsgB,WAAA,WAAa,IAAA5c,EAAAtI,KACLwV,EAAS,GAef,MAbmC,mBAAxBxV,KAAKuG,QAAQiP,OACtBA,EAAO7V,GAAK,SAAA4C,GAMV,OALAA,EAAK0R,QAAL/L,EAAA,GACK3F,EAAK0R,QACL3L,EAAK/B,QAAQiP,OAAOjT,EAAK0R,QAAS3L,EAAKpH,WAGrCqB,GAGTiT,EAAOA,OAASxV,KAAKuG,QAAQiP,OAGxBA,KAGTmP,iBAAA,WACE,IAAMd,EAAe,CACnBrN,UAAWxW,KAAKglB,gBAChBhM,UAAW,CACTxD,OAAQxV,KAAKklB,aACblL,KAAM,CACJR,QAASxZ,KAAKuG,QAAQyT,MAExB6E,gBAAiB,CACf7I,kBAAmBhW,KAAKuG,QAAQod,YAYtC,MAN6B,WAAzB3jB,KAAKuG,QAAQqd,UACfC,EAAa7K,UAAUyJ,WAAa,CAClCjJ,SAAS,IAIbtR,EAAA,GACK2b,EACA7jB,KAAKuG,QAAQsd,iBAKbzhB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAQxB,GALKwB,IACHA,EAAO,IAAIuhB,EAAS9jB,KAHY,iBAAXhC,EAAsBA,EAAS,MAIpDlB,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,YAKJsmB,YAAP,SAAmBlkB,GACjB,IAAIA,GA/UyB,IA+UfA,EAAM+I,QACH,UAAf/I,EAAMoD,MAnVQ,IAmVYpD,EAAM+I,OAMlC,IAFA,IAAMgc,EAAU,GAAG3gB,MAAMlG,KAAKpC,SAASuI,iBAAiBmH,KAE/ClH,EAAI,EAAGC,EAAMwgB,EAAQvgB,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAM/C,EAASmiB,EAASW,sBAAsBU,EAAQzgB,IAChD0gB,EAAUtoB,EAAAA,QAAEqoB,EAAQzgB,IAAInC,KAAKxB,IAC7B4I,EAAgB,CACpBA,cAAewb,EAAQzgB,IAOzB,GAJItE,GAAwB,UAAfA,EAAMoD,OACjBmG,EAAc0b,WAAajlB,GAGxBglB,EAAL,CAIA,IAAME,EAAeF,EAAQpB,MAC7B,GAAKlnB,EAAAA,QAAE6E,GAAQK,SAASuJ,OAIpBnL,IAAyB,UAAfA,EAAMoD,MAChB,kBAAkB1E,KAAKsB,EAAMK,OAAO4D,UAA2B,UAAfjE,EAAMoD,MA9W5C,IA8WgEpD,EAAM+I,QAChFrM,EAAAA,QAAE6G,SAAShC,EAAQvB,EAAMK,SAF7B,CAMA,IAAMokB,EAAY/nB,EAAAA,QAAEgF,MAAMwhB,GAAY3Z,GACtC7M,EAAAA,QAAE6E,GAAQnE,QAAQqnB,GACdA,EAAUtjB,uBAMV,iBAAkBrF,SAASgD,iBAC7BpC,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWnC,IAAI,YAAa,KAAMnL,EAAAA,QAAE8nB,MAGvDO,EAAQzgB,GAAGX,aAAa,gBAAiB,SAErCqhB,EAAQrB,SACVqB,EAAQrB,QAAQhJ,UAGlBje,EAAAA,QAAEwoB,GAAcvjB,YAAYwJ,IAC5BzO,EAAAA,QAAE6E,GACCI,YAAYwJ,IACZ/N,QAAQV,EAAAA,QAAEgF,MAAMyhB,GAAc5Z,WAI9B8a,sBAAP,SAA6BpoB,GAC3B,IAAIsF,EACErF,EAAWT,EAAKO,uBAAuBC,GAM7C,OAJIC,IACFqF,EAASzF,SAASQ,cAAcJ,IAG3BqF,GAAUtF,EAAQkD,cAIpBgmB,uBAAP,SAA8BnlB,GAQ5B,KAAI,kBAAkBtB,KAAKsB,EAAMK,OAAO4D,SAjatB,KAkahBjE,EAAM+I,OAnaW,KAmagB/I,EAAM+I,QA/ZlB,KAgapB/I,EAAM+I,OAjaY,KAiaoB/I,EAAM+I,OAC3CrM,EAAAA,QAAEsD,EAAMK,QAAQmB,QAAQ8hB,IAAe9e,SAAWse,GAAepkB,KAAKsB,EAAM+I,UAI5EnJ,KAAKokB,WAAYtnB,EAAAA,QAAEkD,MAAMgC,SAASohB,IAAtC,CAIA,IAAMzhB,EAASmiB,EAASW,sBAAsBzkB,MACxCqkB,EAAWvnB,EAAAA,QAAE6E,GAAQK,SAASuJ,IAEpC,GAAK8Y,GAhbc,KAgbFjkB,EAAM+I,MAAvB,CAOA,GAHA/I,EAAMsC,iBACNtC,EAAM0kB,mBAEDT,GAvbc,KAubDjkB,EAAM+I,OAtbN,KAsbkC/I,EAAM+I,MAMxD,OA7biB,KAwbb/I,EAAM+I,OACRrM,EAAAA,QAAE6E,EAAOjF,cAAckP,KAAuBpO,QAAQ,cAGxDV,EAAAA,QAAEkD,MAAMxC,QAAQ,SAIlB,IAAMgoB,EAAQ,GAAGhhB,MAAMlG,KAAKqD,EAAO8C,iBAnaR,gEAoaxB2H,QAAO,SAAAqZ,GAAI,OAAI3oB,EAAAA,QAAE2oB,GAAM/kB,GAAG,eAE7B,GAAqB,IAAjB8kB,EAAM5gB,OAAV,CAIA,IAAIiD,EAAQ2d,EAAMpc,QAAQhJ,EAAMK,QApcX,KAscjBL,EAAM+I,OAA8BtB,EAAQ,GAC9CA,IAtcqB,KAycnBzH,EAAM+I,OAAgCtB,EAAQ2d,EAAM5gB,OAAS,GAC/DiD,IAGEA,EAAQ,IACVA,EAAQ,GAGV2d,EAAM3d,GAAOhE,yCA7Yf,WACE,MA9EY,6BAiFd,WACE,OAAOsB,4BAGT,WACE,OAAOO,SArBLoe,GAiaNhnB,EAAAA,QAAEZ,UACCyG,GAAG8gB,GAAwB7X,GAAsBkY,GAASyB,wBAC1D5iB,GAAG8gB,GAAwBC,GAAeI,GAASyB,wBACnD5iB,GAAM6gB,GAAAA,8BAAgDM,GAASQ,aAC/D3hB,GAAG6gB,GAAsB5X,IAAsB,SAAUxL,GACxDA,EAAMsC,iBACNtC,EAAM0kB,kBACNhB,GAAS1hB,iBAAiB9D,KAAKxB,EAAAA,QAAEkD,MAAO,aAEzC2C,GAAG6gB,GA5csB,kBA4cqB,SAAAva,GAC7CA,EAAE6b,qBAONhoB,EAAAA,QAAE6C,GAAGmF,IAAQgf,GAAS1hB,iBACtBtF,EAAAA,QAAE6C,GAAGmF,IAAMlC,YAAckhB,GACzBhnB,EAAAA,QAAE6C,GAAGmF,IAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,IAAQ9D,GACN8iB,GAAS1hB,kBCzflB,IAEMrB,GAAW,WAGXC,GAAqBlE,EAAAA,QAAE6C,GAAF,MAMrB+lB,GAAkB,aAClBC,GAAkB,OAClBpa,GAAkB,OAClBqa,GAAoB,eAIpBrC,GAAY,kBACZsC,GAAU,gBAEVC,GAAa,mBACbC,GAAY,kBACZC,GAAmB,yBACnBC,GAAqB,2BAErBC,GAAuB,6BAOvBC,GAAyB,oDAGzBhhB,GAAU,CACdihB,UAAU,EACV/gB,UAAU,EACVxB,OAAO,EACP+I,MAAM,GAGFlH,GAAc,CAClB0gB,SAAU,mBACV/gB,SAAU,UACVxB,MAAO,UACP+I,KAAM,WAOFyZ,GAAAA,WACJ,SAAAA,EAAYhqB,EAAS2B,GACnBgC,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKkB,SAAW7E,EAChB2D,KAAKsmB,QAAUjqB,EAAQK,cA7BH,iBA8BpBsD,KAAKumB,UAAY,KACjBvmB,KAAKwmB,UAAW,EAChBxmB,KAAKymB,oBAAqB,EAC1BzmB,KAAK0mB,sBAAuB,EAC5B1mB,KAAK8L,kBAAmB,EACxB9L,KAAK2mB,gBAAkB,6BAazBvjB,OAAA,SAAOuG,GACL,OAAO3J,KAAKwmB,SAAWxmB,KAAK2M,OAAS3M,KAAK4M,KAAKjD,MAGjDiD,KAAA,SAAKjD,GAAe,IAAA5J,EAAAC,KAClB,IAAIA,KAAKwmB,WAAYxmB,KAAK8L,iBAA1B,CAIA,IAAM0Y,EAAY1nB,EAAAA,QAAEgF,MAAM+jB,GAAY,CACpClc,cAAAA,IAGF7M,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgnB,GAErBA,EAAUjjB,uBAIdvB,KAAKwmB,UAAW,EAEZ1pB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,MAC5B3lB,KAAK8L,kBAAmB,GAG1B9L,KAAK4mB,kBACL5mB,KAAK6mB,gBAEL7mB,KAAK8mB,gBAEL9mB,KAAK+mB,kBACL/mB,KAAKgnB,kBAELlqB,EAAAA,QAAEkD,KAAKkB,UAAUyB,GACfqjB,GA/EwB,0BAiFxB,SAAA5lB,GAAK,OAAIL,EAAK4M,KAAKvM,MAGrBtD,EAAAA,QAAEkD,KAAKsmB,SAAS3jB,GAAGujB,IAAyB,WAC1CppB,EAAAA,QAAEiD,EAAKmB,UAAUhB,IA5FI,4BA4FuB,SAAAE,GACtCtD,EAAAA,QAAEsD,EAAMK,QAAQC,GAAGX,EAAKmB,YAC1BnB,EAAK2mB,sBAAuB,SAKlC1mB,KAAKinB,eAAc,WAAA,OAAMlnB,EAAKmnB,aAAavd,WAG7CgD,KAAA,SAAKvM,GAAO,IAAAkI,EAAAtI,KAKV,GAJII,GACFA,EAAMsC,iBAGH1C,KAAKwmB,WAAYxmB,KAAK8L,iBAA3B,CAIA,IAAM+Y,EAAY/nB,EAAAA,QAAEgF,MAxHR,iBA4HZ,GAFAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQqnB,GAEpB7kB,KAAKwmB,WAAY3B,EAAUtjB,qBAAhC,CAIAvB,KAAKwmB,UAAW,EAChB,IAAMW,EAAarqB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IAgB7C,GAdIwB,IACFnnB,KAAK8L,kBAAmB,GAG1B9L,KAAK+mB,kBACL/mB,KAAKgnB,kBAELlqB,EAAAA,QAAEZ,UAAU+L,IAAI6d,IAEhBhpB,EAAAA,QAAEkD,KAAKkB,UAAUa,YAAYwJ,IAE7BzO,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAI+d,IACrBlpB,EAAAA,QAAEkD,KAAKsmB,SAASre,IAAIie,IAEhBiB,EAAY,CACd,IAAMtqB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,gBAAgB,SAAAwE,GAAK,OAAIkI,EAAK8e,WAAWhnB,MAClDP,qBAAqBhD,QAExBmD,KAAKonB,kBAIT3lB,QAAA,WACE,CAAC6C,OAAQtE,KAAKkB,SAAUlB,KAAKsmB,SAC1BjN,SAAQ,SAAAgO,GAAW,OAAIvqB,EAAAA,QAAEuqB,GAAapf,IA3K9B,gBAkLXnL,EAAAA,QAAEZ,UAAU+L,IAAI6d,IAEhBhpB,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAE5Bf,KAAKuG,QAAU,KACfvG,KAAKkB,SAAW,KAChBlB,KAAKsmB,QAAU,KACftmB,KAAKumB,UAAY,KACjBvmB,KAAKwmB,SAAW,KAChBxmB,KAAKymB,mBAAqB,KAC1BzmB,KAAK0mB,qBAAuB,KAC5B1mB,KAAK8L,iBAAmB,KACxB9L,KAAK2mB,gBAAkB,QAGzBW,aAAA,WACEtnB,KAAK8mB,mBAIPtgB,WAAA,SAAWxI,GAMT,OALAA,EAAMkK,EAAA,GACD/C,GACAnH,GAELnC,EAAKiC,gBA9MI,QA8MkBE,EAAQ0H,IAC5B1H,KAGTupB,2BAAA,WAA6B,IAAA9e,EAAAzI,KACrBwnB,EAAqB1qB,EAAAA,QAAEgF,MAlMP,0BAqMtB,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgqB,IACrBA,EAAmBjmB,qBAAvB,CAIA,IAAMkmB,EAAqBznB,KAAKkB,SAASwmB,aAAexrB,SAASgD,gBAAgBmV,aAE5EoT,IACHznB,KAAKkB,SAASiM,MAAMqC,UAAY,UAGlCxP,KAAKkB,SAASwC,UAAUmB,IAAI+gB,IAE5B,IAAM+B,EAA0B9rB,EAAKe,iCAAiCoD,KAAKsmB,SAC3ExpB,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAIpM,EAAKD,gBAE1BkB,EAAAA,QAAEkD,KAAKkB,UAAUhB,IAAIrE,EAAKD,gBAAgB,WACxC6M,EAAKvH,SAASwC,UAAUvB,OAAOyjB,IAC1B6B,GACH3qB,EAAAA,QAAE2L,EAAKvH,UAAUhB,IAAIrE,EAAKD,gBAAgB,WACxC6M,EAAKvH,SAASiM,MAAMqC,UAAY,MAE/B3P,qBAAqB4I,EAAKvH,SAAUymB,MAGxC9nB,qBAAqB8nB,GACxB3nB,KAAKkB,SAAS2C,YAGhBqjB,aAAA,SAAavd,GAAe,IAAAgB,EAAA3K,KACpBmnB,EAAarqB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IACvCiC,EAAY5nB,KAAKsmB,QAAUtmB,KAAKsmB,QAAQ5pB,cAtNtB,eAsN2D,KAE9EsD,KAAKkB,SAAS3B,YACfS,KAAKkB,SAAS3B,WAAW1B,WAAa+S,KAAKiX,cAE7C3rB,SAASkT,KAAK0Y,YAAY9nB,KAAKkB,UAGjClB,KAAKkB,SAASiM,MAAMyW,QAAU,QAC9B5jB,KAAKkB,SAAS8Z,gBAAgB,eAC9Bhb,KAAKkB,SAAS6C,aAAa,cAAc,GACzC/D,KAAKkB,SAAS6C,aAAa,OAAQ,UAE/BjH,EAAAA,QAAEkD,KAAKsmB,SAAStkB,SAzPM,4BAyP6B4lB,EACrDA,EAAU9V,UAAY,EAEtB9R,KAAKkB,SAAS4Q,UAAY,EAGxBqV,GACFtrB,EAAKwB,OAAO2C,KAAKkB,UAGnBpE,EAAAA,QAAEkD,KAAKkB,UAAUmJ,SAASkB,IAEtBvL,KAAKuG,QAAQ1C,OACf7D,KAAK+nB,gBAGP,IAAMC,EAAalrB,EAAAA,QAAEgF,MA7PR,iBA6P2B,CACtC6H,cAAAA,IAGIse,EAAqB,WACrBtd,EAAKpE,QAAQ1C,OACf8G,EAAKzJ,SAAS2C,QAGhB8G,EAAKmB,kBAAmB,EACxBhP,EAAAA,QAAE6N,EAAKzJ,UAAU1D,QAAQwqB,IAG3B,GAAIb,EAAY,CACd,IAAMtqB,EAAqBhB,EAAKe,iCAAiCoD,KAAKsmB,SAEtExpB,EAAAA,QAAEkD,KAAKsmB,SACJpmB,IAAIrE,EAAKD,eAAgBqsB,GACzBpoB,qBAAqBhD,QAExBorB,OAIJF,cAAA,WAAgB,IAAAG,EAAAloB,KACdlD,EAAAA,QAAEZ,UACC+L,IAAI6d,IACJnjB,GAAGmjB,IAAe,SAAA1lB,GACblE,WAAakE,EAAMK,QACnBynB,EAAKhnB,WAAad,EAAMK,QACsB,IAA9C3D,EAAAA,QAAEorB,EAAKhnB,UAAUinB,IAAI/nB,EAAMK,QAAQmE,QACrCsjB,EAAKhnB,SAAS2C,cAKtBkjB,gBAAA,WAAkB,IAAAqB,EAAApoB,KACZA,KAAKwmB,SACP1pB,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAAGsjB,IAAuB,SAAA7lB,GACrCgoB,EAAK7hB,QAAQlB,UAlTF,KAkTcjF,EAAM+I,OACjC/I,EAAMsC,iBACN0lB,EAAKzb,QACKyb,EAAK7hB,QAAQlB,UArTV,KAqTsBjF,EAAM+I,OACzCif,EAAKb,gCAGCvnB,KAAKwmB,UACf1pB,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAIge,OAIzBe,gBAAA,WAAkB,IAAAqB,EAAAroB,KACZA,KAAKwmB,SACP1pB,EAAAA,QAAEwH,QAAQ3B,GAAGojB,IAAc,SAAA3lB,GAAK,OAAIioB,EAAKf,aAAalnB,MAEtDtD,EAAAA,QAAEwH,QAAQ2D,IAAI8d,OAIlBqB,WAAA,WAAa,IAAAkB,EAAAtoB,KACXA,KAAKkB,SAASiM,MAAMyW,QAAU,OAC9B5jB,KAAKkB,SAAS6C,aAAa,eAAe,GAC1C/D,KAAKkB,SAAS8Z,gBAAgB,cAC9Bhb,KAAKkB,SAAS8Z,gBAAgB,QAC9Bhb,KAAK8L,kBAAmB,EACxB9L,KAAKinB,eAAc,WACjBnqB,EAAAA,QAAEZ,SAASkT,MAAMrN,YAAY2jB,IAC7B4C,EAAKC,oBACLD,EAAKE,kBACL1rB,EAAAA,QAAEwrB,EAAKpnB,UAAU1D,QAAQ+lB,UAI7BkF,gBAAA,WACMzoB,KAAKumB,YACPzpB,EAAAA,QAAEkD,KAAKumB,WAAWpkB,SAClBnC,KAAKumB,UAAY,SAIrBU,cAAA,SAAc1L,GAAU,IAAAmN,EAAA1oB,KAChB2oB,EAAU7rB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IACxCA,GAAkB,GAEpB,GAAI3lB,KAAKwmB,UAAYxmB,KAAKuG,QAAQ6f,SAAU,CAiC1C,GAhCApmB,KAAKumB,UAAYrqB,SAAS0sB,cAAc,OACxC5oB,KAAKumB,UAAUsC,UA7VO,iBA+VlBF,GACF3oB,KAAKumB,UAAU7iB,UAAUmB,IAAI8jB,GAG/B7rB,EAAAA,QAAEkD,KAAKumB,WAAWuC,SAAS5sB,SAASkT,MAEpCtS,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAAGqjB,IAAqB,SAAA5lB,GACnCsoB,EAAKhC,qBACPgC,EAAKhC,sBAAuB,EAI1BtmB,EAAMK,SAAWL,EAAMyN,gBAIG,WAA1B6a,EAAKniB,QAAQ6f,SACfsC,EAAKnB,6BAELmB,EAAK/b,WAILgc,GACF9sB,EAAKwB,OAAO2C,KAAKumB,WAGnBzpB,EAAAA,QAAEkD,KAAKumB,WAAWlc,SAASkB,KAEtBgQ,EACH,OAGF,IAAKoN,EAEH,YADApN,IAIF,IAAMwN,EAA6BltB,EAAKe,iCAAiCoD,KAAKumB,WAE9EzpB,EAAAA,QAAEkD,KAAKumB,WACJrmB,IAAIrE,EAAKD,eAAgB2f,GACzB1b,qBAAqBkpB,QACnB,IAAK/oB,KAAKwmB,UAAYxmB,KAAKumB,UAAW,CAC3CzpB,EAAAA,QAAEkD,KAAKumB,WAAWxkB,YAAYwJ,IAE9B,IAAMyd,EAAiB,WACrBN,EAAKD,kBACDlN,GACFA,KAIJ,GAAIze,EAAAA,QAAEkD,KAAKkB,UAAUc,SAAS2jB,IAAkB,CAC9C,IAAMoD,EAA6BltB,EAAKe,iCAAiCoD,KAAKumB,WAE9EzpB,EAAAA,QAAEkD,KAAKumB,WACJrmB,IAAIrE,EAAKD,eAAgBotB,GACzBnpB,qBAAqBkpB,QAExBC,SAEOzN,GACTA,OASJuL,cAAA,WACE,IAAMW,EAAqBznB,KAAKkB,SAASwmB,aAAexrB,SAASgD,gBAAgBmV,cAE5ErU,KAAKymB,oBAAsBgB,IAC9BznB,KAAKkB,SAASiM,MAAM8b,YAAiBjpB,KAAK2mB,gBAA1C,MAGE3mB,KAAKymB,qBAAuBgB,IAC9BznB,KAAKkB,SAASiM,MAAM+b,aAAkBlpB,KAAK2mB,gBAA3C,SAIJ4B,kBAAA,WACEvoB,KAAKkB,SAASiM,MAAM8b,YAAc,GAClCjpB,KAAKkB,SAASiM,MAAM+b,aAAe,MAGrCtC,gBAAA,WACE,IAAMhV,EAAO1V,SAASkT,KAAK7B,wBAC3BvN,KAAKymB,mBAAqBzqB,KAAKmkB,MAAMvO,EAAKO,KAAOP,EAAKQ,OAAS9N,OAAOgR,WACtEtV,KAAK2mB,gBAAkB3mB,KAAKmpB,wBAG9BtC,cAAA,WAAgB,IAAAuC,EAAAppB,KACd,GAAIA,KAAKymB,mBAAoB,CAG3B,IAAM4C,EAAe,GAAG7kB,MAAMlG,KAAKpC,SAASuI,iBAAiB0hB,KACvDmD,EAAgB,GAAG9kB,MAAMlG,KAAKpC,SAASuI,iBA3anB,gBA8a1B3H,EAAAA,QAAEusB,GAAchnB,MAAK,SAACwF,EAAOxL,GAC3B,IAAMktB,EAAgBltB,EAAQ8Q,MAAM+b,aAC9BM,EAAoB1sB,EAAAA,QAAET,GAASU,IAAI,iBACzCD,EAAAA,QAAET,GACCkG,KAAK,gBAAiBgnB,GACtBxsB,IAAI,gBAAoBG,WAAWssB,GAAqBJ,EAAKzC,gBAFhE,SAMF7pB,EAAAA,QAAEwsB,GAAejnB,MAAK,SAACwF,EAAOxL,GAC5B,IAAMotB,EAAeptB,EAAQ8Q,MAAM0K,YAC7B6R,EAAmB5sB,EAAAA,QAAET,GAASU,IAAI,gBACxCD,EAAAA,QAAET,GACCkG,KAAK,eAAgBknB,GACrB1sB,IAAI,eAAmBG,WAAWwsB,GAAoBN,EAAKzC,gBAF9D,SAMF,IAAM4C,EAAgBrtB,SAASkT,KAAKjC,MAAM+b,aACpCM,EAAoB1sB,EAAAA,QAAEZ,SAASkT,MAAMrS,IAAI,iBAC/CD,EAAAA,QAAEZ,SAASkT,MACR7M,KAAK,gBAAiBgnB,GACtBxsB,IAAI,gBAAoBG,WAAWssB,GAAqBxpB,KAAK2mB,gBAFhE,MAKF7pB,EAAAA,QAAEZ,SAASkT,MAAM/E,SAASqb,OAG5B8C,gBAAA,WAEE,IAAMa,EAAe,GAAG7kB,MAAMlG,KAAKpC,SAASuI,iBAAiB0hB,KAC7DrpB,EAAAA,QAAEusB,GAAchnB,MAAK,SAACwF,EAAOxL,GAC3B,IAAM0Z,EAAUjZ,EAAAA,QAAET,GAASkG,KAAK,iBAChCzF,EAAAA,QAAET,GAASqF,WAAW,iBACtBrF,EAAQ8Q,MAAM+b,aAAenT,GAAoB,MAInD,IAAM4T,EAAW,GAAGnlB,MAAMlG,KAAKpC,SAASuI,iBAAT,gBAC/B3H,EAAAA,QAAE6sB,GAAUtnB,MAAK,SAACwF,EAAOxL,GACvB,IAAMutB,EAAS9sB,EAAAA,QAAET,GAASkG,KAAK,gBACT,oBAAXqnB,GACT9sB,EAAAA,QAAET,GAASU,IAAI,eAAgB6sB,GAAQloB,WAAW,mBAKtD,IAAMqU,EAAUjZ,EAAAA,QAAEZ,SAASkT,MAAM7M,KAAK,iBACtCzF,EAAAA,QAAEZ,SAASkT,MAAM1N,WAAW,iBAC5BxF,SAASkT,KAAKjC,MAAM+b,aAAenT,GAAoB,MAGzDoT,mBAAA,WACE,IAAMU,EAAY3tB,SAAS0sB,cAAc,OACzCiB,EAAUhB,UA7fwB,0BA8flC3sB,SAASkT,KAAK0Y,YAAY+B,GAC1B,IAAMC,EAAiBD,EAAUtc,wBAAwBwF,MAAQ8W,EAAUzV,YAE3E,OADAlY,SAASkT,KAAKgM,YAAYyO,GACnBC,KAIF1nB,iBAAP,SAAwBpE,EAAQ2L,GAC9B,OAAO3J,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAClBwF,EAAO2B,EAAA,GACR/C,GACArI,EAAAA,QAAEkD,MAAMuC,OACW,iBAAXvE,GAAuBA,EAASA,EAAS,IAQtD,GALKuE,IACHA,EAAO,IAAI8jB,EAAMrmB,KAAMuG,GACvBzJ,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,GAAQ2L,QACJpD,EAAQqG,MACjBrK,EAAKqK,KAAKjD,oCA/dhB,WACE,MApEY,6BAuEd,WACE,OAAOxE,SAnBLkhB,GAufNvpB,EAAAA,QAAEZ,UAAUyG,GAlhBc,0BAIG,yBA8gB8B,SAAUvC,GAAO,IACtEK,EADsEspB,EAAA/pB,KAEpE1D,EAAWT,EAAKO,uBAAuB4D,MAEzC1D,IACFmE,EAASvE,SAASQ,cAAcJ,IAGlC,IAAM0B,EAASlB,EAAAA,QAAE2D,GAAQ8B,KAAKxB,IAC5B,SADamH,EAAA,GAERpL,EAAAA,QAAE2D,GAAQ8B,OACVzF,EAAAA,QAAEkD,MAAMuC,QAGM,MAAjBvC,KAAKqE,SAAoC,SAAjBrE,KAAKqE,SAC/BjE,EAAMsC,iBAGR,IAAMsL,EAAUlR,EAAAA,QAAE2D,GAAQP,IAAI2lB,IAAY,SAAArB,GACpCA,EAAUjjB,sBAKdyM,EAAQ9N,IAAIqjB,IAAc,WACpBzmB,EAAAA,QAAEitB,GAAMrpB,GAAG,aACbqpB,EAAKlmB,cAKXwiB,GAAMjkB,iBAAiB9D,KAAKxB,EAAAA,QAAE2D,GAASzC,EAAQgC,SAOjDlD,EAAAA,QAAE6C,GAAF,MAAa0mB,GAAMjkB,iBACnBtF,EAAAA,QAAE6C,GAAF,MAAWiD,YAAcyjB,GACzBvpB,EAAAA,QAAE6C,GAAF,MAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,MAAaqB,GACNqlB,GAAMjkB,kBC9lBf,IAAM4nB,GAAW,CACf,aACA,OACA,OACA,WACA,WACA,SACA,MACA,cA4CIC,GAAmB,iEAOnBC,GAAmB,qIAyBlB,SAASC,GAAaC,EAAYC,EAAWC,GAClD,GAA0B,IAAtBF,EAAWxlB,OACb,OAAOwlB,EAGT,GAAIE,GAAoC,mBAAfA,EACvB,OAAOA,EAAWF,GAQpB,IALA,IACMG,GADY,IAAIjmB,OAAOkmB,WACKC,gBAAgBL,EAAY,aACxDM,EAAgBvsB,OAAOyY,KAAKyT,GAC5BV,EAAW,GAAGnlB,MAAMlG,KAAKisB,EAAgBnb,KAAK3K,iBAAiB,MAZPkmB,EAAA,SAcrDjmB,EAAOC,GACd,IAAMiR,EAAK+T,EAASjlB,GACdkmB,EAAShV,EAAG3G,SAASrQ,cAE3B,IAA0D,IAAtD8rB,EAActhB,QAAQwM,EAAG3G,SAASrQ,eAGpC,OAFAgX,EAAGrW,WAAW6b,YAAYxF,GAE1B,WAGF,IAAMiV,EAAgB,GAAGrmB,MAAMlG,KAAKsX,EAAGgE,YAEjCkR,EAAwB,GAAGxN,OAAO+M,EAAU,MAAQ,GAAIA,EAAUO,IAAW,IAEnFC,EAAcxR,SAAQ,SAAAjM,IAnD1B,SAA0BA,EAAM2d,GAC9B,IAAMC,EAAW5d,EAAK6B,SAASrQ,cAE/B,IAAgD,IAA5CmsB,EAAqB3hB,QAAQ4hB,GAC/B,OAAoC,IAAhChB,GAAS5gB,QAAQ4hB,IACZttB,QAAQusB,GAAiBnrB,KAAKsO,EAAK6d,YAAcf,GAAiBprB,KAAKsO,EAAK6d,YASvF,IAHA,IAAMC,EAASH,EAAqB3e,QAAO,SAAA+e,GAAS,OAAIA,aAAqBtsB,UAGpE6F,EAAI,EAAGC,EAAMumB,EAAOtmB,OAAQF,EAAIC,EAAKD,IAC5C,GAAIwmB,EAAOxmB,GAAG5F,KAAKksB,GACjB,OAAO,EAIX,OAAO,GAgCEI,CAAiBhe,EAAM0d,IAC1BlV,EAAGoF,gBAAgB5N,EAAK6B,cAhBrBvK,EAAI,EAAGC,EAAMglB,EAAS/kB,OAAQF,EAAIC,EAAKD,IAAKimB,EAA5CjmB,GAqBT,OAAO6lB,EAAgBnb,KAAKic,UC9G9B,IAAMvmB,GAAO,UAEP/D,GAAW,aAEXC,GAAqBlE,EAAAA,QAAE6C,GAAF,QAErB2rB,GAAqB,IAAIzsB,OAAJ,wBAAyC,KAC9D0sB,GAAwB,CAAC,WAAY,YAAa,cAElD5F,GAAkB,OAClBpa,GAAkB,OAElBigB,GAAmB,OACnBC,GAAkB,MAKlBC,GAAgB,QAChBC,GAAgB,QAIhBC,GAAgB,CACpBC,KAAM,OACNC,IAAK,MACLC,MAAO,QACPC,OAAQ,SACRC,KAAM,QAGF9mB,GAAU,CACd+mB,WAAW,EACXC,SAAU,uGAGV3uB,QAAS,cACT4uB,MAAO,GACPC,MAAO,EACP5a,MAAM,EACNnV,UAAU,EACVka,UAAW,MACXhB,OAAQ,EACR8W,WAAW,EACXC,kBAAmB,OACnB5I,SAAU,eACV6I,YAAa,GACbC,UAAU,EACVnC,WAAY,KACZD,UD7C8B,CAE9B,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAJP,kBAK7BrT,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC/BF,KAAM,GACNG,EAAG,GACHyV,GAAI,GACJC,IAAK,GACLC,KAAM,GACNC,IAAK,GACLC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJ3oB,EAAG,GACH4oB,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChDC,GAAI,GACJC,GAAI,GACJC,EAAG,GACHC,IAAK,GACLC,EAAG,GACHC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,OAAQ,GACRC,EAAG,GACHC,GAAI,ICeJrK,aAAc,MAGVne,GAAc,CAClBwmB,UAAW,UACXC,SAAU,SACVC,MAAO,4BACP5uB,QAAS,SACT6uB,MAAO,kBACP5a,KAAM,UACNnV,SAAU,mBACVka,UAAW,oBACXhB,OAAQ,2BACR8W,UAAW,2BACXC,kBAAmB,iBACnB5I,SAAU,mBACV6I,YAAa,oBACbC,SAAU,UACVnC,WAAY,kBACZD,UAAW,SACXxG,aAAc,iBAGV/hB,GAAQ,CACZqsB,KAAI,kBACJC,OAAM,oBACNC,KAAI,kBACJC,MAAK,mBACLC,SAAQ,sBACRC,MAAK,mBACLC,QAAO,qBACPC,SAAQ,sBACRC,WAAU,wBACVC,WAAU,yBAONC,GAAAA,WACJ,SAAAA,EAAYxyB,EAAS2B,GACnB,GAAsB,oBAAX4kB,GACT,MAAM,IAAInjB,UAAU,+DAItBO,KAAK8uB,YAAa,EAClB9uB,KAAK+uB,SAAW,EAChB/uB,KAAKgvB,YAAc,GACnBhvB,KAAKivB,eAAiB,GACtBjvB,KAAK+jB,QAAU,KAGf/jB,KAAK3D,QAAUA,EACf2D,KAAKhC,OAASgC,KAAKwG,WAAWxI,GAC9BgC,KAAKkvB,IAAM,KAEXlvB,KAAKmvB,2CAiCPC,OAAA,WACEpvB,KAAK8uB,YAAa,KAGpBO,QAAA,WACErvB,KAAK8uB,YAAa,KAGpBQ,cAAA,WACEtvB,KAAK8uB,YAAc9uB,KAAK8uB,cAG1B1rB,OAAA,SAAOhD,GACL,GAAKJ,KAAK8uB,WAIV,GAAI1uB,EAAO,CACT,IAAMmvB,EAAUvvB,KAAK+kB,YAAYhkB,SAC7BqkB,EAAUtoB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,GAErCnK,IACHA,EAAU,IAAIplB,KAAK+kB,YACjB3kB,EAAMyN,cACN7N,KAAKwvB,sBAEP1yB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,EAASnK,IAGvCA,EAAQ6J,eAAeQ,OAASrK,EAAQ6J,eAAeQ,MAEnDrK,EAAQsK,uBACVtK,EAAQuK,OAAO,KAAMvK,GAErBA,EAAQwK,OAAO,KAAMxK,OAElB,CACL,GAAItoB,EAAAA,QAAEkD,KAAK6vB,iBAAiB7tB,SAASuJ,IAEnC,YADAvL,KAAK4vB,OAAO,KAAM5vB,MAIpBA,KAAK2vB,OAAO,KAAM3vB,UAItByB,QAAA,WACEuH,aAAahJ,KAAK+uB,UAElBjyB,EAAAA,QAAE4E,WAAW1B,KAAK3D,QAAS2D,KAAK+kB,YAAYhkB,UAE5CjE,EAAAA,QAAEkD,KAAK3D,SAAS4L,IAAIjI,KAAK+kB,YAAY+K,WACrChzB,EAAAA,QAAEkD,KAAK3D,SAASuF,QAAQ,UAAUqG,IAAI,gBAAiBjI,KAAK+vB,mBAExD/vB,KAAKkvB,KACPpyB,EAAAA,QAAEkD,KAAKkvB,KAAK/sB,SAGdnC,KAAK8uB,WAAa,KAClB9uB,KAAK+uB,SAAW,KAChB/uB,KAAKgvB,YAAc,KACnBhvB,KAAKivB,eAAiB,KAClBjvB,KAAK+jB,SACP/jB,KAAK+jB,QAAQhJ,UAGf/a,KAAK+jB,QAAU,KACf/jB,KAAK3D,QAAU,KACf2D,KAAKhC,OAAS,KACdgC,KAAKkvB,IAAM,QAGbtiB,KAAA,WAAO,IAAA7M,EAAAC,KACL,GAAuC,SAAnClD,EAAAA,QAAEkD,KAAK3D,SAASU,IAAI,WACtB,MAAM,IAAIgC,MAAM,uCAGlB,IAAMylB,EAAY1nB,EAAAA,QAAEgF,MAAM9B,KAAK+kB,YAAYjjB,MAAMusB,MACjD,GAAIruB,KAAKgwB,iBAAmBhwB,KAAK8uB,WAAY,CAC3ChyB,EAAAA,QAAEkD,KAAK3D,SAASmB,QAAQgnB,GAExB,IAAMyL,EAAap0B,EAAKoD,eAAee,KAAK3D,SACtC6zB,EAAapzB,EAAAA,QAAE6G,SACJ,OAAfssB,EAAsBA,EAAajwB,KAAK3D,QAAQwS,cAAc3P,gBAC9Dc,KAAK3D,SAGP,GAAImoB,EAAUjjB,uBAAyB2uB,EACrC,OAGF,IAAMhB,EAAMlvB,KAAK6vB,gBACXM,EAAQt0B,EAAKC,OAAOkE,KAAK+kB,YAAYjgB,MAE3CoqB,EAAInrB,aAAa,KAAMosB,GACvBnwB,KAAK3D,QAAQ0H,aAAa,mBAAoBosB,GAE9CnwB,KAAKowB,aAEDpwB,KAAKhC,OAAOkuB,WACdpvB,EAAAA,QAAEoyB,GAAK7kB,SAASsb,IAGlB,IAAMnP,EAA6C,mBAA1BxW,KAAKhC,OAAOwY,UACnCxW,KAAKhC,OAAOwY,UAAUlY,KAAK0B,KAAMkvB,EAAKlvB,KAAK3D,SAC3C2D,KAAKhC,OAAOwY,UAER6Z,EAAarwB,KAAKswB,eAAe9Z,GACvCxW,KAAKuwB,mBAAmBF,GAExB,IAAM/D,EAAYtsB,KAAKwwB,gBACvB1zB,EAAAA,QAAEoyB,GAAK3sB,KAAKvC,KAAK+kB,YAAYhkB,SAAUf,MAElClD,EAAAA,QAAE6G,SAAS3D,KAAK3D,QAAQwS,cAAc3P,gBAAiBc,KAAKkvB,MAC/DpyB,EAAAA,QAAEoyB,GAAKpG,SAASwD,GAGlBxvB,EAAAA,QAAEkD,KAAK3D,SAASmB,QAAQwC,KAAK+kB,YAAYjjB,MAAMysB,UAE/CvuB,KAAK+jB,QAAU,IAAInB,GAAO5iB,KAAK3D,QAAS6yB,EAAKlvB,KAAK2kB,iBAAiB0L,IAEnEvzB,EAAAA,QAAEoyB,GAAK7kB,SAASkB,IAChBzO,EAAAA,QAAEoyB,GAAK7kB,SAASrK,KAAKhC,OAAOwuB,aAMxB,iBAAkBtwB,SAASgD,iBAC7BpC,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWzH,GAAG,YAAa,KAAM7F,EAAAA,QAAE8nB,MAGtD,IAAM6L,EAAW,WACX1wB,EAAK/B,OAAOkuB,WACdnsB,EAAK2wB,iBAGP,IAAMC,EAAiB5wB,EAAKivB,YAC5BjvB,EAAKivB,YAAc,KAEnBlyB,EAAAA,QAAEiD,EAAK1D,SAASmB,QAAQuC,EAAKglB,YAAYjjB,MAAMwsB,OAE3CqC,IAAmBlF,IACrB1rB,EAAK6vB,OAAO,KAAM7vB,IAItB,GAAIjD,EAAAA,QAAEkD,KAAKkvB,KAAKltB,SAAS2jB,IAAkB,CACzC,IAAM9oB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkvB,KAEtEpyB,EAAAA,QAAEkD,KAAKkvB,KACJhvB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,QAKN9jB,KAAA,SAAK4O,GAAU,IAAAjT,EAAAtI,KACPkvB,EAAMlvB,KAAK6vB,gBACXhL,EAAY/nB,EAAAA,QAAEgF,MAAM9B,KAAK+kB,YAAYjjB,MAAMqsB,MAC3CsC,EAAW,WACXnoB,EAAK0mB,cAAgBxD,IAAoB0D,EAAI3vB,YAC/C2vB,EAAI3vB,WAAW6b,YAAY8T,GAG7B5mB,EAAKsoB,iBACLtoB,EAAKjM,QAAQ2e,gBAAgB,oBAC7Ble,EAAAA,QAAEwL,EAAKjM,SAASmB,QAAQ8K,EAAKyc,YAAYjjB,MAAMssB,QAC1B,OAAjB9lB,EAAKyb,SACPzb,EAAKyb,QAAQhJ,UAGXQ,GACFA,KAMJ,GAFAze,EAAAA,QAAEkD,KAAK3D,SAASmB,QAAQqnB,IAEpBA,EAAUtjB,qBAAd,CAgBA,GAZAzE,EAAAA,QAAEoyB,GAAKntB,YAAYwJ,IAIf,iBAAkBrP,SAASgD,iBAC7BpC,EAAAA,QAAEZ,SAASkT,MAAMhF,WAAWnC,IAAI,YAAa,KAAMnL,EAAAA,QAAE8nB,MAGvD5kB,KAAKivB,eAAL,OAAqC,EACrCjvB,KAAKivB,eAAL,OAAqC,EACrCjvB,KAAKivB,eAAL,OAAqC,EAEjCnyB,EAAAA,QAAEkD,KAAKkvB,KAAKltB,SAAS2jB,IAAkB,CACzC,IAAM9oB,EAAqBhB,EAAKe,iCAAiCsyB,GAEjEpyB,EAAAA,QAAEoyB,GACChvB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,IAGFzwB,KAAKgvB,YAAc,OAGrBvV,OAAA,WACuB,OAAjBzZ,KAAK+jB,SACP/jB,KAAK+jB,QAAQ9H,oBAKjB+T,cAAA,WACE,OAAOtyB,QAAQsC,KAAK6wB,eAGtBN,mBAAA,SAAmBF,GACjBvzB,EAAAA,QAAEkD,KAAK6vB,iBAAiBxlB,SAAYymB,cAAgBT,MAGtDR,cAAA,WAEE,OADA7vB,KAAKkvB,IAAMlvB,KAAKkvB,KAAOpyB,EAAAA,QAAEkD,KAAKhC,OAAOmuB,UAAU,GACxCnsB,KAAKkvB,OAGdkB,WAAA,WACE,IAAMlB,EAAMlvB,KAAK6vB,gBACjB7vB,KAAK+wB,kBAAkBj0B,EAAAA,QAAEoyB,EAAIzqB,iBAtWF,mBAsW6CzE,KAAK6wB,YAC7E/zB,EAAAA,QAAEoyB,GAAKntB,YAAe4jB,gBAGxBoL,kBAAA,SAAkBzuB,EAAU0uB,GACH,iBAAZA,IAAyBA,EAAQnzB,WAAYmzB,EAAQpxB,OAa5DI,KAAKhC,OAAOyT,MACVzR,KAAKhC,OAAOyuB,WACduE,EAAU7G,GAAa6G,EAAShxB,KAAKhC,OAAOqsB,UAAWrqB,KAAKhC,OAAOssB,aAGrEhoB,EAASmP,KAAKuf,IAEd1uB,EAAS2uB,KAAKD,GAlBVhxB,KAAKhC,OAAOyT,KACT3U,EAAAA,QAAEk0B,GAASrvB,SAASjB,GAAG4B,IAC1BA,EAAS4uB,QAAQC,OAAOH,GAG1B1uB,EAAS2uB,KAAKn0B,EAAAA,QAAEk0B,GAASC,WAiB/BJ,SAAA,WACE,IAAIzE,EAAQpsB,KAAK3D,QAAQE,aAAa,uBAQtC,OANK6vB,IACHA,EAAqC,mBAAtBpsB,KAAKhC,OAAOouB,MACzBpsB,KAAKhC,OAAOouB,MAAM9tB,KAAK0B,KAAK3D,SAC5B2D,KAAKhC,OAAOouB,OAGTA,KAITzH,iBAAA,SAAiB0L,GAAY,IAAA5nB,EAAAzI,KAuB3B,OAAAkI,EAAA,GAtBwB,CACtBsO,UAAW6Z,EACXrX,UAAW,CACTxD,OAAQxV,KAAKklB,aACblL,KAAM,CACJsG,SAAUtgB,KAAKhC,OAAOuuB,mBAExB9M,MAAO,CACLpjB,QAxZa,UA0ZfwiB,gBAAiB,CACf7I,kBAAmBhW,KAAKhC,OAAO2lB,WAGnCtJ,SAAU,SAAA9X,GACJA,EAAK0X,oBAAsB1X,EAAKiU,WAClC/N,EAAK2oB,6BAA6B7uB,IAGtC6X,SAAU,SAAA7X,GAAI,OAAIkG,EAAK2oB,6BAA6B7uB,KAKjDvC,KAAKhC,OAAO6lB,iBAInBqB,WAAA,WAAa,IAAAva,EAAA3K,KACLwV,EAAS,GAef,MAbkC,mBAAvBxV,KAAKhC,OAAOwX,OACrBA,EAAO7V,GAAK,SAAA4C,GAMV,OALAA,EAAK0R,QAAL/L,EAAA,GACK3F,EAAK0R,QACLtJ,EAAK3M,OAAOwX,OAAOjT,EAAK0R,QAAStJ,EAAKtO,UAGpCkG,GAGTiT,EAAOA,OAASxV,KAAKhC,OAAOwX,OAGvBA,KAGTgb,cAAA,WACE,OAA8B,IAA1BxwB,KAAKhC,OAAOsuB,UACPpwB,SAASkT,KAGdvT,EAAK8B,UAAUqC,KAAKhC,OAAOsuB,WACtBxvB,EAAAA,QAAEkD,KAAKhC,OAAOsuB,WAGhBxvB,EAAAA,QAAEZ,UAAUyc,KAAK3Y,KAAKhC,OAAOsuB,cAGtCgE,eAAA,SAAe9Z,GACb,OAAOoV,GAAcpV,EAAUxX,kBAGjCmwB,cAAA,WAAgB,IAAAjH,EAAAloB,KACGA,KAAKhC,OAAOR,QAAQJ,MAAM,KAElCic,SAAQ,SAAA7b,GACf,GAAgB,UAAZA,EACFV,EAAAA,QAAEorB,EAAK7rB,SAASsG,GACdulB,EAAKnD,YAAYjjB,MAAM0sB,MACvBtG,EAAKlqB,OAAO1B,UACZ,SAAA8D,GAAK,OAAI8nB,EAAK9kB,OAAOhD,WAElB,GApdU,WAodN5C,EAA4B,CACrC,IAAM6zB,EAAU7zB,IAAYkuB,GAC1BxD,EAAKnD,YAAYjjB,MAAM6sB,WACvBzG,EAAKnD,YAAYjjB,MAAM2sB,QACnB6C,EAAW9zB,IAAYkuB,GAC3BxD,EAAKnD,YAAYjjB,MAAM8sB,WACvB1G,EAAKnD,YAAYjjB,MAAM4sB,SAEzB5xB,EAAAA,QAAEorB,EAAK7rB,SACJsG,GAAG0uB,EAASnJ,EAAKlqB,OAAO1B,UAAU,SAAA8D,GAAK,OAAI8nB,EAAKyH,OAAOvvB,MACvDuC,GAAG2uB,EAAUpJ,EAAKlqB,OAAO1B,UAAU,SAAA8D,GAAK,OAAI8nB,EAAK0H,OAAOxvB,UAI/DJ,KAAK+vB,kBAAoB,WACnB7H,EAAK7rB,SACP6rB,EAAKvb,QAIT7P,EAAAA,QAAEkD,KAAK3D,SAASuF,QAAQ,UAAUe,GAAG,gBAAiB3C,KAAK+vB,mBAEvD/vB,KAAKhC,OAAO1B,SACd0D,KAAKhC,OAALkK,EAAA,GACKlI,KAAKhC,OADV,CAEER,QAAS,SACTlB,SAAU,KAGZ0D,KAAKuxB,eAITA,UAAA,WACE,IAAMC,SAAmBxxB,KAAK3D,QAAQE,aAAa,wBAE/CyD,KAAK3D,QAAQE,aAAa,UAA0B,WAAdi1B,KACxCxxB,KAAK3D,QAAQ0H,aACX,sBACA/D,KAAK3D,QAAQE,aAAa,UAAY,IAGxCyD,KAAK3D,QAAQ0H,aAAa,QAAS,QAIvC4rB,OAAA,SAAOvvB,EAAOglB,GACZ,IAAMmK,EAAUvvB,KAAK+kB,YAAYhkB,UACjCqkB,EAAUA,GAAWtoB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,MAG/CnK,EAAU,IAAIplB,KAAK+kB,YACjB3kB,EAAMyN,cACN7N,KAAKwvB,sBAEP1yB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,EAASnK,IAGnChlB,IACFglB,EAAQ6J,eACS,YAAf7uB,EAAMoD,KAAqBmoB,GAAgBD,KACzC,GAGF5uB,EAAAA,QAAEsoB,EAAQyK,iBAAiB7tB,SAASuJ,KAAoB6Z,EAAQ4J,cAAgBxD,GAClFpG,EAAQ4J,YAAcxD,IAIxBxiB,aAAaoc,EAAQ2J,UAErB3J,EAAQ4J,YAAcxD,GAEjBpG,EAAQpnB,OAAOquB,OAAUjH,EAAQpnB,OAAOquB,MAAMzf,KAKnDwY,EAAQ2J,SAAW5uB,YAAW,WACxBilB,EAAQ4J,cAAgBxD,IAC1BpG,EAAQxY,SAETwY,EAAQpnB,OAAOquB,MAAMzf,MARtBwY,EAAQxY,WAWZgjB,OAAA,SAAOxvB,EAAOglB,GACZ,IAAMmK,EAAUvvB,KAAK+kB,YAAYhkB,UACjCqkB,EAAUA,GAAWtoB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,MAG/CnK,EAAU,IAAIplB,KAAK+kB,YACjB3kB,EAAMyN,cACN7N,KAAKwvB,sBAEP1yB,EAAAA,QAAEsD,EAAMyN,eAAetL,KAAKgtB,EAASnK,IAGnChlB,IACFglB,EAAQ6J,eACS,aAAf7uB,EAAMoD,KAAsBmoB,GAAgBD,KAC1C,GAGFtG,EAAQsK,yBAIZ1mB,aAAaoc,EAAQ2J,UAErB3J,EAAQ4J,YAAcvD,GAEjBrG,EAAQpnB,OAAOquB,OAAUjH,EAAQpnB,OAAOquB,MAAM1f,KAKnDyY,EAAQ2J,SAAW5uB,YAAW,WACxBilB,EAAQ4J,cAAgBvD,IAC1BrG,EAAQzY,SAETyY,EAAQpnB,OAAOquB,MAAM1f,MARtByY,EAAQzY,WAWZ+iB,qBAAA,WACE,IAAK,IAAMlyB,KAAWwC,KAAKivB,eACzB,GAAIjvB,KAAKivB,eAAezxB,GACtB,OAAO,EAIX,OAAO,KAGTgJ,WAAA,SAAWxI,GACT,IAAMyzB,EAAiB30B,EAAAA,QAAEkD,KAAK3D,SAASkG,OAwCvC,OAtCApE,OAAOyY,KAAK6a,GACTpY,SAAQ,SAAAqY,IAC0C,IAA7CnG,GAAsBniB,QAAQsoB,WACzBD,EAAeC,MAUA,iBAN5B1zB,EAAMkK,EAAA,GACDlI,KAAK+kB,YAAY5f,QACjBssB,EACmB,iBAAXzzB,GAAuBA,EAASA,EAAS,KAGpCquB,QAChBruB,EAAOquB,MAAQ,CACbzf,KAAM5O,EAAOquB,MACb1f,KAAM3O,EAAOquB,QAIW,iBAAjBruB,EAAOouB,QAChBpuB,EAAOouB,MAAQpuB,EAAOouB,MAAM1tB,YAGA,iBAAnBV,EAAOgzB,UAChBhzB,EAAOgzB,QAAUhzB,EAAOgzB,QAAQtyB,YAGlC7C,EAAKiC,gBACHgH,GACA9G,EACAgC,KAAK+kB,YAAYrf,aAGf1H,EAAOyuB,WACTzuB,EAAOmuB,SAAWhC,GAAansB,EAAOmuB,SAAUnuB,EAAOqsB,UAAWrsB,EAAOssB,aAGpEtsB,KAGTwxB,mBAAA,WACE,IAAMxxB,EAAS,GAEf,GAAIgC,KAAKhC,OACP,IAAK,IAAM0V,KAAO1T,KAAKhC,OACjBgC,KAAK+kB,YAAY5f,QAAQuO,KAAS1T,KAAKhC,OAAO0V,KAChD1V,EAAO0V,GAAO1T,KAAKhC,OAAO0V,IAKhC,OAAO1V,KAGT4yB,eAAA,WACE,IAAMe,EAAO70B,EAAAA,QAAEkD,KAAK6vB,iBACd+B,EAAWD,EAAKvkB,KAAK,SAASzO,MAAM2sB,IACzB,OAAbsG,GAAqBA,EAAShtB,QAChC+sB,EAAK5vB,YAAY6vB,EAASC,KAAK,QAInCT,6BAAA,SAA6BU,GAC3B9xB,KAAKkvB,IAAM4C,EAAW7e,SAAS6C,OAC/B9V,KAAK4wB,iBACL5wB,KAAKuwB,mBAAmBvwB,KAAKswB,eAAewB,EAAWtb,eAGzDka,eAAA,WACE,IAAMxB,EAAMlvB,KAAK6vB,gBACXkC,EAAsB/xB,KAAKhC,OAAOkuB,UAEA,OAApCgD,EAAI3yB,aAAa,iBAIrBO,EAAAA,QAAEoyB,GAAKntB,YAAY4jB,IACnB3lB,KAAKhC,OAAOkuB,WAAY,EACxBlsB,KAAK2M,OACL3M,KAAK4M,OACL5M,KAAKhC,OAAOkuB,UAAY6F,MAInB3vB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,IACnBwF,EAA4B,iBAAXvI,GAAuBA,EAE9C,IAAKuE,IAAQ,eAAezD,KAAKd,MAI5BuE,IACHA,EAAO,IAAIssB,EAAQ7uB,KAAMuG,GACzBjE,EAASC,KAAKxB,GAAUwB,IAGJ,iBAAXvE,GAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA1mBX,WACE,MAhHY,6BAmHd,WACE,OAAOmH,qBAGT,WACE,OAAOL,yBAGT,WACE,OAAO/D,sBAGT,WACE,OAAOe,0BAGT,WACE,MAlIW,uCAqIb,WACE,OAAO4D,SA/CLmpB,GA0oBN/xB,EAAAA,QAAE6C,GAAF,QAAakvB,GAAQzsB,iBACrBtF,EAAAA,QAAE6C,GAAF,QAAWiD,YAAcisB,GACzB/xB,EAAAA,QAAE6C,GAAF,QAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,QAAaqB,GACN6tB,GAAQzsB,kBC1uBjB,IAEMrB,GAAW,aAEXC,GAAqBlE,EAAAA,QAAE6C,GAAF,QAErB2rB,GAAqB,IAAIzsB,OAAJ,wBAAyC,KAQ9DsG,GAAO+C,EAAA,GACR2mB,GAAQ1pB,QADA,CAEXqR,UAAW,QACXhZ,QAAS,QACTwzB,QAAS,GACT7E,SAAU,wIAMNzmB,GAAWwC,EAAA,GACZ2mB,GAAQnpB,YADI,CAEfsrB,QAAS,8BAGLlvB,GAAQ,CACZqsB,KAAI,kBACJC,OAAM,oBACNC,KAAI,kBACJC,MAAK,mBACLC,SAAQ,sBACRC,MAAK,mBACLC,QAAO,qBACPC,SAAQ,sBACRC,WAAU,wBACVC,WAAU,yBAONoD,GAAAA,SAAAA,wKA+BJhC,cAAA,WACE,OAAOhwB,KAAK6wB,YAAc7wB,KAAKiyB,iBAGjC1B,mBAAA,SAAmBF,GACjBvzB,EAAAA,QAAEkD,KAAK6vB,iBAAiBxlB,SAAYymB,cAAgBT,MAGtDR,cAAA,WAEE,OADA7vB,KAAKkvB,IAAMlvB,KAAKkvB,KAAOpyB,EAAAA,QAAEkD,KAAKhC,OAAOmuB,UAAU,GACxCnsB,KAAKkvB,OAGdkB,WAAA,WACE,IAAMuB,EAAO70B,EAAAA,QAAEkD,KAAK6vB,iBAGpB7vB,KAAK+wB,kBAAkBY,EAAKhZ,KApFT,mBAoF+B3Y,KAAK6wB,YACvD,IAAIG,EAAUhxB,KAAKiyB,cACI,mBAAZjB,IACTA,EAAUA,EAAQ1yB,KAAK0B,KAAK3D,UAG9B2D,KAAK+wB,kBAAkBY,EAAKhZ,KAzFP,iBAyF+BqY,GAEpDW,EAAK5vB,YAAe4jB,gBAItBsM,YAAA,WACE,OAAOjyB,KAAK3D,QAAQE,aAAa,iBAC/ByD,KAAKhC,OAAOgzB,WAGhBJ,eAAA,WACE,IAAMe,EAAO70B,EAAAA,QAAEkD,KAAK6vB,iBACd+B,EAAWD,EAAKvkB,KAAK,SAASzO,MAAM2sB,IACzB,OAAbsG,GAAqBA,EAAShtB,OAAS,GACzC+sB,EAAK5vB,YAAY6vB,EAASC,KAAK,QAK5BzvB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAClBwF,EAA4B,iBAAXvI,EAAsBA,EAAS,KAEtD,IAAKuE,IAAQ,eAAezD,KAAKd,MAI5BuE,IACHA,EAAO,IAAIyvB,EAAQhyB,KAAMuG,GACzBzJ,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,GAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA3FX,WACE,MAjDY,6BAoDd,WACE,OAAOmH,qBAGT,WACE,MA1DS,gCA6DX,WACE,OAAOpE,sBAGT,WACE,OAAOe,0BAGT,WACE,MAnEW,uCAsEb,WACE,OAAO4D,SA3BLssB,CAAgBnD,IAuGtB/xB,EAAAA,QAAE6C,GAAF,QAAaqyB,GAAQ5vB,iBACrBtF,EAAAA,QAAE6C,GAAF,QAAWiD,YAAcovB,GACzBl1B,EAAAA,QAAE6C,GAAF,QAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,QAAaqB,GACNgxB,GAAQ5vB,kBC1JjB,IAAM0C,GAAO,YAEP/D,GAAW,eAGXC,GAAqBlE,EAAAA,QAAE6C,GAAGmF,IAG1BhC,GAAoB,SAOpBovB,GAAkB,WAGlBC,GAA0B,oBAQ1BhtB,GAAU,CACdqQ,OAAQ,GACR4c,OAAQ,OACR3xB,OAAQ,IAGJiF,GAAc,CAClB8P,OAAQ,SACR4c,OAAQ,SACR3xB,OAAQ,oBAOJ4xB,GAAAA,WACJ,SAAAA,EAAYh2B,EAAS2B,GAAQ,IAAA+B,EAAAC,KAC3BA,KAAKkB,SAAW7E,EAChB2D,KAAKsyB,eAAqC,SAApBj2B,EAAQgI,QAAqBC,OAASjI,EAC5D2D,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAKsM,UAAetM,KAAKuG,QAAQ9F,OAAbT,cACKA,KAAKuG,QAAQ9F,OADlBT,qBAEKA,KAAKuG,QAAQ9F,OAFrB,kBAGjBT,KAAKuyB,SAAW,GAChBvyB,KAAKwyB,SAAW,GAChBxyB,KAAKyyB,cAAgB,KACrBzyB,KAAK0yB,cAAgB,EAErB51B,EAAAA,QAAEkD,KAAKsyB,gBAAgB3vB,GA5CT,uBA4C0B,SAAAvC,GAAK,OAAIL,EAAK4yB,SAASvyB,MAE/DJ,KAAK4yB,UACL5yB,KAAK2yB,sCAaPC,QAAA,WAAU,IAAAtqB,EAAAtI,KACF6yB,EAAa7yB,KAAKsyB,iBAAmBtyB,KAAKsyB,eAAehuB,OA1D7C,SA2DA4tB,GAEZY,EAAuC,SAAxB9yB,KAAKuG,QAAQ6rB,OAChCS,EAAa7yB,KAAKuG,QAAQ6rB,OAEtBW,EAAaD,IAAiBZ,GAClClyB,KAAKgzB,gBAAkB,EAEzBhzB,KAAKuyB,SAAW,GAChBvyB,KAAKwyB,SAAW,GAEhBxyB,KAAK0yB,cAAgB1yB,KAAKizB,mBAEV,GAAGzuB,MAAMlG,KAAKpC,SAASuI,iBAAiBzE,KAAKsM,YAG1DuK,KAAI,SAAAxa,GACH,IAAIoE,EACEyyB,EAAiBr3B,EAAKO,uBAAuBC,GAMnD,GAJI62B,IACFzyB,EAASvE,SAASQ,cAAcw2B,IAG9BzyB,EAAQ,CACV,IAAM0yB,EAAY1yB,EAAO8M,wBACzB,GAAI4lB,EAAUpgB,OAASogB,EAAUrgB,OAE/B,MAAO,CACLhW,EAAAA,QAAE2D,GAAQqyB,KAAgB7gB,IAAM8gB,EAChCG,GAKN,OAAO,QAER9mB,QAAO,SAAAqZ,GAAI,OAAIA,KACf1O,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE,GAAKC,EAAE,MACxBoC,SAAQ,SAAAoM,GACPnd,EAAKiqB,SAAShmB,KAAKkZ,EAAK,IACxBnd,EAAKkqB,SAASjmB,KAAKkZ,EAAK,UAI9BhkB,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5BjE,EAAAA,QAAEkD,KAAKsyB,gBAAgBrqB,IArHZ,iBAuHXjI,KAAKkB,SAAW,KAChBlB,KAAKsyB,eAAiB,KACtBtyB,KAAKuG,QAAU,KACfvG,KAAKsM,UAAY,KACjBtM,KAAKuyB,SAAW,KAChBvyB,KAAKwyB,SAAW,KAChBxyB,KAAKyyB,cAAgB,KACrBzyB,KAAK0yB,cAAgB,QAIvBlsB,WAAA,SAAWxI,GAMT,GAA6B,iBAL7BA,EAAMkK,EAAA,GACD/C,GACmB,iBAAXnH,GAAuBA,EAASA,EAAS,KAGpCyC,QAAuB5E,EAAK8B,UAAUK,EAAOyC,QAAS,CACtE,IAAIuL,EAAKlP,EAAAA,QAAEkB,EAAOyC,QAAQ2M,KAAK,MAC1BpB,IACHA,EAAKnQ,EAAKC,OAAOgJ,IACjBhI,EAAAA,QAAEkB,EAAOyC,QAAQ2M,KAAK,KAAMpB,IAG9BhO,EAAOyC,OAAP,IAAoBuL,EAKtB,OAFAnQ,EAAKiC,gBAAgBgH,GAAM9G,EAAQ0H,IAE5B1H,KAGTg1B,cAAA,WACE,OAAOhzB,KAAKsyB,iBAAmBhuB,OAC7BtE,KAAKsyB,eAAec,YAAcpzB,KAAKsyB,eAAexgB,aAG1DmhB,iBAAA,WACE,OAAOjzB,KAAKsyB,eAAe5K,cAAgB1rB,KAAK4W,IAC9C1W,SAASkT,KAAKsY,aACdxrB,SAASgD,gBAAgBwoB,iBAI7B2L,iBAAA,WACE,OAAOrzB,KAAKsyB,iBAAmBhuB,OAC7BA,OAAOiR,YAAcvV,KAAKsyB,eAAe/kB,wBAAwBuF,UAGrE6f,SAAA,WACE,IAAM7gB,EAAY9R,KAAKgzB,gBAAkBhzB,KAAKuG,QAAQiP,OAChDkS,EAAe1nB,KAAKizB,mBACpBK,EAAYtzB,KAAKuG,QAAQiP,OAASkS,EAAe1nB,KAAKqzB,mBAM5D,GAJIrzB,KAAK0yB,gBAAkBhL,GACzB1nB,KAAK4yB,UAGH9gB,GAAawhB,EAAjB,CACE,IAAM7yB,EAAST,KAAKwyB,SAASxyB,KAAKwyB,SAAS5tB,OAAS,GAEhD5E,KAAKyyB,gBAAkBhyB,GACzBT,KAAKuzB,UAAU9yB,OAJnB,CAUA,GAAIT,KAAKyyB,eAAiB3gB,EAAY9R,KAAKuyB,SAAS,IAAMvyB,KAAKuyB,SAAS,GAAK,EAG3E,OAFAvyB,KAAKyyB,cAAgB,UACrBzyB,KAAKwzB,SAIP,IAAK,IAAI9uB,EAAI1E,KAAKuyB,SAAS3tB,OAAQF,KACV1E,KAAKyyB,gBAAkBzyB,KAAKwyB,SAAS9tB,IACxDoN,GAAa9R,KAAKuyB,SAAS7tB,KACM,oBAAzB1E,KAAKuyB,SAAS7tB,EAAI,IACtBoN,EAAY9R,KAAKuyB,SAAS7tB,EAAI,KAGpC1E,KAAKuzB,UAAUvzB,KAAKwyB,SAAS9tB,QAKnC6uB,UAAA,SAAU9yB,GACRT,KAAKyyB,cAAgBhyB,EAErBT,KAAKwzB,SAEL,IAAMC,EAAUzzB,KAAKsM,UAClBlP,MAAM,KACNyZ,KAAI,SAAAva,GAAQ,OAAOA,EAAP,iBAAgCmE,EAAhC,MAA4CnE,EAA5C,UAA8DmE,EAA9D,QAETizB,EAAQ52B,EAAAA,QAAE,GAAG0H,MAAMlG,KAAKpC,SAASuI,iBAAiBgvB,EAAQ5B,KAAK,QAEjE6B,EAAM1xB,SApNmB,kBAqN3B0xB,EAAM9xB,QAtMc,aAuMjB+W,KArMwB,oBAsMxBtO,SAASvH,IACZ4wB,EAAMrpB,SAASvH,MAGf4wB,EAAMrpB,SAASvH,IAGf4wB,EAAMC,QAAQxB,IACX9qB,KAAQusB,+BACRvpB,SAASvH,IAEZ4wB,EAAMC,QAAQxB,IACX9qB,KAtNkB,aAuNlB+C,SAxNkB,aAyNlBC,SAASvH,KAGdhG,EAAAA,QAAEkD,KAAKsyB,gBAAgB90B,QArOP,wBAqO+B,CAC7CmM,cAAelJ,OAInB+yB,OAAA,WACE,GAAGhvB,MAAMlG,KAAKpC,SAASuI,iBAAiBzE,KAAKsM,YAC1CF,QAAO,SAAAkE,GAAI,OAAIA,EAAK5M,UAAUC,SAASb,OACvCuW,SAAQ,SAAA/I,GAAI,OAAIA,EAAK5M,UAAUvB,OAAOW,UAIpCV,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAIE,EAAOzF,EAAAA,QAAEkD,MAAMuC,KAAKxB,IAQxB,GALKwB,IACHA,EAAO,IAAI8vB,EAAUryB,KAHW,iBAAXhC,GAAuBA,GAI5ClB,EAAAA,QAAEkD,MAAMuC,KAAKxB,GAAUwB,IAGH,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCA5MX,WACE,MA9DY,6BAiEd,WACE,OAAOmH,SAzBLktB,GA0ONv1B,EAAAA,QAAEwH,QAAQ3B,GAxQe,8BAwQS,WAIhC,IAHA,IAAMkxB,EAAa,GAAGrvB,MAAMlG,KAAKpC,SAASuI,iBApQlB,wBAuQfC,EAFgBmvB,EAAWjvB,OAELF,KAAM,CACnC,IAAMovB,EAAOh3B,EAAAA,QAAE+2B,EAAWnvB,IAC1B2tB,GAAUjwB,iBAAiB9D,KAAKw1B,EAAMA,EAAKvxB,YAQ/CzF,EAAAA,QAAE6C,GAAGmF,IAAQutB,GAAUjwB,iBACvBtF,EAAAA,QAAE6C,GAAGmF,IAAMlC,YAAcyvB,GACzBv1B,EAAAA,QAAE6C,GAAGmF,IAAMjC,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAGmF,IAAQ9D,GACNqxB,GAAUjwB,kBCtSnB,IAEMrB,GAAW,SAGXC,GAAqBlE,EAAAA,QAAE6C,GAAF,IAGrBmD,GAAoB,SAEpB6iB,GAAkB,OAClBpa,GAAkB,OAUlBwoB,GAAkB,UAClBC,GAAqB,iBASrBC,GAAAA,WACJ,SAAAA,EAAY53B,GACV2D,KAAKkB,SAAW7E,6BASlBuQ,KAAA,WAAO,IAAA7M,EAAAC,KACL,KAAIA,KAAKkB,SAAS3B,YACdS,KAAKkB,SAAS3B,WAAW1B,WAAa+S,KAAKiX,cAC3C/qB,EAAAA,QAAEkD,KAAKkB,UAAUc,SAASc,KAC1BhG,EAAAA,QAAEkD,KAAKkB,UAAUc,SArCG,aAkCxB,CAOA,IAAIvB,EACAyzB,EACEC,EAAcr3B,EAAAA,QAAEkD,KAAKkB,UAAUU,QAhCT,qBAgC0C,GAChEtF,EAAWT,EAAKO,uBAAuB4D,KAAKkB,UAElD,GAAIizB,EAAa,CACf,IAAMC,EAAwC,OAAzBD,EAAYllB,UAA8C,OAAzBklB,EAAYllB,SAAoB+kB,GAAqBD,GAE3GG,GADAA,EAAWp3B,EAAAA,QAAEu3B,UAAUv3B,EAAAA,QAAEq3B,GAAaxb,KAAKyb,KACvBF,EAAStvB,OAAS,GAGxC,IAAMigB,EAAY/nB,EAAAA,QAAEgF,MAhDR,cAgD0B,CACpC6H,cAAe3J,KAAKkB,WAGhBsjB,EAAY1nB,EAAAA,QAAEgF,MAlDR,cAkD0B,CACpC6H,cAAeuqB,IASjB,GANIA,GACFp3B,EAAAA,QAAEo3B,GAAU12B,QAAQqnB,GAGtB/nB,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgnB,IAErBA,EAAUjjB,uBACVsjB,EAAUtjB,qBADd,CAKIjF,IACFmE,EAASvE,SAASQ,cAAcJ,IAGlC0D,KAAKuzB,UACHvzB,KAAKkB,SACLizB,GAGF,IAAM1D,EAAW,WACf,IAAM6D,EAAcx3B,EAAAA,QAAEgF,MA5EV,gBA4E8B,CACxC6H,cAAe5J,EAAKmB,WAGhB8mB,EAAalrB,EAAAA,QAAEgF,MA9EV,eA8E6B,CACtC6H,cAAeuqB,IAGjBp3B,EAAAA,QAAEo3B,GAAU12B,QAAQ82B,GACpBx3B,EAAAA,QAAEiD,EAAKmB,UAAU1D,QAAQwqB,IAGvBvnB,EACFT,KAAKuzB,UAAU9yB,EAAQA,EAAOlB,WAAYkxB,GAE1CA,SAIJhvB,QAAA,WACE3E,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5Bf,KAAKkB,SAAW,QAIlBqyB,UAAA,SAAUl3B,EAASiwB,EAAW/Q,GAAU,IAAAjT,EAAAtI,KAKhCu0B,IAJiBjI,GAAqC,OAAvBA,EAAUrd,UAA4C,OAAvBqd,EAAUrd,SAE5EnS,EAAAA,QAAEwvB,GAAWliB,SAAS2pB,IADtBj3B,EAAAA,QAAEwvB,GAAW3T,KAAKqb,KAGU,GACxBvmB,EAAkB8N,GAAagZ,GAAUz3B,EAAAA,QAAEy3B,GAAQvyB,SAAS2jB,IAC5D8K,EAAW,WAAA,OAAMnoB,EAAKksB,oBAC1Bn4B,EACAk4B,EACAhZ,IAGF,GAAIgZ,GAAU9mB,EAAiB,CAC7B,IAAM5Q,EAAqBhB,EAAKe,iCAAiC23B,GAEjEz3B,EAAAA,QAAEy3B,GACCxyB,YAAYwJ,IACZrL,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,OAIJ+D,oBAAA,SAAoBn4B,EAASk4B,EAAQhZ,GACnC,GAAIgZ,EAAQ,CACVz3B,EAAAA,QAAEy3B,GAAQxyB,YAAYe,IAEtB,IAAM2xB,EAAgB33B,EAAAA,QAAEy3B,EAAOh1B,YAAYoZ,KAvHV,4BAyH/B,GAEE8b,GACF33B,EAAAA,QAAE23B,GAAe1yB,YAAYe,IAGK,QAAhCyxB,EAAOh4B,aAAa,SACtBg4B,EAAOxwB,aAAa,iBAAiB,GAIzCjH,EAAAA,QAAET,GAASgO,SAASvH,IACiB,QAAjCzG,EAAQE,aAAa,SACvBF,EAAQ0H,aAAa,iBAAiB,GAGxClI,EAAKwB,OAAOhB,GAERA,EAAQqH,UAAUC,SAASgiB,KAC7BtpB,EAAQqH,UAAUmB,IAAI0G,IAGxB,IAAI5J,EAAStF,EAAQkD,WAKrB,GAJIoC,GAA8B,OAApBA,EAAOsN,WACnBtN,EAASA,EAAOpC,YAGdoC,GAAU7E,EAAAA,QAAE6E,GAAQK,SAtKK,iBAsK+B,CAC1D,IAAM0yB,EAAkB53B,EAAAA,QAAET,GAASuF,QA3Jf,aA2J0C,GAE9D,GAAI8yB,EAAiB,CACnB,IAAMC,EAAqB,GAAGnwB,MAAMlG,KAAKo2B,EAAgBjwB,iBAzJhC,qBA2JzB3H,EAAAA,QAAE63B,GAAoBtqB,SAASvH,IAGjCzG,EAAQ0H,aAAa,iBAAiB,GAGpCwX,GACFA,OAKGnZ,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMuyB,EAAQ93B,EAAAA,QAAEkD,MACZuC,EAAOqyB,EAAMryB,KAAKxB,IAOtB,GALKwB,IACHA,EAAO,IAAI0xB,EAAIj0B,MACf40B,EAAMryB,KAAKxB,GAAUwB,IAGD,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,uCAzKX,WACE,MArCY,cA8BVi2B,GAyLNn3B,EAAAA,QAAEZ,UACCyG,GAxMuB,wBAMG,mEAkMqB,SAAUvC,GACxDA,EAAMsC,iBACNuxB,GAAI7xB,iBAAiB9D,KAAKxB,EAAAA,QAAEkD,MAAO,WAOvClD,EAAAA,QAAE6C,GAAF,IAAas0B,GAAI7xB,iBACjBtF,EAAAA,QAAE6C,GAAF,IAAWiD,YAAcqxB,GACzBn3B,EAAAA,QAAE6C,GAAF,IAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,IAAaqB,GACNizB,GAAI7xB,kBCtOb,IAEMrB,GAAW,WAEXC,GAAqBlE,EAAAA,QAAE6C,GAAF,MAGrBk1B,GAAkB,OAClBtpB,GAAkB,OAClBupB,GAAqB,UAErB9O,GAAmB,yBAQnB7gB,GAAU,CACd+mB,WAAW,EACX6I,UAAU,EACV1I,MAAO,KAGH3mB,GAAc,CAClBwmB,UAAW,UACX6I,SAAU,UACV1I,MAAO,UAOH2I,GAAAA,WACJ,SAAAA,EAAY34B,EAAS2B,GACnBgC,KAAKkB,SAAW7E,EAChB2D,KAAKuG,QAAUvG,KAAKwG,WAAWxI,GAC/BgC,KAAK+uB,SAAW,KAChB/uB,KAAKmvB,2CAiBPviB,KAAA,WAAO,IAAA7M,EAAAC,KACCwkB,EAAY1nB,EAAAA,QAAEgF,MA5CR,iBA+CZ,GADAhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQgnB,IACrBA,EAAUjjB,qBAAd,CAIAvB,KAAKi1B,gBAEDj1B,KAAKuG,QAAQ2lB,WACflsB,KAAKkB,SAASwC,UAAUmB,IA9DN,QAiEpB,IAAM4rB,EAAW,WACf1wB,EAAKmB,SAASwC,UAAUvB,OAAO2yB,IAC/B/0B,EAAKmB,SAASwC,UAAUmB,IAAI0G,IAE5BzO,EAAAA,QAAEiD,EAAKmB,UAAU1D,QA5DN,kBA8DPuC,EAAKwG,QAAQwuB,WACfh1B,EAAKgvB,SAAW5uB,YAAW,WACzBJ,EAAK4M,SACJ5M,EAAKwG,QAAQ8lB,SAOpB,GAHArsB,KAAKkB,SAASwC,UAAUvB,OAAO0yB,IAC/Bh5B,EAAKwB,OAAO2C,KAAKkB,UACjBlB,KAAKkB,SAASwC,UAAUmB,IAAIiwB,IACxB90B,KAAKuG,QAAQ2lB,UAAW,CAC1B,IAAMrvB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,QAIJ9jB,KAAA,WACE,GAAK3M,KAAKkB,SAASwC,UAAUC,SAAS4H,IAAtC,CAIA,IAAMsZ,EAAY/nB,EAAAA,QAAEgF,MA3FR,iBA6FZhF,EAAAA,QAAEkD,KAAKkB,UAAU1D,QAAQqnB,GACrBA,EAAUtjB,sBAIdvB,KAAKk1B,aAGPzzB,QAAA,WACEzB,KAAKi1B,gBAEDj1B,KAAKkB,SAASwC,UAAUC,SAAS4H,KACnCvL,KAAKkB,SAASwC,UAAUvB,OAAOoJ,IAGjCzO,EAAAA,QAAEkD,KAAKkB,UAAU+G,IAAI+d,IAErBlpB,EAAAA,QAAE4E,WAAW1B,KAAKkB,SAAUH,IAC5Bf,KAAKkB,SAAW,KAChBlB,KAAKuG,QAAU,QAIjBC,WAAA,SAAWxI,GAaT,OAZAA,EAAMkK,EAAA,GACD/C,GACArI,EAAAA,QAAEkD,KAAKkB,UAAUqB,OACE,iBAAXvE,GAAuBA,EAASA,EAAS,IAGtDnC,EAAKiC,gBAvII,QAyIPE,EACAgC,KAAK+kB,YAAYrf,aAGZ1H,KAGTmxB,cAAA,WAAgB,IAAA7mB,EAAAtI,KACdlD,EAAAA,QAAEkD,KAAKkB,UAAUyB,GAAGqjB,GAhIM,0BAgIsC,WAAA,OAAM1d,EAAKqE,aAG7EuoB,OAAA,WAAS,IAAAzsB,EAAAzI,KACDywB,EAAW,WACfhoB,EAAKvH,SAASwC,UAAUmB,IAAIgwB,IAC5B/3B,EAAAA,QAAE2L,EAAKvH,UAAU1D,QA1IL,oBA8Id,GADAwC,KAAKkB,SAASwC,UAAUvB,OAAOoJ,IAC3BvL,KAAKuG,QAAQ2lB,UAAW,CAC1B,IAAMrvB,EAAqBhB,EAAKe,iCAAiCoD,KAAKkB,UAEtEpE,EAAAA,QAAEkD,KAAKkB,UACJhB,IAAIrE,EAAKD,eAAgB60B,GACzB5wB,qBAAqBhD,QAExB4zB,OAIJwE,cAAA,WACEjsB,aAAahJ,KAAK+uB,UAClB/uB,KAAK+uB,SAAW,QAIX3sB,iBAAP,SAAwBpE,GACtB,OAAOgC,KAAKqC,MAAK,WACf,IAAMC,EAAWxF,EAAAA,QAAEkD,MACfuC,EAAOD,EAASC,KAAKxB,IAQzB,GALKwB,IACHA,EAAO,IAAIyyB,EAAMh1B,KAHe,iBAAXhC,GAAuBA,GAI5CsE,EAASC,KAAKxB,GAAUwB,IAGJ,iBAAXvE,EAAqB,CAC9B,GAA4B,oBAAjBuE,EAAKvE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRuE,EAAKvE,GAAQgC,wCAhJnB,WACE,MA5CY,iCA+Cd,WACE,OAAO0F,wBAGT,WACE,OAAOP,SAlBL6vB,GAmKNl4B,EAAAA,QAAE6C,GAAF,MAAaq1B,GAAM5yB,iBACnBtF,EAAAA,QAAE6C,GAAF,MAAWiD,YAAcoyB,GACzBl4B,EAAAA,QAAE6C,GAAF,MAAWkD,WAAa,WAEtB,OADA/F,EAAAA,QAAE6C,GAAF,MAAaqB,GACNg0B,GAAM5yB","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Private TransitionEnd Helpers\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * Public Util API\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\n/**\n * Class definition\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n // Public\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\n/**\n * Class definition\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n // Public\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n this.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ?\n 0 :\n event.originalEvent.touches[0].clientX - this.touchStartX\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n // Check for Popper dependency\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element)\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n // eslint-disable-next-line unicorn/prefer-spread\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '
+ {% assign tags = '' | split: '' %}
{% for t in site.tags %}
{% assign tags = tags | push: t[0] %}
{% endfor %}
@@ -15,9 +14,9 @@
{% for t in sorted_tags %}
{% endfor %}
-
diff --git a/_posts/2020-7-23-org-in-a-box-architecture.md b/_posts/2020-7-23-org-in-a-box-architecture.md
index bdd5303d..2a427ed3 100644
--- a/_posts/2020-7-23-org-in-a-box-architecture.md
+++ b/_posts/2020-7-23-org-in-a-box-architecture.md
@@ -12,7 +12,7 @@ canon: https://blog.quantumlyconfused.com/org-in-a-box/2020/07/23/org-in-a-
tags:
- org-in-a-box
- architecture
- - IAM
+ - iam
- raspberry pi
- project
---
diff --git a/_posts/2022-5-8-qiskit-first-contribution.md b/_posts/2022-5-8-qiskit-first-contribution.md
index 626cfa21..aad37fed 100644
--- a/_posts/2022-5-8-qiskit-first-contribution.md
+++ b/_posts/2022-5-8-qiskit-first-contribution.md
@@ -11,7 +11,7 @@ keywords: quantum computing,qiskit,quantum,python,ibm,pennylane,qubits,quantum
thumbnail: https://blog.quantumlyconfused.com/assets/quantum-computing/qiskit-open-source/logo.png
canon: https://blog.quantumlyconfused.com/quantum-computing/2022/05/08/qiskit-first-contribution/
tags:
- - quantum computing
+ - quantum-computing
- qiskit
- open source
- github
diff --git a/_sass/abstracts/_breakpoints.scss b/_sass/abstracts/_breakpoints.scss
new file mode 100644
index 00000000..e40cefee
--- /dev/null
+++ b/_sass/abstracts/_breakpoints.scss
@@ -0,0 +1,73 @@
+@use 'sass:map';
+
+$-breakpoints: (
+ // 1 column
+ sm: 576px,
+ md: 768px,
+ // 2 columns
+ lg: 850px,
+ // 3 columns
+ xl: 1200px,
+ xxl: 1400px,
+ xxxl: 1650px
+);
+
+@function get($breakpoint) {
+ @return map.get($-breakpoints, $breakpoint);
+}
+
+/* Less than the given width */
+@mixin lt($width) {
+ @media all and (max-width: calc(#{$width} - 1px)) {
+ @content;
+ }
+}
+
+/* Less than or equal to the given width */
+@mixin lte($width) {
+ @media all and (max-width: $width) {
+ @content;
+ }
+}
+
+@mixin sm {
+ @media all and (min-width: get(sm)) {
+ @content;
+ }
+}
+
+@mixin md {
+ @media all and (min-width: get(md)) {
+ @content;
+ }
+}
+
+@mixin lg {
+ @media all and (min-width: get(lg)) {
+ @content;
+ }
+}
+
+@mixin xl {
+ @media all and (min-width: get(xl)) {
+ @content;
+ }
+}
+
+@mixin xxl {
+ @media all and (min-width: get(xxl)) {
+ @content;
+ }
+}
+
+@mixin xxxl {
+ @media all and (min-width: get(xxxl)) {
+ @content;
+ }
+}
+
+@mixin between($min, $max) {
+ @media all and (min-width: $min) and (max-width: $max) {
+ @content;
+ }
+}
diff --git a/_sass/abstracts/_index.scss b/_sass/abstracts/_index.scss
new file mode 100644
index 00000000..6c9e21cf
--- /dev/null
+++ b/_sass/abstracts/_index.scss
@@ -0,0 +1,4 @@
+@forward 'variables';
+@forward 'mixins';
+@forward 'placeholders';
+@forward 'breakpoints';
diff --git a/_sass/abstracts/_mixins.scss b/_sass/abstracts/_mixins.scss
new file mode 100644
index 00000000..b08bc811
--- /dev/null
+++ b/_sass/abstracts/_mixins.scss
@@ -0,0 +1,86 @@
+@mixin color-scheme($mode) {
+ @media (prefers-color-scheme: #{$mode}) {
+ @content;
+ }
+}
+
+@mixin text-ellipsis {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+@mixin mt-mb($value) {
+ margin-top: $value;
+ margin-bottom: $value;
+}
+
+@mixin ml-mr($value) {
+ margin-left: $value;
+ margin-right: $value;
+}
+
+@mixin pt-pb($val) {
+ padding-top: $val;
+ padding-bottom: $val;
+}
+
+@mixin pl-pr($val, $important: false) {
+ @if $important {
+ padding-left: $val !important;
+ padding-right: $val !important;
+ } @else {
+ padding-left: $val;
+ padding-right: $val;
+ }
+}
+
+@mixin placeholder {
+ color: var(--text-muted-color) !important;
+}
+
+@mixin placeholder-focus {
+ opacity: 0.6;
+}
+
+@mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) {
+ color: $color;
+ font-size: $font-size;
+ font-weight: $font-weight;
+}
+
+@mixin align-center {
+ position: relative;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+@mixin prompt($type, $fa-content, $fa-style: 'solid', $rotate: 0) {
+ &.prompt-#{$type} {
+ background-color: var(--prompt-#{$type}-bg);
+
+ &::before {
+ content: $fa-content;
+ color: var(--prompt-#{$type}-icon-color);
+ font: var(--fa-font-#{$fa-style});
+
+ @if $rotate != 0 {
+ transform: rotate(#{$rotate}deg);
+ }
+ }
+ }
+}
+
+@mixin slide($append: null) {
+ $basic: transform 0.4s ease;
+
+ @if $append {
+ transition: $basic, $append;
+ } @else {
+ transition: $basic;
+ }
+}
+
+@mixin max-w-100 {
+ max-width: 100%;
+}
diff --git a/_sass/addon/module.scss b/_sass/abstracts/_placeholders.scss
similarity index 52%
rename from _sass/addon/module.scss
rename to _sass/abstracts/_placeholders.scss
index 3afff6aa..d8a10604 100644
--- a/_sass/addon/module.scss
+++ b/_sass/abstracts/_placeholders.scss
@@ -1,24 +1,11 @@
-/*
-* Mainly scss modules, only imported to `assets/css/main.scss`
-*/
-
-/* ---------- scss placeholder --------- */
+@use 'variables' as v;
+@use 'mixins' as mx;
%heading {
color: var(--heading-color);
font-weight: 400;
- font-family: Lato, "Microsoft Yahei", sans-serif;
-}
-
-%section {
- #core-wrapper & {
- margin-top: 2.5rem;
- margin-bottom: 1.25rem;
-
- &:focus {
- outline: none; /* avoid outline in Safari */
- }
- }
+ font-family: v.$font-family-heading;
+ scroll-margin-top: 3.5rem;
}
%anchor {
@@ -44,7 +31,10 @@
}
%tag-hover {
+ @extend %link-color;
+
background: var(--tag-hover);
+ border-color: var(--tag-hover);
transition: background 0.35s ease-in-out;
}
@@ -56,6 +46,7 @@
%link-hover {
color: #d2603a !important;
+ border-bottom: 1px solid #d2603a;
text-decoration: none;
}
@@ -68,12 +59,13 @@
}
%clickable-transition {
- transition: color 0.35s ease-in-out;
+ transition: all 0.3s ease-in-out;
}
%no-cursor {
-webkit-user-select: none;
-moz-user-select: none;
+ -ms-user-select: none;
user-select: none;
}
@@ -89,6 +81,10 @@
font-style: normal;
}
+%rounded {
+ border-radius: v.$radius-lg;
+}
+
%img-caption {
+ em {
display: block;
@@ -101,53 +97,67 @@
}
%sidebar-links {
- color: rgba(117, 117, 117, 0.9);
+ color: var(--sidebar-muted-color);
-webkit-user-select: none;
-moz-user-select: none;
+ -ms-user-select: none;
user-select: none;
}
-/* ---------- scss mixin --------- */
+%text-clip {
+ display: -webkit-box;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+
+%text-ellipsis {
+ @include mx.text-ellipsis;
+}
-@mixin no-text-decoration {
- text-decoration: none;
+%text-highlight {
+ color: var(--text-muted-highlight-color);
+ font-weight: 600;
+}
+
+%text-sm {
+ font-size: 0.85rem;
}
-@mixin ml-mr($value) {
- margin-left: $value;
- margin-right: $value;
+%text-xs {
+ font-size: 0.8rem;
}
-@mixin pl-pr($val) {
- padding-left: $val;
- padding-right: $val;
+%sup-fn-target {
+ &:target {
+ background-color: var(--footnote-target-bg);
+ width: -moz-fit-content;
+ width: -webkit-fit-content;
+ width: fit-content;
+ transition: background-color 1.75s ease-in-out;
+ }
}
-@mixin input-placeholder {
- opacity: 0.6;
+%btn-color {
+ button i {
+ color: #999999;
+ }
}
-@mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) {
- color: $color;
- font-size: $font-size;
- font-weight: $font-weight;
+%code-snippet-bg {
+ background-color: var(--highlight-bg-color);
}
-@mixin align-center {
- position: relative;
- left: 50%;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
+%code-snippet-padding {
+ padding-left: 1rem;
+ padding-right: 1.5rem;
}
-@mixin prompt($type, $fa-content, $fa-style: "solid") {
- &.prompt-#{$type} {
- background-color: var(--prompt-#{$type}-bg);
+%max-w-100 {
+ max-width: 100%;
+}
- &::before {
- content: $fa-content;
- color: var(--prompt-#{$type}-icon-color);
- font: var(--fa-font-#{$fa-style});
- }
- }
+%panel-border {
+ border-left: 1px solid var(--main-border-color);
}
diff --git a/_sass/abstracts/_variables.scss b/_sass/abstracts/_variables.scss
new file mode 100644
index 00000000..39c3b4a1
--- /dev/null
+++ b/_sass/abstracts/_variables.scss
@@ -0,0 +1,36 @@
+/* sidebar */
+
+$sidebar-width: 260px !default; /* the basic width */
+$sidebar-width-large: 300px !default; /* screen width: >= 1650px */
+$sb-btn-gap: 0.8rem !default;
+$sb-btn-gap-lg: 1rem !default;
+
+/* other framework sizes */
+
+$topbar-height: 3rem !default;
+$search-max-width: 200px !default;
+$footer-height: 5rem !default;
+$footer-height-large: 6rem !default; /* screen width: < 850px */
+$main-content-max-width: 1250px !default;
+$radius-sm: 6px !default;
+$radius-lg: 10px !default;
+$back2top-size: 2.75rem !default;
+
+/* syntax highlight */
+
+$code-font-size: 0.85rem !default;
+$code-header-height: 2.25rem !default;
+$code-dot-size: 0.75rem !default;
+$code-dot-gap: 0.5rem !default;
+$code-icon-width: 1.75rem !default;
+
+/* fonts */
+
+$font-family-base: 'Source Sans Pro', 'Microsoft Yahei', sans-serif !default;
+$font-family-heading: Lato, 'Microsoft Yahei', sans-serif !default;
+
+/* Theme mode settings */
+
+$theme-attr: 'data-bs-theme'; /* the attribute used to indicate the resolved theme */
+$theme-options: light, dark;
+$theme: null !default; /* set by Jekyll site configuration */
diff --git a/_sass/addon/commons.scss b/_sass/addon/commons.scss
deleted file mode 100644
index 26d1a0bc..00000000
--- a/_sass/addon/commons.scss
+++ /dev/null
@@ -1,1678 +0,0 @@
-/*
- The common styles
-*/
-
-html {
- @media (prefers-color-scheme: light) {
- &:not([data-mode]),
- &[data-mode="light"] {
- @include light-scheme;
- }
-
- &[data-mode="dark"] {
- @include dark-scheme;
- }
- }
-
- @media (prefers-color-scheme: dark) {
- &:not([data-mode]),
- &[data-mode="dark"] {
- @include dark-scheme;
- }
-
- &[data-mode="light"] {
- @include light-scheme;
- }
- }
-
- font-size: 16px;
-}
-
-body {
- background: var(--body-bg);
- color: var(--text-color);
- -webkit-font-smoothing: antialiased;
- font-family: "Source Sans Pro", "Microsoft Yahei", sans-serif;
- line-height: 1.75;
-}
-
-/* --- Typography --- */
-
-h1 {
- @extend %heading;
-
- font-size: 1.9rem;
-}
-
-h2 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.5rem;
-}
-
-h3 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.2rem;
-}
-
-h4 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.15rem;
-}
-
-h5 {
- @extend %heading;
- @extend %section;
- @extend %anchor;
-
- font-size: 1.1rem;
-}
-
-a {
- @extend %link-color;
-}
-
-img {
- max-width: 100%;
- height: auto;
-}
-
-blockquote {
- border-left: 5px solid var(--blockquote-border-color);
- padding-left: 1rem;
- color: var(--blockquote-text-color);
-
- &[class^="prompt-"] {
- display: flex;
- border-left: 0;
- border-radius: 6px;
- padding: 1rem;
- color: var(--prompt-text-color);
-
- &::before {
- text-align: center;
- width: 1.25rem;
- margin-right: 0.75rem;
- position: relative;
- top: 0.4rem;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- }
-
- > div {
- max-width: calc(100% - 2rem);
-
- > :last-child {
- margin-bottom: 0;
- }
- }
- }
-
- @include prompt("tip", "\f0eb", "regular");
- @include prompt("info", "\f06a");
- @include prompt("warning", "\f06a");
- @include prompt("danger", "\f071");
-}
-
-mjx-container {
- overflow-x: auto;
- overflow-y: hidden;
-}
-
-kbd {
- font-family: inherit;
- display: inline-block;
- vertical-align: middle;
- line-height: 1.3rem;
- min-width: 1.75rem;
- text-align: center;
- margin: 0 0.3rem;
- padding-top: 0.1rem;
- color: var(--kbd-text-color);
- background-color: var(--kbd-bg-color);
- border-radius: 0.25rem;
- border: solid 1px var(--kbd-wrap-color);
- box-shadow: inset 0 -2px 0 var(--kbd-wrap-color);
-}
-
-footer {
- font-size: 0.8rem;
- background-color: var(--main-bg);
-
- div.d-flex {
- height: $footer-height;
- line-height: 1.2rem;
- padding-bottom: 1rem;
- border-top: 1px solid var(--main-border-color);
-
- > div {
- width: 350px;
- }
- }
-
- a {
- @extend %text-color;
-
- &:link {
- @include no-text-decoration;
- }
-
- &:hover {
- @extend %link-hover;
- @include no-text-decoration;
- }
- }
-
- .footer-right {
- text-align: right;
- }
-}
-
-i { /* fontawesome icons */
- &.far,
- &.fas {
- @extend %no-cursor;
- }
-}
-
-img[data-src] {
- margin: 0.5rem 0;
-
- &.lazyload,
- &.lazyloading {
- opacity: 0;
- @include align-center;
- }
-
- &.lazyloaded {
- opacity: 1;
- transition: opacity 0.5s;
- @include align-center;
- }
-
- &.left {
- float: left;
- margin: 0.75rem 1rem 1rem 0;
- }
-
- &.right {
- float: right;
- margin: 0.75rem 0 1rem 1rem;
- }
-
- &.shadow {
- -webkit-filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08));
- filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08));
- box-shadow: none !important; /* cover the Bootstrap 4.6.1 styles */
- }
-
- @extend %img-caption;
-}
-
-/* --- Panels --- */
-
-.access {
- top: 2rem;
- transition: top 0.2s ease-in-out;
- margin-top: 3rem;
- margin-bottom: 4rem;
-
- &:only-child {
- position: -webkit-sticky;
- position: sticky;
- }
-
- > div {
- padding-left: 1rem;
- border-left: 1px solid var(--main-border-color);
-
- &:not(:last-child) {
- margin-bottom: 4rem;
- }
- }
-
- .post-content {
- font-size: 0.9rem;
- }
-}
-
-#panel-wrapper {
- /* the headings */
- .panel-heading {
- @include label(inherit);
- }
-
- .post-tag {
- display: inline-block;
- line-height: 1rem;
- font-size: 0.85rem;
- background: none;
- border: 1px solid var(--btn-border-color);
- border-radius: 0.8rem;
- padding: 0.3rem 0.5rem;
- margin: 0 0.35rem 0.5rem 0;
-
- &:hover {
- background-color: #2a408e;
- border-color: #2a408e;
- color: #ffffff;
- transition: none;
- }
- }
-
- [data-topbar-visible="true"] & > div {
- top: 6rem;
- }
-}
-
-#access-lastmod {
- li {
- height: 1.8rem;
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 1;
- -webkit-box-orient: vertical;
- list-style: none;
- }
-
- a {
- &:hover {
- @extend %link-hover;
- }
-
- @extend %no-bottom-border;
-
- color: inherit;
- }
-}
-
-.footnotes > ol {
- padding-left: 2rem;
- margin-top: 0.5rem;
-
- > li {
- &:not(:last-child) {
- margin-bottom: 0.3rem;
- }
-
- > p {
- margin-left: 0.25em;
- margin-top: 0;
- margin-bottom: 0;
- }
-
- /* [scroll-focus] added by `smooth-scroll.js` */
- &:target:not([scroll-focus]),
- &[scroll-focus="true"] > p {
- background-color: var(--footnote-target-bg);
- width: -moz-fit-content;
- width: -webkit-fit-content;
- width: fit-content;
- transition: background-color 1.5s ease-in-out;
- }
- }
-}
-
-.footnote {
- @at-root a#{&} {
- @include ml-mr(1px);
- @include pl-pr(2px);
-
- border-bottom-style: none !important;
- transition: background-color 1.5s ease-in-out;
- }
-
- /* [scroll-focus] added by `smooth-scroll.js` */
- @at-root sup:target:not([scroll-focus]),
- sup[scroll-focus=true] > a#{&} {
- background-color: var(--footnote-target-bg);
- }
-}
-
-.reversefootnote {
- @at-root a#{&} {
- font-size: 0.6rem;
- line-height: 1;
- position: relative;
- bottom: 0.25em;
- margin-left: 0.25em;
- border-bottom-style: none !important;
- }
-}
-
-/* --- Begin of Markdown table style --- */
-
-/* it will be created by Liquid */
-.table-wrapper {
- overflow-x: auto;
- margin-bottom: 1.5rem;
-
- > table {
- min-width: 100%;
- overflow-x: auto;
- border-spacing: 0;
-
- thead {
- border-bottom: solid 2px rgba(210, 215, 217, 0.75);
-
- th {
- @extend %table-cell;
- }
- }
-
- tbody {
- tr {
- border-bottom: 1px solid var(--tb-border-color);
-
- &:nth-child(2n) {
- background-color: var(--tb-even-bg);
- }
-
- &:nth-child(2n + 1) {
- background-color: var(--tb-odd-bg);
- }
-
- td {
- @extend %table-cell;
- }
- }
- } /* tbody */
- }/* table */
-}
-
-/* --- post --- */
-
-.post {
- h1 {
- margin-top: 3rem;
- margin-bottom: 1.5rem;
- }
-
- a {
- &.img-link {
- @extend %no-cursor;
- }
-
- /* created by `_includes/img-extra.html` */
- &.popup {
- cursor: zoom-in;
-
- > img[data-src]:not(.normal):not(.left):not(.right) {
- @include align-center;
- }
- }
-
- &:hover {
- code {
- @extend %link-hover;
- }
- }
- } /* a */
-}
-
-.pageviews .fa-spinner {
- font-size: 80%;
-}
-
-.post-meta {
- font-size: 0.85rem;
- word-spacing: 1px;
-
- a {
- &:not(:last-child) {
- margin-right: 2px;
- }
-
- &:not([class]):hover {
- @extend %link-hover;
- }
- }
-
- em {
- @extend %normal-font-style;
- }
-}
-
-.post-content {
- font-size: 1.08rem;
- margin-top: 2rem;
- overflow-wrap: break-word;
-
- a {
- &:not(.img-link) {
- @extend %link-underline;
-
- &:hover {
- @extend %link-hover;
- }
- }
-
- &.img-link {
- @extend %img-caption;
- }
- }
-
- ol,
- ul {
- &:not([class]),
- &.task-list {
- -webkit-padding-start: 1.75rem;
- padding-inline-start: 1.75rem;
-
- li {
- margin: 0.25rem 0;
- padding-left: 0.25rem;
- }
-
- ol,
- ul {
- -webkit-padding-start: 1.25rem;
- padding-inline-start: 1.25rem;
- margin: 0.5rem 0;
- }
- }
- }
-
- ul.task-list {
- -webkit-padding-start: 1.25rem;
- padding-inline-start: 1.25rem;
-
- li {
- list-style-type: none;
- padding-left: 0;
-
- > i { /* checkbox icon */
- width: 2rem;
- margin-left: -1.25rem;
- color: var(--checkbox-color);
-
- &.checked {
- color: var(--checkbox-checked-color);
- }
- }
-
- ul {
- -webkit-padding-start: 1.75rem;
- padding-inline-start: 1.75rem;
- }
- }
-
- input[type="checkbox"] {
- margin: 0 0.5rem 0.2rem -1.3rem;
- vertical-align: middle;
- }
- } /* ul */
-
- dl > dd {
- margin-left: 1rem;
- }
-} /* .post-content */
-
-.tag:hover {
- @extend %tag-hover;
-}
-
-.post-tag {
- display: inline-block;
- min-width: 2rem;
- text-align: center;
- background: var(--tag-bg);
- border-radius: 0.3rem;
- padding: 0 0.4rem;
- color: inherit;
- line-height: 1.3rem;
-
- &:not(:last-child) {
- margin-right: 0.2rem;
- }
-
- &:hover {
- @extend %tag-hover;
-
- border-bottom: none;
- text-decoration: none;
- color: #d2603a;
- }
-}
-
-/* --- buttons --- */
-.btn-lang {
- border: 1px solid !important;
- padding: 1px 3px;
- border-radius: 3px;
- color: var(--link-color);
-
- &:focus {
- box-shadow: none;
- }
-}
-
-/* --- Effects classes --- */
-
-.loaded {
- display: block !important;
-
- @at-root .d-flex#{&} {
- display: flex !important;
- }
-}
-
-.unloaded {
- display: none !important;
-}
-
-.visible {
- visibility: visible !important;
-}
-
-.hidden {
- visibility: hidden !important;
-}
-
-.flex-grow-1 {
- flex-grow: 1 !important;
-}
-
-.btn-box-shadow {
- box-shadow: 0 0 8px 0 var(--btn-box-shadow) !important;
-}
-
-.no-text-decoration {
- @include no-text-decoration;
-}
-
-.tooltip-inner { /* Overrided BS4 Tooltip */
- font-size: 0.7rem;
- max-width: 220px;
- text-align: left;
-}
-
-.disabled {
- color: rgb(206, 196, 196);
- pointer-events: auto;
- cursor: not-allowed;
-}
-
-.hide-border-bottom {
- border-bottom: none !important;
-}
-
-.input-focus {
- box-shadow: none;
- border-color: var(--input-focus-border-color) !important;
- background: center !important;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
-}
-
-/* --- Overriding --- */
-
-/* magnific-popup */
-figure .mfp-title {
- text-align: center;
- padding-right: 0;
- margin-top: 0.5rem;
-}
-
-/* mermaid */
-.mermaid {
- text-align: center;
-}
-
-/* --- sidebar layout --- */
-
-$sidebar-display: "sidebar-display";
-
-#sidebar {
- @include pl-pr(0);
-
- position: fixed;
- top: 0;
- left: 0;
- height: 100%;
- overflow-y: auto;
- width: $sidebar-width;
- z-index: 99;
- background: var(--sidebar-bg);
-
- /* Hide scrollbar for Chrome, Safari and Opera */
- &::-webkit-scrollbar {
- display: none;
- }
-
- /* Hide scrollbar for IE, Edge and Firefox */
- -ms-overflow-style: none; /* IE and Edge */
- scrollbar-width: none; /* Firefox */
-
- a {
- @extend %sidebar-links;
-
- &:hover {
- @include no-text-decoration;
-
- color: var(--sidebar-active-color) !important;
- }
- }
-
- #avatar {
- > a {
- display: block;
- width: 6rem;
- height: 6rem;
- border-radius: 50%;
- border: 2px solid rgba(222, 222, 222, 0.7);
- overflow: hidden;
- -webkit-transform: translateZ(0);
- transform: translateZ(0); /* fixed the zoom in Safari */
- transition: border-color 0.35s ease-in-out;
-
- &:hover {
- border-color: white;
- }
- }
-
- img {
- width: 100%;
- height: 100%;
- transition: -webkit-transform 0.5s;
- transition: transform 0.5s;
- transition: transform 0.5s, -webkit-transform 0.5s;
-
- &:hover {
- -webkit-transform: scale(1.2);
- transform: scale(1.2);
- }
- }
- } /* #avatar */
-
- .site-title {
- margin-top: 0.55rem;
-
- a {
- @extend %clickable-transition;
-
- font-weight: 900;
- font-size: 1.5rem;
- letter-spacing: 0.5px;
- color: rgba(134, 133, 133, 0.99);
- }
- }
-
- .site-subtitle {
- font-size: 95%;
- color: var(--sidebar-muted-color);
- line-height: 1.25rem;
- word-spacing: 1px;
- margin: 0.2rem 1.5rem 0.5rem 1.5rem;
- min-height: 3rem; /* avoid vertical shifting in multi-line words */
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- }
-
- .nav-link {
- border-radius: 0;
- font-size: 0.95rem;
- font-weight: 600;
- letter-spacing: 1px;
- display: table-cell;
- vertical-align: middle;
- }
-
- .nav-item {
- text-align: center;
- display: table;
- height: $tab-height;
-
- &.active {
- .nav-link {
- color: var(--sidebar-active-color);
- }
- }
-
- &:not(.active) > a {
- @extend %clickable-transition;
- }
- }
-
- ul {
- height: $tab-height * $tab-count;
- margin-bottom: 2rem;
- padding-left: 0;
-
- li {
- width: 100%;
-
- &:last-child {
- a {
- position: relative;
- left: $cursor-width / 2;
- width: 100%;
- }
-
- &::after { /* the cursor */
- display: table;
- visibility: hidden;
- content: "";
- position: relative;
- right: 1px;
- width: $cursor-width;
- height: $tab-cursor-height;
- border-radius: 1px;
- background-color: var(--nav-cursor-color);
- pointer-events: none;
- }
- }
- } /* li */
-
- @mixin fix-cursor($top) {
- top: $top;
- visibility: visible;
- }
-
- @for $i from 1 through $tab-count {
- $offset: $tab-count - $i;
- $top: -$offset * $tab-height + ($tab-height - $tab-cursor-height) / 2;
-
- @if $i < $tab-count {
- > li.active:nth-child(#{$i}),
- > li.nav-item:nth-child(#{$i}):hover {
- ~ li:last-child::after {
- @include fix-cursor($top);
- }
- }
- } @else {
- > li.active:nth-child(#{$i}):last-child::after,
- > li.nav-item:nth-child(#{$i}):last-child:hover::after {
- @include fix-cursor($top);
- }
- }
- } /* @for */
- } /* ul */
-
- .sidebar-bottom {
- margin-bottom: 2.1rem;
-
- @include ml-mr(auto);
- @include pl-pr(1rem);
-
- %icon {
- width: 2.4rem;
- text-align: center;
- }
-
- a {
- @extend %icon;
- @extend %clickable-transition;
- }
-
- i {
- font-size: 1.2rem;
- line-height: 1.75rem;
- }
-
- .mode-toggle {
- padding: 0;
- border: 0;
- margin-bottom: 1px;
- background-color: transparent;
-
- @extend %icon;
- @extend %sidebar-links;
-
- > i {
- @extend %clickable-transition;
- }
-
- &:hover > i {
- color: var(--sidebar-active-color);
- }
- }
-
- .icon-border {
- @extend %no-cursor;
-
- background-color: var(--sidebar-muted-color);
- content: "";
- width: 3px;
- height: 3px;
- border-radius: 50%;
- }
- } /* .sidebar-bottom */
-} /* #sidebar */
-
-@media (hover: hover) {
- #sidebar ul > li:last-child::after {
- transition: top 0.5s ease;
- }
-}
-
-.profile-wrapper {
- margin-top: 2rem;
- width: 100%;
-}
-
-#search-result-wrapper {
- display: none;
- height: 100%;
- width: 100%;
- overflow: auto;
-
- .post-content {
- margin-top: 2rem;
- }
-}
-
-/* --- top-bar --- */
-
-#topbar-wrapper {
- height: $topbar-height;
- position: fixed;
- top: 0;
- left: $sidebar-width; /* same as sidebar width */
- right: 0;
- transition: top 0.2s ease-in-out;
- z-index: 50;
- border-bottom: 1px solid rgba(95, 165, 236, 0.8);
- background-color: var(--topbar-wrapper-bg);
-
- [data-topbar-visible="false"] & {
- top: -$topbar-height; /* same as topbar height. */
- }
-}
-
-#topbar {
- i { /* icons */
- color: #999999;
- }
-
- #breadcrumb {
- font-size: 1rem;
- color: gray;
- padding-left: 0.5rem;
-
- a:hover {
- @extend %link-hover;
- }
-
- span {
- &:not(:last-child) {
- &::after {
- content: "›";
- padding: 0 0.3rem;
- }
- }
- }
- }
-} /* #topbar */
-
-#sidebar-trigger,
-#search-trigger {
- display: none;
-}
-
-#search-wrapper {
- display: flex;
- width: 100%;
- border-radius: 1rem;
- border: 1px solid var(--search-wrapper-border-color);
- background: var(--search-wrapper-bg);
- padding: 0 0.5rem;
-
- i {
- z-index: 2;
- font-size: 0.9rem;
- color: var(--search-icon-color);
- }
-}
-
-#search-cancel { /* 'Cancel' link */
- color: var(--link-color);
- margin-left: 1rem;
- display: none;
-
- @extend %cursor-pointer;
-}
-
-#search-input {
- background: center;
- border: 0;
- border-radius: 0;
- padding: 0.18rem 0.3rem;
- color: var(--text-color);
- height: auto;
-
- &:focus {
- box-shadow: none;
- background: center;
-
- &.form-control {
- &::-moz-placeholder { @include input-placeholder; }
- &::-webkit-input-placeholder { @include input-placeholder; }
- &::placeholder { @include input-placeholder; }
- }
- }
-}
-
-#search-hints {
- padding: 0 1rem;
-
- h4 {
- margin-bottom: 1.5rem;
- }
-
- .post-tag {
- display: inline-block;
- line-height: 1rem;
- font-size: 1rem;
- background: var(--search-tag-bg);
- border: none;
- padding: 0.5rem;
- margin: 0 1.25rem 1rem 0;
-
- &::before {
- content: "#";
- color: var(--text-muted-color);
- padding-right: 0.2rem;
- }
-
- @extend %link-color;
- }
-}
-
-#search-results {
- padding-bottom: 3rem;
-
- a {
- &:hover {
- @extend %link-hover;
- }
-
- @extend %link-color;
- @extend %no-bottom-border;
- @extend %heading;
-
- font-size: 1.4rem;
- line-height: 2.5rem;
- }
-
- > div {
- width: 100%;
-
- &:not(:last-child) {
- margin-bottom: 1rem;
- }
-
- i { /* icons */
- color: #818182;
- margin-right: 0.15rem;
- font-size: 80%;
- }
-
- > p {
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 3;
- -webkit-box-orient: vertical;
- }
- }
-} /* #search-results */
-
-#topbar-title {
- display: none;
- font-size: 1.1rem;
- font-weight: 600;
- font-family: sans-serif;
- color: var(--topbar-text-color);
- text-align: center;
- width: 70%;
- overflow: hidden;
- text-overflow: ellipsis;
- word-break: keep-all;
- white-space: nowrap;
-}
-
-#core-wrapper {
- .categories,
- #tags,
- #archives {
- a:not(:hover) {
- @extend %no-bottom-border;
- }
- }
-
- @at-root .row:only-child > #{&} {
- padding-bottom: 3rem;
- }
-}
-
-#mask {
- display: none;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- height: 100%;
- width: 100%;
- z-index: 1;
-
- @at-root [#{$sidebar-display}] & {
- display: block !important;
- }
-}
-
-/* --- main wrapper --- */
-
-#main-wrapper {
- background-color: var(--main-bg);
- position: relative;
- min-height: calc(100vh - #{$footer-height});
-
- @include pl-pr(0);
-}
-
-#core-wrapper,
-#panel-wrapper {
- margin-top: $topbar-height; /* same as the height of topbar */
-}
-
-#topbar-wrapper.row,
-#main > .row,
-#search-result-wrapper > .row {
- @include ml-mr(0);
-}
-
-/* --- button back-to-top --- */
-
-#back-to-top {
- $size: 2.7em;
-
- display: none;
- z-index: 1;
- cursor: pointer;
- position: fixed;
- background: var(--button-bg);
- color: var(--btn-backtotop-color);
- padding: 0;
- width: $size;
- height: $size;
- border-radius: 50%;
- border: 1px solid var(--btn-backtotop-border-color);
- transition: -webkit-transform 0.2s ease-out;
- transition: transform 0.2s ease-out;
- transition: transform 0.2s ease-out, -webkit-transform 0.2s ease-out;
- -webkit-transition: transform 0.2s ease-out;
-
- i {
- line-height: $size;
- position: relative;
- bottom: 2px;
- }
-}
-
-#back-to-top:hover {
- transform: translate3d(0, -5px, 0);
- -webkit-transform: translate3d(0, -5px, 0);
-}
-
-#notification {
- @-webkit-keyframes popup {
- from {
- opacity: 0;
- bottom: 0;
- }
- }
-
- @keyframes popup {
- from {
- opacity: 0;
- bottom: 0;
- }
- }
-
- .toast-header {
- background: none;
- border-bottom: none;
- color: inherit;
- }
-
- .toast-body {
- font-family: Lato, sans-serif;
- line-height: 1.25rem;
-
- button {
- font-size: 90%;
- min-width: 4rem;
- }
- }
-
- &.toast {
- display: none;
-
- &.show {
- display: block;
- min-width: 20rem;
- border-radius: 0.5rem;
- -webkit-backdrop-filter: blur(10px);
- backdrop-filter: blur(10px);
- background-color: rgba(255, 255, 255, 0.5);
- color: #1b1b1eba;
- position: fixed;
- left: 50%;
- bottom: 20%;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
- -webkit-animation: popup 0.8s;
- animation: popup 0.8s;
- }
- }
-}
-
-/*
- Responsive Design:
-
- {sidebar, content, panel} >= 1120px screen width
- {sidebar, content} >= 850px screen width
- {content} <= 849px screen width
-
-*/
-
-@media all and (max-width: 576px) {
- footer {
- height: $footer-height-mobile;
-
- div.d-flex {
- padding: 1.5rem 0;
- flex-wrap: wrap;
- justify-content: space-around !important;
- }
-
- .footer-left,
- .footer-right {
- text-align: center;
- }
- }
-
- #main-wrapper {
- min-height: calc(100vh - #{$footer-height-mobile});
- }
-
- #core-wrapper {
- min-height: calc(100vh - #{$topbar-height} - #{$footer-height-mobile}) !important;
-
- h1 {
- margin-top: 2.2rem;
- font-size: 1.75rem;
- }
-
- .post-content {
- > blockquote[class^="prompt-"] {
- @include pl-pr(1.25rem);
- @include ml-mr(-1.25rem);
-
- border-radius: 0;
- max-width: none;
- }
- }
- }
-
- #avatar > a {
- width: 5rem;
- height: 5rem;
- }
-
- .site-subtitle {
- @include ml-mr(1.8rem);
- }
-}
-
-@media all and (max-width: 768px) {
- %full-width {
- max-width: 100%;
- }
-
- #topbar {
- @extend %full-width;
- }
-
- #main {
- @extend %full-width;
- @include pl-pr(0);
- }
-}
-
-/* hide sidebar and panel */
-@media all and (max-width: 849px) {
- @mixin slide($append: null) {
- $basic: transform 0.4s ease;
-
- @if $append {
- transition: $basic, $append;
- } @else {
- transition: $basic;
- }
- }
-
- html,
- body {
- overflow-x: hidden;
- }
-
- footer {
- @include slide;
- }
-
- [#{$sidebar-display}] {
- #sidebar {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
-
- #topbar-wrapper,
- #main-wrapper,
- footer {
- -webkit-transform: translateX(#{$sidebar-width});
- transform: translateX(#{$sidebar-width});
- }
- }
-
- #sidebar {
- @include slide;
-
- transform: translateX(-#{$sidebar-width}); /* hide */
- -webkit-transform: translateX(-#{$sidebar-width});
-
- .cursor {
- transition: none;
- }
- }
-
- #main-wrapper {
- @include slide;
-
- padding-top: $topbar-height;
- }
-
- #topbar,
- #main,
- footer > .container {
- max-width: 100%;
- }
-
- #search-result-wrapper {
- width: 100%;
- }
-
- #breadcrumb,
- #search-wrapper {
- display: none;
- }
-
- #topbar-wrapper {
- @include slide(top 0.2s ease);
-
- left: 0;
- }
-
- #core-wrapper,
- #panel-wrapper {
- margin-top: 0;
- }
-
- #topbar-title,
- #sidebar-trigger,
- #search-trigger {
- display: block;
- }
-
- #search-result-wrapper .post-content {
- letter-spacing: 0;
- }
-
- #tags {
- justify-content: center !important;
- }
-
- h1.dynamic-title {
- display: none;
-
- ~ .post-content {
- margin-top: 3rem;
- }
- }
-} /* max-width: 849px */
-
-@media all and (max-width: 849px) and (orientation: portrait) {
- [data-topbar-visible="false"] #topbar-wrapper {
- top: 0;
- }
-}
-
-/* Phone & Pad */
-@media all and (min-width: 577px) and (max-width: 1199px) {
- footer .d-flex > div {
- width: 312px;
- }
-}
-
-/* Sidebar is visible */
-@media all and (min-width: 850px) {
- /* Solved jumping scrollbar */
- html {
- overflow-y: scroll;
- }
-
- #main-wrapper,
- footer {
- margin-left: $sidebar-width;
- }
-
- .profile-wrapper {
- margin-top: 3rem;
- }
-
- #search-hints {
- display: none;
- }
-
- #search-wrapper {
- max-width: $search-max-width;
- }
-
- #search-result-wrapper {
- margin-top: 3rem;
- max-width: $main-content-max-width;
- }
-
- div.post-content .table-wrapper > table {
- min-width: 70%;
- }
-
- /* button 'back-to-Top' position */
- #back-to-top {
- bottom: 5.5rem;
- right: 5%;
- }
-
- #topbar-title {
- text-align: left;
- }
-}
-
-/* Pad horizontal */
-@media all and (min-width: 992px) and (max-width: 1199px) {
- #main .col-lg-11 {
- flex: 0 0 96%;
- max-width: 96%;
- }
-}
-
-/* Compact icons in sidebar & panel hidden */
-@media all and (min-width: 850px) and (max-width: 1199px) {
- #sidebar {
- width: $sidebar-width-small;
-
- .site-subtitle {
- margin-left: 1rem;
- margin-right: 1rem;
- }
-
- .sidebar-bottom {
- a,
- span {
- width: 2rem;
- }
-
- .icon-border {
- left: -3px;
- }
- }
- }
-
- #topbar-wrapper {
- left: $sidebar-width-small;
- }
-
- #search-results > div {
- max-width: 700px;
- }
-
- .site-title {
- font-size: 1.3rem;
- margin-left: 0 !important;
- }
-
- .site-subtitle {
- @include ml-mr(1rem);
-
- font-size: 90%;
- }
-
- #main-wrapper,
- footer {
- margin-left: $sidebar-width-small;
- }
-
- #breadcrumb {
- width: 65%;
- overflow: hidden;
- text-overflow: ellipsis;
- word-break: keep-all;
- white-space: nowrap;
- }
-}
-
-/* panel hidden */
-@media all and (max-width: 1199px) {
- #panel-wrapper {
- display: none;
- }
-
- #main > div.row {
- justify-content: center !important;
- }
-}
-
-/* --- desktop mode, both sidebar and panel are visible --- */
-
-@media all and (min-width: 1200px) {
- #back-to-top {
- bottom: 6.5rem;
- }
-
- #search-wrapper {
- margin-right: 4rem;
- }
-
- #search-input {
- transition: all 0.3s ease-in-out;
- }
-
- #search-results > div {
- width: 46%;
-
- &:nth-child(odd) {
- margin-right: 1.5rem;
- }
-
- &:nth-child(even) {
- margin-left: 1.5rem;
- }
-
- &:last-child:nth-child(odd) {
- position: relative;
- right: 24.3%;
- }
- }
-
- .post-content {
- font-size: 1.03rem;
- }
-
- footer {
- div.d-felx {
- width: 85%;
- }
- }
-}
-
-@media all and (min-width: 1400px) {
- #back-to-top {
- right: calc((100vw - #{$sidebar-width} - 1140px) / 2 + 3rem);
- }
-}
-
-@media all and (min-width: 1650px) {
- #main-wrapper,
- footer {
- margin-left: $sidebar-width-large;
- }
-
- #topbar-wrapper {
- left: $sidebar-width-large;
- }
-
- #search-wrapper {
- margin-right: calc(#{$main-content-max-width} * 0.25 - #{$search-max-width});
- }
-
- #topbar,
- #main,
- footer > .container {
- max-width: $main-content-max-width;
- }
-
- #core-wrapper,
- #tail-wrapper {
- padding-right: 4.5rem !important;
- }
-
- #back-to-top {
- right: calc((100vw - #{$sidebar-width-large} - #{$main-content-max-width}) / 2 + 2rem);
- }
-
- #sidebar {
- width: $sidebar-width-large;
-
- .profile-wrapper {
- margin-top: 4rem;
- margin-bottom: 1rem;
-
- &.text-center {
- text-align: left !important;
- }
-
- %profile-ml {
- margin-left: 4.5rem;
- }
-
- #avatar {
- @extend %profile-ml;
-
- > a {
- width: 6.2rem;
- height: 6.2rem;
-
- &.mx-auto {
- margin-left: 0 !important;
- }
- }
- }
-
- .site-title {
- @extend %profile-ml;
-
- margin-top: 0.4rem;
-
- a {
- font-size: 1.7rem;
- letter-spacing: 1px;
- }
- }
-
- .site-subtitle {
- @extend %profile-ml;
-
- word-spacing: 0;
- margin-top: 0;
- }
- } /* .profile-wrapper (min-width: 1650px) */
-
- ul {
- padding-left: 2.5rem;
-
- > li:last-child {
- > a {
- position: static;
- }
- }
-
- .nav-item {
- text-align: left;
-
- .nav-link {
- > span {
- letter-spacing: 2px;
- }
-
- > i {
- &.unloaded {
- display: inline-block !important;
- }
- }
- }
- }
- }
-
- .sidebar-bottom {
- padding-left: 3.5rem;
- width: 100%;
-
- $icon-block-size: 2rem;
-
- &.justify-content-center {
- justify-content: flex-start !important;
- }
-
- > span,
- > button.mode-toggle,
- > a {
- @include ml-mr(0.15rem);
-
- height: $icon-block-size;
- margin-bottom: 0.5rem; /* wrap line */
- }
-
- i {
- background-color: var(--sidebar-btn-bg);
- font-size: 1rem;
- width: $icon-block-size;
- height: $icon-block-size;
- border-radius: 50%;
- position: relative;
-
- &::before {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
- }
- }
-
- .icon-border {
- top: 0.9rem;
- }
- } /* .sidebar-bottom */
- } /* #sidebar */
-} /* min-width: 1650px */
diff --git a/_sass/addon/syntax.scss b/_sass/addon/syntax.scss
deleted file mode 100644
index 361fe089..00000000
--- a/_sass/addon/syntax.scss
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-* The syntax highlight.
-*/
-
-@import "colors/light-syntax";
-@import "colors/dark-syntax";
-
-html {
- @media (prefers-color-scheme: light) {
- &:not([data-mode]),
- &[data-mode="light"] {
- @include light-syntax;
- }
-
- &[data-mode="dark"] {
- @include dark-syntax;
- }
- }
-
- @media (prefers-color-scheme: dark) {
- &:not([data-mode]),
- &[data-mode="dark"] {
- @include dark-syntax;
- }
-
- &[data-mode="light"] {
- @include light-syntax;
- }
- }
-}
-
-/* -- Codes Snippet -- */
-
-$code-radius: 6px;
-
-%code-snippet-bg {
- background: var(--highlight-bg-color);
-}
-
-%code-snippet-radius {
- border-radius: $code-radius;
-}
-
-%code-snippet-padding {
- padding-left: 1rem;
- padding-right: 1.5rem;
-}
-
-.highlighter-rouge {
- @extend %code-snippet-bg;
- @extend %code-snippet-radius;
-
- color: var(--highlighter-rouge-color);
- margin-top: 0.5rem;
- margin-bottom: 1.2em; /* Override BS Inline-code style */
-}
-
-.highlight {
- @extend %code-snippet-radius;
- @extend %code-snippet-bg;
-
- @at-root figure#{&} {
- @extend %code-snippet-bg;
- }
-
- overflow: auto;
- padding-top: 0.5rem;
- padding-bottom: 1rem;
-
- pre {
- margin-bottom: 0;
- font-size: $code-font-size;
- line-height: 1.4rem;
- word-wrap: normal; /* Fixed Safari overflow-x */
- }
-
- table {
- td pre {
- overflow: visible; /* Fixed iOS safari overflow-x */
- word-break: normal; /* Fixed iOS safari linenos code break */
- }
- }
-
- .lineno {
- padding-right: 0.5rem;
- min-width: 2.2rem;
- text-align: right;
- color: var(--highlight-lineno-color);
- -webkit-user-select: none;
- -moz-user-select: none;
- -o-user-select: none;
- user-select: none;
- }
-
- /* set the dollar sign to non-selectable */
- .gp {
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- }
-} /* .highlight */
-
-code {
- -webkit-hyphens: none;
- hyphens: none;
-
- &.highlighter-rouge {
- font-size: $code-font-size;
- padding: 3px 5px;
- word-break: break-word;
- border-radius: 4px;
- background-color: var(--inline-code-bg);
- }
-
- &.filepath {
- background-color: inherit;
- color: var(--filepath-text-color);
- font-weight: 600;
- padding: 0;
- }
-
- a > &.highlighter-rouge {
- padding-bottom: 0; /* show link's underlinke */
- color: inherit;
- }
-
- a:hover > &.highlighter-rouge {
- border-bottom: none;
- }
-
- blockquote & {
- color: inherit;
- }
-
- .highlight > & {
- color: transparent;
- }
-}
-
-td.rouge-code {
- @extend %code-snippet-padding;
-
- /*
- Prevent some browser extends from
- changing the URL string of code block.
- */
- a {
- color: inherit !important;
- border-bottom: none !important;
- pointer-events: none;
- }
-}
-
-/* Hide line numbers for default, console, and terminal code snippets */
-div {
- &[class^="highlighter-rouge"],
- &.nolineno,
- &.language-plaintext.highlighter-rouge,
- &.language-console.highlighter-rouge,
- &.language-terminal.highlighter-rouge {
- pre.lineno {
- display: none;
- }
-
- td.rouge-code {
- padding-left: 1.5rem;
- }
- }
-}
-
-.code-header {
- @extend %no-cursor;
-
- $code-header-height: 2.25rem;
-
- border-top-left-radius: $code-radius;
- border-top-right-radius: $code-radius;
- display: flex;
- justify-content: space-between;
- align-items: center;
- height: $code-header-height;
-
- &::before {
- $dot-size: 0.75rem;
- $dot-margin: 0.5rem;
-
- content: "";
- display: inline-block;
- margin-left: 1rem;
- width: $dot-size;
- height: $dot-size;
- border-radius: 50%;
- background-color: var(--code-header-muted-color);
- box-shadow:
- ($dot-size + $dot-margin) 0 0 var(--code-header-muted-color),
- ($dot-size + $dot-margin) * 2 0 0 var(--code-header-muted-color);
- }
-
- /* the label block */
- span {
- /* label icon */
- i {
- font-size: 1rem;
- margin-right: 0.4rem;
- color: var(--code-header-icon-color);
-
- &.small {
- font-size: 70%;
- }
- }
-
- @at-root [file] #{&} > i {
- position: relative;
- top: 1px; /* center the file icon */
- }
-
- /* label text */
- &::after {
- content: attr(data-label-text);
- font-size: 0.85rem;
- font-weight: 600;
- color: var(--code-header-text-color);
- }
- }
-
- /* clipboard */
- button {
- @extend %cursor-pointer;
-
- border: 1px solid transparent;
- border-radius: $code-radius;
- height: $code-header-height;
- width: $code-header-height;
- padding: 0;
- background-color: inherit;
-
- i {
- color: var(--code-header-icon-color);
- }
-
- &[timeout] {
- &:hover {
- border-color: var(--clipboard-checked-color);
- }
-
- i {
- color: var(--clipboard-checked-color);
- }
- }
-
- &:focus {
- outline: none;
- }
-
- &:not([timeout]):hover {
- background-color: rgba(128, 128, 128, 0.37);
-
- i {
- color: white;
- }
- }
- }
-}
-
-@media all and (max-width: 576px) {
- .post-content {
- > div[class^="language-"] {
- @include ml-mr(-1.25rem);
-
- border-radius: 0;
-
- .highlight {
- padding-left: 0.25rem;
- }
-
- .code-header {
- border-radius: 0;
- padding-left: 0.4rem;
- padding-right: 0.5rem;
- }
- }
- }
-}
diff --git a/_sass/addon/variables.scss b/_sass/addon/variables.scss
deleted file mode 100644
index 99614a5b..00000000
--- a/_sass/addon/variables.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * The SCSS variables
- */
-
-/* sidebar */
-
-$sidebar-width: 260px !default; /* the basic width */
-$sidebar-width-small: 210px !default; /* screen width: >= 850px, <= 1199px (iPad landscape) */
-$sidebar-width-large: 350px !default; /* screen width: >= 1650px */
-
-/* tabs of sidebar */
-
-$tab-count: 5 !default; /* backward compatible (version <= 4.0.2) */
-$tab-height: 3rem !default;
-$tab-cursor-height: 1.6rem !default;
-$cursor-width: 2px !default; /* the cursor width of the selected tab */
-
-/* other framework sizes */
-
-$topbar-height: 3rem !default;
-$search-max-width: 210px !default;
-$footer-height: 5rem !default;
-$footer-height-mobile: 6rem !default; /* screen width: <= 576px */
-
-$main-content-max-width: 1250px !default;
-$bottom-min-height: 35rem !default;
-
-/* syntax highlight */
-
-$code-font-size: 0.85rem !default;
diff --git a/_sass/base/_base.scss b/_sass/base/_base.scss
new file mode 100644
index 00000000..6a5df78f
--- /dev/null
+++ b/_sass/base/_base.scss
@@ -0,0 +1,491 @@
+@use 'sass:list';
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+@use '../themes/light';
+@use '../themes/dark';
+
+$enable-dual: not list.index(v.$theme-options, v.$theme);
+$enable-light: v.$theme == light or $enable-dual;
+$enable-dark: v.$theme == dark or $enable-dual;
+
+@if $enable-light {
+ :root[#{v.$theme-attr}='light'] {
+ @include light.styles;
+ }
+}
+
+@if $enable-dark {
+ :root[#{v.$theme-attr}='dark'] {
+ @include dark.styles;
+ }
+}
+
+@if $enable-dual {
+ :root:not([#{v.$theme-attr}]) {
+ @include mx.color-scheme(light) {
+ @include light.styles;
+ }
+
+ @include mx.color-scheme(dark) {
+ @include dark.styles;
+ }
+ }
+}
+
+:root {
+ font-size: 16px;
+
+ @include bp.lg {
+ overflow-y: scroll;
+ }
+}
+
+body {
+ background: var(--main-bg);
+ padding: env(safe-area-inset-top) env(safe-area-inset-right)
+ env(safe-area-inset-bottom) env(safe-area-inset-left);
+ color: var(--text-color);
+ -webkit-font-smoothing: antialiased;
+ font-family: v.$font-family-base;
+}
+
+h1.dynamic-title {
+ @include bp.lt(bp.get(lg)) {
+ display: none;
+
+ ~ .content {
+ margin-top: 2.5rem;
+ }
+ }
+}
+
+main {
+ &.col-12 {
+ @include bp.xxxl {
+ padding-right: 4.5rem !important;
+ }
+ }
+}
+
+.preview-img {
+ aspect-ratio: 40 / 21;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+
+ @extend %rounded;
+
+ &:not(.no-bg) {
+ background: var(--img-bg);
+ }
+
+ img {
+ height: 100%;
+ -o-object-fit: cover;
+ object-fit: cover;
+
+ @extend %rounded;
+
+ @at-root #post-list & {
+ width: 100%;
+ }
+ }
+}
+
+.post-preview {
+ @extend %rounded;
+
+ border: 0;
+ background: var(--card-bg);
+ box-shadow: var(--card-shadow);
+
+ &::before {
+ @extend %rounded;
+
+ content: '';
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ background-color: var(--card-hover-bg);
+ opacity: 0;
+ transition: opacity 0.35s ease-in-out;
+ }
+
+ &:hover {
+ &::before {
+ opacity: 0.3;
+ }
+ }
+}
+
+.post-meta {
+ @extend %text-sm;
+
+ a {
+ &:not([class]):hover {
+ @extend %link-hover;
+ }
+ }
+
+ em {
+ @extend %normal-font-style;
+ }
+}
+
+.content {
+ font-size: 1.08rem;
+ margin-top: 2rem;
+ overflow-wrap: break-word;
+
+ @include bp.xl {
+ font-size: 1.03rem;
+ }
+
+ a {
+ &.popup {
+ @extend %no-cursor;
+ @extend %img-caption;
+ @include mx.mt-mb(0.5rem);
+
+ cursor: zoom-in;
+ }
+
+ &:not(.img-link) {
+ @extend %link-underline;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+ }
+
+ ol,
+ ul {
+ &:not([class]),
+ &.task-list {
+ -webkit-padding-start: 1.75rem;
+ padding-inline-start: 1.75rem;
+
+ li {
+ margin: 0.25rem 0;
+ padding-left: 0.25rem;
+ }
+
+ ol,
+ ul {
+ -webkit-padding-start: 1.25rem;
+ padding-inline-start: 1.25rem;
+ margin: 0.5rem 0;
+ }
+ }
+ }
+
+ ul.task-list {
+ -webkit-padding-start: 1.25rem;
+ padding-inline-start: 1.25rem;
+
+ li {
+ list-style-type: none;
+ padding-left: 0;
+
+ /* checkbox icon */
+ > i {
+ width: 2rem;
+ margin-left: -1.25rem;
+ color: var(--checkbox-color);
+
+ &.checked {
+ color: var(--checkbox-checked-color);
+ }
+ }
+
+ ul {
+ -webkit-padding-start: 1.75rem;
+ padding-inline-start: 1.75rem;
+ }
+ }
+
+ input[type='checkbox'] {
+ margin: 0 0.5rem 0.2rem -1.3rem;
+ vertical-align: middle;
+ }
+ } /* ul */
+
+ dl > dd {
+ margin-left: 1rem;
+ }
+
+ ::marker {
+ color: var(--text-muted-color);
+ }
+
+ .table-wrapper > table {
+ @include bp.lg {
+ min-width: 70%;
+ }
+ }
+} /* .content */
+
+.tag:hover {
+ @extend %tag-hover;
+}
+
+.post-tag {
+ display: inline-block;
+ min-width: 2rem;
+ text-align: center;
+ border-radius: 0.5rem;
+ border: 1px solid var(--btn-border-color);
+ padding: 0 0.4rem;
+ color: var(--text-muted-color);
+ line-height: 1.3rem;
+
+ &:not(:last-child) {
+ margin-right: 0.2rem;
+ }
+}
+
+.rounded-10 {
+ border-radius: 10px !important;
+}
+
+.img-link {
+ color: transparent;
+ display: inline-flex;
+}
+
+.shimmer {
+ overflow: hidden;
+ position: relative;
+ background: var(--img-bg);
+
+ &::before {
+ content: '';
+ position: absolute;
+ background: var(--shimmer-bg);
+ height: 100%;
+ width: 100%;
+ -webkit-animation: shimmer 1.3s infinite;
+ animation: shimmer 1.3s infinite;
+ }
+
+ @-webkit-keyframes shimmer {
+ 0% {
+ transform: translateX(-100%);
+ }
+
+ 100% {
+ transform: translateX(100%);
+ }
+ }
+
+ @keyframes shimmer {
+ 0% {
+ transform: translateX(-100%);
+ }
+
+ 100% {
+ transform: translateX(100%);
+ }
+ }
+}
+
+.embed-video {
+ width: 100%;
+ height: 100%;
+ margin-bottom: 1rem;
+ aspect-ratio: 16 / 9;
+
+ @extend %rounded;
+
+ &.twitch {
+ aspect-ratio: 310 / 189;
+ }
+
+ &.file {
+ display: block;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ margin: auto;
+ margin-bottom: 0;
+ }
+
+ @extend %img-caption;
+}
+
+.embed-audio {
+ width: 100%;
+
+ &.file {
+ display: block;
+ }
+
+ &.spotify {
+ border-radius: 14px;
+ }
+
+ @extend %img-caption;
+}
+
+/* --- Effects classes --- */
+
+.flex-grow-1 {
+ flex-grow: 1 !important;
+}
+
+.btn-box-shadow {
+ box-shadow: var(--card-shadow);
+}
+
+/* overwrite bootstrap muted */
+.text-muted {
+ color: var(--text-muted-color) !important;
+}
+
+/* Overwrite bootstrap tooltip */
+.tooltip-inner {
+ font-size: 0.7rem;
+ max-width: 220px;
+ text-align: left;
+}
+
+/* Overwrite bootstrap outline button */
+.btn.btn-outline-primary {
+ &:not(.disabled):hover {
+ border-color: #007bff !important;
+ }
+}
+
+.disabled {
+ color: rgb(206 196 196);
+ pointer-events: auto;
+ cursor: not-allowed;
+}
+
+.hide-border-bottom {
+ border-bottom: none !important;
+}
+
+.input-focus {
+ box-shadow: none;
+ border-color: var(--input-focus-border-color) !important;
+ background: center !important;
+ transition:
+ background-color 0.15s ease-in-out,
+ border-color 0.15s ease-in-out;
+}
+
+.left {
+ float: left;
+ margin: 0.75rem 1rem 1rem 0;
+}
+
+.right {
+ float: right;
+ margin: 0.75rem 0 1rem 1rem;
+}
+
+/* --- Overriding --- */
+
+/* mermaid */
+.mermaid {
+ text-align: center;
+}
+
+/* MathJax */
+mjx-container {
+ a {
+ display: inline-block;
+ }
+}
+
+@media (hover: hover) {
+ #sidebar ul > li:last-child::after {
+ transition: top 0.5s ease;
+ }
+
+ .nav-link {
+ transition: background-color 0.3s ease-in-out;
+ }
+
+ .post-preview {
+ transition: background-color 0.35s ease-in-out;
+ }
+}
+
+#mask {
+ inset: 0 0 0 0;
+}
+
+#main-wrapper {
+ position: relative;
+
+ @include mx.pl-pr(0);
+
+ @include bp.lt(bp.get(lg)) {
+ @include mx.slide;
+ }
+
+ @include bp.lg {
+ margin-left: v.$sidebar-width;
+ }
+
+ @include bp.xxxl {
+ margin-left: v.$sidebar-width-large;
+ }
+
+ > .container {
+ min-height: 100vh;
+
+ @include bp.lte(bp.get(md)) {
+ @include mx.max-w-100;
+ @include mx.pl-pr(0);
+ }
+
+ @include bp.lt(bp.get(lg)) {
+ max-width: 100%;
+ }
+
+ /* Pad horizontal */
+ @include bp.between(992px, calc(#{bp.get(xl)} - 1px)) {
+ .col-lg-11 {
+ flex: 0 0 96%;
+ max-width: 96%;
+ }
+ }
+
+ @include bp.lt(bp.get(xl)) {
+ > .row {
+ justify-content: center !important;
+ }
+ }
+
+ @include bp.xxxl {
+ max-width: v.$main-content-max-width;
+
+ @include mx.pl-pr(1.75rem, true);
+ }
+ }
+}
+
+/* --- basic wrappers --- */
+
+#topbar-wrapper.row,
+#main-wrapper > .container > .row,
+#search-result-wrapper > .row {
+ @include mx.ml-mr(0);
+}
+
+#tail-wrapper {
+ @include bp.xxxl {
+ padding-right: 4.5rem !important;
+ }
+
+ > :not(script) {
+ margin-top: 3rem;
+ }
+}
diff --git a/_sass/base/_index.scss b/_sass/base/_index.scss
new file mode 100644
index 00000000..611d28ff
--- /dev/null
+++ b/_sass/base/_index.scss
@@ -0,0 +1,4 @@
+@forward 'reset';
+@forward 'base';
+@forward 'typography';
+@forward 'syntax';
diff --git a/_sass/base/_reset.scss b/_sass/base/_reset.scss
new file mode 100644
index 00000000..1e5a6294
--- /dev/null
+++ b/_sass/base/_reset.scss
@@ -0,0 +1,41 @@
+@use '../abstracts/mixins' as *;
+
+::-webkit-input-placeholder {
+ @include placeholder;
+}
+
+::-moz-placeholder {
+ @include placeholder;
+}
+
+:-ms-input-placeholder {
+ @include placeholder;
+}
+
+::-ms-input-placeholder {
+ @include placeholder;
+}
+
+::placeholder {
+ @include placeholder;
+}
+
+:focus::-webkit-input-placeholder {
+ @include placeholder-focus;
+}
+
+:focus::-moz-placeholder {
+ @include placeholder-focus;
+}
+
+:focus:-ms-input-placeholder {
+ @include placeholder-focus;
+}
+
+:focus::-ms-input-placeholder {
+ @include placeholder-focus;
+}
+
+:focus::placeholder {
+ @include placeholder-focus;
+}
diff --git a/_sass/base/_syntax.scss b/_sass/base/_syntax.scss
new file mode 100644
index 00000000..a7a5cba9
--- /dev/null
+++ b/_sass/base/_syntax.scss
@@ -0,0 +1,255 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+.highlighter-rouge {
+ color: var(--highlighter-rouge-color);
+ margin-top: 0.5rem;
+ margin-bottom: 1.2em; /* Override BS Inline-code style */
+}
+
+.highlight {
+ @extend %rounded;
+ @extend %code-snippet-bg;
+
+ overflow: auto;
+ padding-bottom: 0.75rem;
+
+ @at-root figure#{&} {
+ @extend %code-snippet-bg;
+ }
+
+ pre {
+ margin-bottom: 0;
+ font-size: v.$code-font-size;
+ line-height: 1.4rem;
+ }
+
+ table {
+ td {
+ &:first-child {
+ display: inline-block;
+ margin-left: 1rem;
+ margin-right: 0.75rem;
+ }
+
+ &:last-child {
+ padding-right: 2rem !important;
+ }
+
+ pre {
+ overflow: visible; /* Fixed iOS safari overflow-x */
+ word-break: normal; /* Fixed iOS safari linenos code break */
+ }
+ }
+ }
+
+ .lineno {
+ text-align: right;
+ color: var(--highlight-lineno-color);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+} /* .highlight */
+
+code {
+ -webkit-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+ color: var(--code-color);
+
+ &.highlighter-rouge {
+ font-size: v.$code-font-size;
+ padding: 3px 5px;
+ overflow-wrap: break-word;
+ border-radius: v.$radius-sm;
+ background-color: var(--inline-code-bg);
+ }
+
+ &.filepath {
+ background-color: inherit;
+ color: var(--filepath-text-color);
+ font-weight: 600;
+ padding: 0;
+ }
+
+ a > &.highlighter-rouge {
+ padding-bottom: 0; /* show link's underline */
+ color: inherit;
+ }
+
+ a:hover > &.highlighter-rouge {
+ border-bottom: none;
+ }
+
+ blockquote & {
+ color: inherit;
+ }
+}
+
+td.rouge-code {
+ @extend %code-snippet-padding;
+
+ /*
+ Prevent some browser extends from
+ changing the URL string of code block.
+ */
+ a {
+ color: inherit !important;
+ border-bottom: none !important;
+ pointer-events: none;
+ }
+}
+
+div[class^='language-'] {
+ @extend %rounded;
+ @extend %code-snippet-bg;
+
+ box-shadow: var(--language-border-color) 0 0 0 1px;
+
+ .content > & {
+ @include mx.ml-mr(-1rem);
+
+ border-radius: 0;
+
+ @include bp.sm {
+ @include mx.ml-mr(0);
+
+ border-radius: v.$radius-lg;
+ }
+ }
+
+ .code-header {
+ @include bp.sm {
+ @include mx.ml-mr(0);
+
+ $dot-margin: 1rem;
+
+ &::before {
+ content: '';
+ display: inline-block;
+ margin-left: $dot-margin;
+ width: v.$code-dot-size;
+ height: v.$code-dot-size;
+ border-radius: 50%;
+ background-color: var(--code-header-muted-color);
+ box-shadow:
+ (v.$code-dot-size + v.$code-dot-gap) 0 0
+ var(--code-header-muted-color),
+ (v.$code-dot-size + v.$code-dot-gap) * 2 0 0
+ var(--code-header-muted-color);
+ }
+
+ span {
+ // center the text of label
+ margin-left: calc(($dot-margin + v.$code-dot-size) / 2 * -1);
+ }
+ }
+ }
+
+ .highlight {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+}
+
+/* Hide line numbers for default, console, and terminal code snippets */
+div {
+ &.nolineno,
+ &.language-plaintext,
+ &.language-console,
+ &.language-terminal {
+ td:first-child {
+ padding: 0 !important;
+ margin-right: 0;
+
+ .lineno {
+ display: none;
+ }
+ }
+ }
+}
+
+.code-header {
+ @extend %no-cursor;
+
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: v.$code-header-height;
+ margin-left: 0.75rem;
+ margin-right: 0.25rem;
+
+ /* the label block */
+ span {
+ line-height: v.$code-header-height;
+
+ /* label icon */
+ i {
+ font-size: 1rem;
+ width: v.$code-icon-width;
+ color: var(--code-header-icon-color);
+
+ &.small {
+ font-size: 70%;
+ }
+ }
+
+ @at-root [file] #{&} > i {
+ position: relative;
+ top: 1px; /* center the file icon */
+ }
+
+ /* label text */
+ &::after {
+ content: attr(data-label-text);
+ font-size: 0.85rem;
+ font-weight: 600;
+ color: var(--code-header-text-color);
+ }
+ }
+
+ /* clipboard */
+ button {
+ @extend %cursor-pointer;
+ @extend %rounded;
+
+ border: 1px solid transparent;
+ height: 2rem;
+ width: 2rem;
+ margin-right: 0.125rem;
+ padding: 0;
+ background-color: inherit;
+
+ i {
+ color: var(--code-header-icon-color);
+ }
+
+ &[timeout] {
+ &:hover {
+ border-color: var(--clipboard-checked-color);
+ }
+
+ i {
+ font-size: 90%;
+ color: var(--clipboard-checked-color);
+ }
+ }
+
+ &:focus {
+ outline: none;
+ }
+
+ &:not([timeout]):hover {
+ background-color: rgb(128 128 128 / 37%);
+
+ i {
+ color: white;
+ }
+ }
+ }
+}
diff --git a/_sass/base/_typography.scss b/_sass/base/_typography.scss
new file mode 100644
index 00000000..8b679726
--- /dev/null
+++ b/_sass/base/_typography.scss
@@ -0,0 +1,264 @@
+@use '../abstracts/variables' as v;
+@use '../abstracts/breakpoints' as bp;
+@use '../abstracts/mixins' as mx;
+@use '../abstracts/placeholders';
+
+@for $i from 1 through 5 {
+ h#{$i} {
+ @extend %heading;
+
+ @if $i > 1 {
+ @extend %anchor;
+ }
+
+ @if $i < 5 {
+ $size-factor: 0.25rem;
+
+ @if $i > 1 {
+ $size-factor: 0.18rem;
+
+ main & {
+ @if $i == 2 {
+ margin: 2.5rem 0 1.25rem;
+ } @else {
+ margin: 2rem 0 1rem;
+ }
+ }
+ }
+
+ font-size: 1rem + (5 - $i) * $size-factor;
+ } @else {
+ font-size: 1.05rem;
+ }
+ }
+}
+
+a {
+ @extend %link-color;
+
+ text-decoration: none;
+}
+
+img {
+ max-width: 100%;
+ height: auto;
+ transition: all 0.35s ease-in-out;
+
+ .blur & {
+ $blur: 20px;
+
+ -webkit-filter: blur($blur);
+ filter: blur($blur);
+ }
+}
+
+blockquote {
+ border-left: 0.125rem solid var(--blockquote-border-color);
+ padding-left: 1rem;
+ color: var(--blockquote-text-color);
+ margin-top: 0.5rem;
+
+ > p:last-child {
+ margin-bottom: 0;
+ }
+
+ &[class^='prompt-'] {
+ border-left: 0;
+ position: relative;
+ padding: 1rem 1rem 1rem 3rem;
+ color: var(--prompt-text-color);
+
+ @extend %rounded;
+
+ &::before {
+ text-align: center;
+ width: 3rem;
+ position: absolute;
+ left: 0.25rem;
+ margin-top: 0.4rem;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ }
+ }
+
+ @include mx.prompt('tip', '\f0eb', $fa-style: 'regular');
+ @include mx.prompt('info', '\f06a', $rotate: 180);
+ @include mx.prompt('warning', '\f06a');
+ @include mx.prompt('danger', '\f071');
+}
+
+kbd {
+ font-family: Lato, sans-serif;
+ display: inline-block;
+ vertical-align: middle;
+ line-height: 1.3rem;
+ min-width: 1.75rem;
+ text-align: center;
+ margin: 0 0.3rem;
+ padding-top: 0.1rem;
+ color: var(--kbd-text-color);
+ background-color: var(--kbd-bg-color);
+ border-radius: v.$radius-sm;
+ border: solid 1px var(--kbd-wrap-color);
+ box-shadow: inset 0 -2px 0 var(--kbd-wrap-color);
+}
+
+hr {
+ border-color: var(--main-border-color);
+ opacity: 1;
+}
+
+footer {
+ background-color: var(--main-bg);
+ height: v.$footer-height;
+ border-top: 1px solid var(--main-border-color);
+
+ @extend %text-xs;
+
+ a {
+ @extend %text-highlight;
+
+ &:hover {
+ @extend %link-hover;
+ }
+ }
+
+ em {
+ @extend %text-highlight;
+ }
+
+ p {
+ text-align: center;
+ margin-bottom: 0;
+ }
+}
+
+/* fontawesome icons */
+i {
+ &.far,
+ &.fas {
+ @extend %no-cursor;
+ }
+}
+
+sup {
+ @extend %sup-fn-target;
+}
+
+main {
+ line-height: 1.75;
+
+ h1 {
+ margin-top: 2rem;
+
+ @include bp.lg {
+ margin-top: 3rem;
+ }
+ }
+
+ p {
+ > a.popup {
+ &:not(.normal):not(.left):not(.right) {
+ @include mx.align-center;
+ }
+ }
+ }
+
+ .categories,
+ #tags,
+ #archives {
+ a:not(:hover) {
+ @extend %no-bottom-border;
+ }
+ }
+
+ @include bp.lte(bp.get(sm)) {
+ .content {
+ > blockquote[class^='prompt-'] {
+ @include mx.ml-mr(-1rem);
+
+ border-radius: 0;
+ max-width: none;
+ }
+ }
+ }
+}
+
+.footnotes > ol {
+ padding-left: 2rem;
+ margin-top: 0.5rem;
+
+ > li {
+ &:not(:last-child) {
+ margin-bottom: 0.3rem;
+ }
+
+ @extend %sup-fn-target;
+
+ > p {
+ margin-left: 0.25em;
+
+ @include mx.mt-mb(0);
+ }
+ }
+}
+
+.footnote {
+ @at-root a#{&} {
+ @include mx.ml-mr(1px);
+ @include mx.pl-pr(2px);
+
+ border-bottom-style: none !important;
+ }
+}
+
+.reversefootnote {
+ @at-root a#{&} {
+ font-size: 0.6rem;
+ line-height: 1;
+ position: relative;
+ bottom: 0.25em;
+ margin-left: 0.25em;
+ border-bottom-style: none !important;
+ }
+}
+
+/* --- Begin of Markdown table style --- */
+
+/* it will be created by Liquid */
+.table-wrapper {
+ overflow-x: auto;
+ margin-bottom: 1.5rem;
+
+ > table {
+ min-width: 100%;
+ overflow-x: auto;
+ border-spacing: 0;
+
+ thead {
+ border-bottom: solid 2px rgb(210 215 217 / 75%);
+
+ th {
+ @extend %table-cell;
+ }
+ }
+
+ tbody {
+ tr {
+ border-bottom: 1px solid var(--tb-border-color);
+
+ &:nth-child(2n) {
+ background-color: var(--tb-even-bg);
+ }
+
+ &:nth-child(2n + 1) {
+ background-color: var(--tb-odd-bg);
+ }
+
+ td {
+ @extend %table-cell;
+ }
+ }
+ } /* tbody */
+ } /* table */
+}
diff --git a/_sass/colors/dark-syntax.scss b/_sass/colors/dark-syntax.scss
deleted file mode 100644
index 3912ed39..00000000
--- a/_sass/colors/dark-syntax.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The syntax dark mode styles.
- */
-
-@mixin dark-syntax {
- --highlight-bg-color: #252525;
- --highlighter-rouge-color: #de6b18;
- --highlight-lineno-color: #6c6c6d;
- --inline-code-bg: #272822;
- --code-header-text-color: #6a6a6a;
- --code-header-muted-color: rgb(60, 60, 60);
- --code-header-icon-color: rgb(86, 86, 86);
- --clipboard-checked-color: #2bcc2b;
- --filepath-text-color: #bdbdbd;
-
- pre { color: #bfbfbf; } /* override Bootstrap */
-
- .highlight {
- .gp { color: #818c96; }
- }
-
- /* syntax highlight colors from https://raw.githubusercontent.com/jwarby/pygments-css/master/monokai.css */
-
- .highlight pre { background-color: var(--highlight-bg-color); }
- .highlight .hll { background-color: var(--highlight-bg-color); }
- .highlight .c { color: #75715e; } /* Comment */
- .highlight .err { color: #960050; background-color: #1e0010; } /* Error */
- .highlight .k { color: #66d9ef; } /* Keyword */
- .highlight .l { color: #ae81ff; } /* Literal */
- .highlight .n { color: #f8f8f2; } /* Name */
- .highlight .o { color: #f92672; } /* Operator */
- .highlight .p { color: #f8f8f2; } /* Punctuation */
- .highlight .cm { color: #75715e; } /* Comment.Multiline */
- .highlight .cp { color: #75715e; } /* Comment.Preproc */
- .highlight .c1 { color: #75715e; } /* Comment.Single */
- .highlight .cs { color: #75715e; } /* Comment.Special */
- .highlight .ge { color: inherit; font-style: italic; } /* Generic.Emph */
- .highlight .gs { font-weight: bold; } /* Generic.Strong */
- .highlight .kc { color: #66d9ef; } /* Keyword.Constant */
- .highlight .kd { color: #66d9ef; } /* Keyword.Declaration */
- .highlight .kn { color: #f92672; } /* Keyword.Namespace */
- .highlight .kp { color: #66d9ef; } /* Keyword.Pseudo */
- .highlight .kr { color: #66d9ef; } /* Keyword.Reserved */
- .highlight .kt { color: #66d9ef; } /* Keyword.Type */
- .highlight .ld { color: #e6db74; } /* Literal.Date */
- .highlight .m { color: #ae81ff; } /* Literal.Number */
- .highlight .s { color: #e6db74; } /* Literal.String */
- .highlight .na { color: #a6e22e; } /* Name.Attribute */
- .highlight .nb { color: #f8f8f2; } /* Name.Builtin */
- .highlight .nc { color: #a6e22e; } /* Name.Class */
- .highlight .no { color: #66d9ef; } /* Name.Constant */
- .highlight .nd { color: #a6e22e; } /* Name.Decorator */
- .highlight .ni { color: #f8f8f2; } /* Name.Entity */
- .highlight .ne { color: #a6e22e; } /* Name.Exception */
- .highlight .nf { color: #a6e22e; } /* Name.Function */
- .highlight .nl { color: #f8f8f2; } /* Name.Label */
- .highlight .nn { color: #f8f8f2; } /* Name.Namespace */
- .highlight .nx { color: #a6e22e; } /* Name.Other */
- .highlight .py { color: #f8f8f2; } /* Name.Property */
- .highlight .nt { color: #f92672; } /* Name.Tag */
- .highlight .nv { color: #f8f8f2; } /* Name.Variable */
- .highlight .ow { color: #f92672; } /* Operator.Word */
- .highlight .w { color: #f8f8f2; } /* Text.Whitespace */
- .highlight .mf { color: #ae81ff; } /* Literal.Number.Float */
- .highlight .mh { color: #ae81ff; } /* Literal.Number.Hex */
- .highlight .mi { color: #ae81ff; } /* Literal.Number.Integer */
- .highlight .mo { color: #ae81ff; } /* Literal.Number.Oct */
- .highlight .sb { color: #e6db74; } /* Literal.String.Backtick */
- .highlight .sc { color: #e6db74; } /* Literal.String.Char */
- .highlight .sd { color: #e6db74; } /* Literal.String.Doc */
- .highlight .s2 { color: #e6db74; } /* Literal.String.Double */
- .highlight .se { color: #ae81ff; } /* Literal.String.Escape */
- .highlight .sh { color: #e6db74; } /* Literal.String.Heredoc */
- .highlight .si { color: #e6db74; } /* Literal.String.Interpol */
- .highlight .sx { color: #e6db74; } /* Literal.String.Other */
- .highlight .sr { color: #e6db74; } /* Literal.String.Regex */
- .highlight .s1 { color: #e6db74; } /* Literal.String.Single */
- .highlight .ss { color: #e6db74; } /* Literal.String.Symbol */
- .highlight .bp { color: #f8f8f2; } /* Name.Builtin.Pseudo */
- .highlight .vc { color: #f8f8f2; } /* Name.Variable.Class */
- .highlight .vg { color: #f8f8f2; } /* Name.Variable.Global */
- .highlight .vi { color: #f8f8f2; } /* Name.Variable.Instance */
- .highlight .il { color: #ae81ff; } /* Literal.Number.Integer.Long */
- .highlight .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */
- .highlight .gd { color: #f92672; background-color: #561c08; } /* Generic.Deleted & Diff Deleted */
- .highlight .gi { color: #a6e22e; background-color: #0b5858; } /* Generic.Inserted & Diff Inserted */
-}
diff --git a/_sass/colors/dark-typography.scss b/_sass/colors/dark-typography.scss
deleted file mode 100644
index 7b7a39fe..00000000
--- a/_sass/colors/dark-typography.scss
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * The main dark mode styles
- */
-
-@mixin dark-scheme {
- /* Framework color */
- --body-bg: var(--main-bg);
- --mask-bg: rgb(68, 69, 70);
- --main-bg: rgb(27, 27, 30);
- --main-border-color: rgb(44, 45, 45);
-
- /* Common color */
- --text-color: rgb(175, 176, 177);
- --text-muted-color: rgb(107, 116, 124);
- --heading-color: #cccccc;
- --blockquote-border-color: rgb(66, 66, 66);
- --blockquote-text-color: rgb(117, 117, 117);
- --link-color: rgb(138, 180, 248);
- --link-underline-color: rgb(82, 108, 150);
- --button-bg: rgb(39, 40, 43);
- --btn-border-color: rgb(63, 65, 68);
- --btn-backtotop-color: var(--text-color);
- --btn-backtotop-border-color: var(--btn-border-color);
- --btn-box-shadow: var(--main-bg);
- --card-header-bg: rgb(51, 50, 50);
- --label-color: rgb(108, 117, 125);
- --checkbox-color: rgb(118, 120, 121);
- --checkbox-checked-color: var(--link-color);
-
- /* Sidebar */
- --sidebar-bg: radial-gradient(circle, #242424 0%, #1d1f27 100%);
- --sidebar-muted-color: #6d6c6b;
- --sidebar-active-color: rgb(255, 255, 255, 0.8);
- --nav-cursor-color: rgb(183, 182, 182);
- --sidebar-btn-bg: rgb(117, 116, 116, 0.2);
-
- /* Topbar */
- --topbar-text-color: var(--text-color);
- --topbar-wrapper-bg: rgb(39, 40, 43);
- --search-wrapper-bg: rgb(34, 34, 39);
- --search-wrapper-border-color: rgb(34, 34, 39);
- --search-icon-color: rgb(100, 102, 105);
- --input-focus-border-color: rgb(112, 114, 115);
-
- /* Home page */
- --post-list-text-color: rgb(175, 176, 177);
- --btn-patinator-text-color: var(--text-color);
- --btn-paginator-hover-color: rgb(64, 65, 66);
- --btn-paginator-border-color: var(--btn-border-color);
- --btn-text-color: var(--text-color);
- --pin-bg: rgb(34, 35, 37);
- --pin-color: inherit;
-
- /* Posts */
- --toc-highlight: rgb(116, 178, 243);
- --tag-bg: rgb(41, 40, 40);
- --tag-hover: rgb(43, 56, 62);
- --tb-odd-bg: rgba(42, 47, 53, 0.52); /* odd rows of the posts' table */
- --tb-even-bg: rgb(31, 31, 34); /* even rows of the posts' table */
- --tb-border-color: var(--tb-odd-bg);
- --footnote-target-bg: rgb(63, 81, 181);
- --btn-share-color: #6c757d;
- --btn-share-hover-color: #bfc1ca;
- --relate-post-date: var(--text-muted-color);
- --card-bg: rgb(39, 40, 43);
- --card-border-color: rgb(53, 53, 60);
- --card-box-shadow: var(--main-bg);
- --preview-img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);
- --kbd-wrap-color: #6a6a6a;
- --kbd-text-color: #d3d3d3;
- --kbd-bg-color: #242424;
- --prompt-text-color: rgb(216, 212, 212, 0.75);
- --prompt-tip-bg: rgba(77, 187, 95, 0.2);
- --prompt-tip-icon-color: rgb(5, 223, 5, 0.68);
- --prompt-info-bg: rgb(7, 59, 104, 0.8);
- --prompt-info-icon-color: #0075d1;
- --prompt-warning-bg: rgb(90, 69, 3, 0.95);
- --prompt-warning-icon-color: rgb(255, 165, 0, 0.8);
- --prompt-danger-bg: rgb(86, 28, 8, 0.8);
- --prompt-danger-icon-color: #cd0202;
-
- /* tags */
- --tag-border: rgb(59, 79, 88);
- --tag-shadow: rgb(32, 33, 33);
- --search-tag-bg: var(--tag-bg);
- --dash-color: rgb(63, 65, 68);
-
- /* categories */
- --categories-border: rgb(64, 66, 69);
- --categories-hover-bg: rgb(73, 75, 76);
- --categories-icon-hover-color: white;
-
- /* archives */
- --timeline-node-bg: rgb(150, 152, 156);
- --timeline-color: rgb(63, 65, 68);
- --timeline-year-dot-color: var(--timeline-color);
-
- .post img[data-src] {
- -webkit-filter: brightness(95%);
- filter: brightness(95%);
- }
-
- hr {
- border-color: var(--main-border-color);
- }
-
- /* posts' toc, override BS */
- nav[data-toggle="toc"] .nav-link.active,
- nav[data-toggle="toc"] .nav-link.active:focus,
- nav[data-toggle="toc"] .nav-link.active:hover,
- nav[data-toggle="toc"] .nav > li > a:focus,
- nav[data-toggle="toc"] .nav > li > a:hover {
- color: var(--toc-highlight) !important;
- border-left-color: var(--toc-highlight) !important;
- }
-
- /* categories */
- .categories.card,
- .list-group-item {
- background-color: var(--card-bg);
- }
-
- .categories {
- .card-header {
- background-color: var(--card-header-bg);
- }
-
- .list-group-item {
- border-left: none;
- border-right: none;
- padding-left: 2rem;
- border-color: var(--categories-border);
-
- &:last-child {
- border-bottom-color: var(--card-bg);
- }
- }
- }
-
- #archives li:nth-child(odd) {
- background-image:
- linear-gradient(
- to left,
- rgb(26, 26, 30),
- rgb(39, 39, 45),
- rgb(39, 39, 45),
- rgb(39, 39, 45),
- rgb(26, 26, 30)
- );
- }
-
- color-scheme: dark;
-
- #disqus_thread { /* stylelint-disable-line selector-id-pattern */
- color-scheme: none;
- }
-} /* dark-scheme */
diff --git a/_sass/colors/light-syntax.scss b/_sass/colors/light-syntax.scss
deleted file mode 100644
index aeac91fa..00000000
--- a/_sass/colors/light-syntax.scss
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The syntax light mode code snippet colors.
- */
-
-@mixin light-syntax {
- /* see:
-{% for post in site.posts %}
- {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
- {% capture pre_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %}
- {% if forloop.first %}
- {% assign last_day = "" %}
- {% assign last_month = "" %}
- {{this_year}}
-
\ No newline at end of file
diff --git a/_tabs/categories.md b/_tabs/categories.md
index a366bb1a..2d241be9 100644
--- a/_tabs/categories.md
+++ b/_tabs/categories.md
@@ -1,98 +1,5 @@
---
-title: Categories
-title2: Padraignix's InfoSec Blog - Categories
-type: categories
-summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
-keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
-thumbnail: https://github.com/padraignix.png
-canon: https://blog.quantumlyconfused.com/tabs/categories/
+layout: categories
+icon: fas fa-stream
+order: 1
---
-
-{% assign HEAD_PREFIX = "h_" %}
-{% assign LIST_PREFIX = "l_" %}
-
-{% assign group_index = 0 %}
-
-{% assign sort_categories = site.categories | sort %}
-
-
-
-{% for category in sort_categories %}
- {% assign category_name = category | first %}
- {% assign posts_of_category = category | last %}
- {% assign first_post = posts_of_category | first %}
-
- {% if category_name == first_post.categories[0] %}
- {% assign sub_categories = "" | split: "" %}
- {% for post in posts_of_category %}
- {% assign second_category = post.categories[1] %}
- {% if second_category %}
- {% unless sub_categories contains second_category %}
- {% assign sub_categories = sub_categories | push: second_category %}
- {% endunless %}
- {% endif %}
- {% endfor %}
- {% assign sub_categories = sub_categories | sort %}
- {% assign sub_categories_size = sub_categories | size %}
-
- -
- {% endif %}
-
-
- - {% capture this_day %}{{ post.date | date: "%d" }}{% endcapture %} - {% capture this_month %}{{ post.date | date: "%b" }}{% endcapture %} - {{ this_day }} - {{ this_month }} - {{ post.title }} --
- {% if forloop.last %}
-
-
- {% assign last_day = "" %}
- {% assign last_month = "" %}
- {% endif %}
-{% endfor %}
-
-
-
- {% assign group_index = group_index | plus: 1 %}
- {% endif %}
-{% endfor %}
diff --git a/_tabs/disclaimer.md b/_tabs/disclaimer.md
index 8b866f79..7a409270 100644
--- a/_tabs/disclaimer.md
+++ b/_tabs/disclaimer.md
@@ -1,5 +1,7 @@
---
title: Disclaimer
+icon: fas fa-shield-alt
+order: 6
title2: Quantumly Confused - Disclaimer
summary: Legal disclaimer, Cookie policy, and Privacy policy for Padraignix's InfoSec Blog.
keywords: hacking, blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
diff --git a/_tabs/projects.md b/_tabs/projects.md
index d72591c9..4533cdd1 100644
--- a/_tabs/projects.md
+++ b/_tabs/projects.md
@@ -1,5 +1,7 @@
---
title: Projects
+icon: fas fa-code
+order: 5
title2: Padraignix's InfoSec Blog - Projects
summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
diff --git a/_tabs/tags.md b/_tabs/tags.md
index 5ed84d8a..ded3adc1 100644
--- a/_tabs/tags.md
+++ b/_tabs/tags.md
@@ -1,29 +1,5 @@
---
-title: Tags
-title2: Padraignix's InfoSec Blog - Tags
-type: tags
-summary: Personal blog covering CTF events, Security Infrastructure, Cryptography, Emulator development, Quantum Technology and related adventures
-keywords: hacking,quantumly confused,blog,information security,infosec,hackthebox,quantum computing,quantum technology,emulation,emulators,reverse engineering
-thumbnail: https://github.com/padraignix.png
-canon: https://blog.quantumlyconfused.com/tabs/tags/
+layout: tags
+icon: fas fa-tags
+order: 2
---
-
-{% comment %}
- 'site.tags' looks like a Map, e.g. site.tags.MyTag.[ Post0, Post1, ... ]
- Print the {{ site.tags }} will help you to understand it.
-{% endcomment %}
-
-
- {% if sub_categories_size > 0 %}
-
- {% else %}
-
- {% endif %}
-
- {{ category_name }}
-
-
- {% assign top_posts_size = site.categories[category_name] | size %}
-
- {% if sub_categories_size > 0 %}
- {{ sub_categories_size }}
- {% if sub_categories_size > 1 %}categories{% else %}category{% endif %},
- {% endif %}
- {{ top_posts_size }}
- post{% if top_posts_size > 1 %}s{% endif %}
-
-
-
- {% if sub_categories_size > 0%}
-
-
-
- {% else %}
-
-
-
- {% endif %}
-
-
- {% if sub_categories_size > 0 %}
-
-
- {% endif %}
-
- -
- {% for sub_category in sub_categories %}
-
- - - {{ sub_category }} - {% assign posts_size = site.categories[sub_category] | size %} - {{ posts_size }} - post{% if posts_size > 1 %}s{% endif %} - - - {% endfor %} -
-{% assign tags = "" | split: "" %}
-{% for t in site.tags %}
- {% assign tags = tags | push: t[0] %}
-{% endfor %}
-
-{% assign sorted_tags = tags | sort_natural %}
-
-{% for t in sorted_tags %}
-
-{% endfor %}
-
-
diff --git a/assets/404.html b/assets/404.html
index 4490ea5f..cb129c06 100644
--- a/assets/404.html
+++ b/assets/404.html
@@ -2,13 +2,8 @@
layout: page
title: "404: Page not found"
permalink: /404.html
-
-redirect_from:
- - /norobots/
- - /assets/
- - /posts/
---
-
-
+{% include lang.html %}
+
+{{site.data.locales[site.lang].not_found.statment }}
-{{ site.data.locales[lang].not_found.statement }}
\ No newline at end of file diff --git a/assets/css/jekyll-theme-chirpy.scss b/assets/css/jekyll-theme-chirpy.scss new file mode 100644 index 00000000..58d6ce7e --- /dev/null +++ b/assets/css/jekyll-theme-chirpy.scss @@ -0,0 +1,68 @@ +--- +--- + +@use 'abstracts/variables' with ( + $theme: '{{ site.theme_mode }}' +); + +/* prettier-ignore */ +@use 'main +{%- if jekyll.environment == 'production' -%} + .bundle +{%- endif -%} +'; + +/* append your custom style below */ + +.page__comments { + margin-top: 3rem; + + .page__comments-title { + margin-bottom: 0.75rem; + padding-top: 2rem; + border-top: 1px solid var(--main-border-color); + font-size: 1.25rem; + text-transform: uppercase; + } + + .card { + padding: 0.5rem 1rem; + border-color: var(--card-border-color); + background-color: var(--card-bg); + color: var(--text-color); + box-shadow: 0 0 5px var(--card-box-shadow); + } + + .comment { + display: flow-root; + margin: 1rem 0; + padding-bottom: 1rem; + border-bottom: 1px solid var(--main-border-color); + } + + .comment__avatar-wrapper { + float: left; + width: 60px; + margin-top: 0.25rem; + } + + .comment__avatar { + width: 40px; + height: 40px; + border-radius: 50%; + } + + .comment__content-wrapper { + float: right; + width: calc(100% - 60px); + } + + .comment__author, + .comment__date { + margin: 0; + } + + .status { + margin-top: 0.5rem; + } +} diff --git a/assets/css/lightbox.css b/assets/css/lightbox.css deleted file mode 100644 index e81a309d..00000000 --- a/assets/css/lightbox.css +++ /dev/null @@ -1,94 +0,0 @@ -#lightbox {width: 100%; height: 100%; position: fixed; top: 0; left: 0; background: rgba(0,0,0,0.85); z-index: 9999999; line-height: 0; cursor: pointer; display: none;} -#lightbox .img { - position: relative; - top: 50%; - left: 50%; - -ms-transform: translateX(-50%) translateY(-50%); - -webkit-transform: translate(-50%,-50%); - transform: translate(-50%,-50%); - max-width: 100%; - max-height: 100%; -} -#lightbox .img img {opacity: 0; pointer-events: none; width: auto;} -@media screen and (min-width: 1200px) { - #lightbox .img { - max-width: 1200px; - } -} -@media screen and (min-height: 1200px) { - #lightbox .img { - max-height: 1200px; - } -} -#lightbox span {display: block; position: fixed; bottom: 13px; height: 1.5em; line-height: 1.4em; width: 100%; text-align: center; color: white; text-shadow: - -1px -1px 0 #000, - 1px -1px 0 #000, - -1px 1px 0 #000, - 1px 1px 0 #000; -} - -#lightbox span {display: none;} - -#lightbox .videoWrapperContainer { - position: relative; - top: 50%; - left: 50%; - -ms-transform: translateX(-50%) translateY(-50%); - -webkit-transform: translate(-50%,-50%); - transform: translate(-50%,-50%); - max-width: 900px; - max-height: 100%; -} -#lightbox .videoWrapperContainer .videoWrapper { - height: 0; - line-height: 0; - margin: 0; - padding: 0; - position: relative; - padding-bottom: 56.333%; /* custom */ - background: black; -} -#lightbox .videoWrapper iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; - display: block; -} -#lightbox #prev, #lightbox #next {height: 50px; line-height: 36px; display: none; margin-top: -25px; position: fixed; top: 50%; padding: 0 15px; cursor: pointer; text-decoration: none; z-index: 99; color: white; font-size: 60px;} -#lightbox.gallery #prev, #lightbox.gallery #next {display: block;} -#lightbox #prev {left: 0;} -#lightbox #next {right: 0;} -#lightbox #close {height: 50px; width: 50px; position: fixed; cursor: pointer; text-decoration: none; z-index: 99; right: 0; top: 0;} -#lightbox #close:after, #lightbox #close:before {position: absolute; margin-top: 22px; margin-left: 14px; content: ""; height: 3px; background: white; width: 23px; --webkit-transform-origin: 50% 50%; --moz-transform-origin: 50% 50%; --o-transform-origin: 50% 50%; -transform-origin: 50% 50%; -/* Safari */ --webkit-transform: rotate(-45deg); -/* Firefox */ --moz-transform: rotate(-45deg); -/* IE */ --ms-transform: rotate(-45deg); -/* Opera */ --o-transform: rotate(-45deg); -} -#lightbox #close:after { -/* Safari */ --webkit-transform: rotate(45deg); -/* Firefox */ --moz-transform: rotate(45deg); -/* IE */ --ms-transform: rotate(45deg); -/* Opera */ --o-transform: rotate(45deg); -} -#lightbox, #lightbox * { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} \ No newline at end of file diff --git a/assets/css/style.scss b/assets/css/style.scss deleted file mode 100644 index 6ff7046e..00000000 --- a/assets/css/style.scss +++ /dev/null @@ -1,12 +0,0 @@ ---- ---- - -/* - If the number of TAB files has changed, the following variable is required. - And it must be defined before `@import`. -*/ -$tab-count: {{ site.tabs | size | plus: 1 }}; // plus 1 for home tab - -@import "{{ site.theme }}"; - -/* append your custom style below */ diff --git a/assets/feed.xml b/assets/feed.xml index 358d44fd..99373377 100644 --- a/assets/feed.xml +++ b/assets/feed.xml @@ -26,7 +26,7 @@ permalink: /feed.xml {% assign post_absolute_url = post.url | absolute_url %}',title:"",trigger:"hover focus"},Jt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Zt extends ${constructor(e,t){if(void 0===Pt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Gt}static get DefaultType(){return Jt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(Vt),Yt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=P.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Wt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._queueCallback(()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Wt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._activeTrigger[Qt]=!1,this._activeTrigger[Ut]=!1,this._activeTrigger[Kt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(zt,Wt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(zt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ft({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Rt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(zt)}_isShown(){return this.tip&&this.tip.classList.contains(Wt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Xt[t.toUpperCase()];return jt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)P.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Qt]=!(t._isShown()&&t._activeTrigger[Qt]),t.toggle()});else if("manual"!==t){const e=t===Kt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Kt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Ut:Kt]=!0,t._enter()}),P.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Ut:Kt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(Vt),Yt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=B.getDataAttributes(this._element);for(const e of Object.keys(t))qt.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Zt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}function en(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function tn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var nn;h(Zt);const on=document.getElementById("toc-bar"),rn=document.getElementById("toc-solo-trigger"),sn=document.getElementsByClassName("toc-trigger"),an=document.getElementById("toc-popup"),cn=document.getElementById("toc-popup-close"),ln="overflow-hidden",un="closing";class fn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{on.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${en(fn,this,pn)._}px 0px 0px 0px`}).observe(rn),dn._=en(fn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){en(fn,this,dn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return an.open}static showPopup(){this.lockScroll(!0),an.showModal(),cn.blur();an.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){an.toggleAttribute(un),an.addEventListener("animationend",()=>{an.toggleAttribute(un),an.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(ln,e),document.body.classList.toggle(ln,e)}static clickBackdrop(e){if(an.hasAttribute(un))return;const t=e.target.getBoundingClientRect();(e.clientX
',title:"",trigger:"hover focus"},Gt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===jt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Xt}static get DefaultType(){return Gt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(Rt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=P.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.on(e,"mouseover",u);this._queueCallback(()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))P.off(e,"mouseover",u);this._activeTrigger[Ut]=!1,this._activeTrigger[Kt]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ht({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Wt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return kt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)P.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Ut]=!(t._isShown()&&t._activeTrigger[Ut]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Kt:Yt]=!0,t._enter()}),P.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Kt:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(Rt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=B.getDataAttributes(this._element);for(const e of Object.keys(t))Ft.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}function Zt(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function en(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var tn;h(Jt);const nn=document.getElementById("toc-bar"),on=document.getElementById("toc-solo-trigger"),rn=document.getElementsByClassName("toc-trigger"),sn=document.getElementById("toc-popup"),an=document.getElementById("toc-popup-close"),cn="overflow-hidden",ln="closing";class un{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{nn.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${Zt(un,this,dn)._}px 0px 0px 0px`}).observe(on),fn._=Zt(un,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){Zt(un,this,fn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return sn.open}static showPopup(){this.lockScroll(!0),sn.showModal(),an.blur();sn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){sn.toggleAttribute(ln),sn.addEventListener("animationend",()=>{sn.toggleAttribute(ln),sn.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(cn,e),document.body.classList.toggle(cn,e)}static clickBackdrop(e){if(sn.hasAttribute(ln))return;const t=e.target.getBoundingClientRect();(e.clientX
',title:"",trigger:"hover focus"},Ge={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Je extends ${constructor(t,e){if(void 0===ke)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Xe}static get DefaultType(){return Ge}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(We),Ve,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=D.trigger(this._element,this.constructor.eventName("show")),e=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(ze),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))D.on(t,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(ze),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))D.off(t,"mouseover",u);this._activeTrigger[Ke]=!1,this._activeTrigger[Ue]=!1,this._activeTrigger[Ye]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(qe,ze),e.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",n),this._isAnimated()&&e.classList.add(qe),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Fe({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Re]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qe)}_isShown(){return this.tip&&this.tip.classList.contains(ze)}_createPopper(t){const e=m(this._config.placement,[this,t,this._element]),n=Qe[e.toUpperCase()];return je(this._element,t,this._getPopperConfig(n))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return m(t,[this._element,this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...m(this._config.popperConfig,[void 0,e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)D.on(this._element,this.constructor.eventName("click"),this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[Ke]=!(e._isShown()&&e._activeTrigger[Ke]),e.toggle()});else if("manual"!==e){const t=e===Ye?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=e===Ye?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,t,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?Ue:Ye]=!0,e._enter()}),D.on(this._element,n,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?Ue:Ye]=e._element.contains(t.relatedTarget),e._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(We),Ve,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=B.getDataAttributes(this._element);for(const t of Object.keys(e))He.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:s(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,n]of Object.entries(this._config))this.constructor.Default[e]!==n&&(t[e]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const e=Je.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}})}}h(Je);const Ze="data-src",tn="data-lqip",en="shimmer",nn="blur";function on(t){this.parentElement.classList.remove(t)}function rn(){this.complete&&(this.hasAttribute(tn)?on.call(this,nn):on.call(this,en))}function sn(){const t=this.getAttribute(Ze);this.setAttribute("src",encodeURI(t)),this.removeAttribute(Ze)}class an{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(t){return Number(t.getAttribute(this.attrTimestamp))}static getDateFormat(t){return t.getAttribute(this.attrDateFormat)}}function cn(t,e,n){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:n;throw new TypeError("Private element is not present on this object")}function ln(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var un;const fn=document.getElementById("toc-bar"),dn=document.getElementById("toc-solo-trigger"),pn=document.getElementsByClassName("toc-trigger"),hn=document.getElementById("toc-popup"),mn=document.getElementById("toc-popup-close"),gn="overflow-hidden",vn="closing";class bn{static initBar(){new IntersectionObserver(t=>{t.forEach(t=>{fn.classList.toggle("invisible",t.isIntersecting)})},{rootMargin:`-${cn(bn,this,yn)._}px 0px 0px 0px`}).observe(dn),_n._=cn(bn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(t=>{t.onclick=()=>this.hidePopup()})}static refresh(){cn(bn,this,_n)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return hn.open}static showPopup(){this.lockScroll(!0),hn.showModal(),mn.blur();hn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){hn.toggleAttribute(vn),hn.addEventListener("animationend",()=>{hn.toggleAttribute(vn),hn.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(t){document.documentElement.classList.toggle(gn,t),document.body.classList.toggle(gn,t)}static clickBackdrop(t){if(hn.hasAttribute(vn))return;const e=t.target.getBoundingClientRect();(t.clientX
',title:"",trigger:"hover focus"},Gt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===kt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Xt}static get DefaultType(){return Gt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(Rt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=D.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._activeTrigger[Ut]=!1,this._activeTrigger[Kt]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ft({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Wt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return jt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)D.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Ut]=!(t._isShown()&&t._activeTrigger[Ut]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Kt:Yt]=!0,t._enter()}),D.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Kt:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(Rt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=B.getDataAttributes(this._element);for(const e of Object.keys(t))Ht.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}h(Jt);class Zt{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(e){return Number(e.getAttribute(this.attrTimestamp))}static getDateFormat(e){return e.getAttribute(this.attrDateFormat)}}function en(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function tn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var nn;const on=document.getElementById("toc-bar"),rn=document.getElementById("toc-solo-trigger"),sn=document.getElementsByClassName("toc-trigger"),an=document.getElementById("toc-popup"),cn=document.getElementById("toc-popup-close"),ln="overflow-hidden",un="closing";class fn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{on.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${en(fn,this,pn)._}px 0px 0px 0px`}).observe(rn),dn._=en(fn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){en(fn,this,dn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return an.open}static showPopup(){this.lockScroll(!0),an.showModal(),cn.blur();an.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){an.toggleAttribute(un),an.addEventListener("animationend",()=>{an.toggleAttribute(un),an.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(ln,e),document.body.classList.toggle(ln,e)}static clickBackdrop(e){if(an.hasAttribute(un))return;const t=e.target.getBoundingClientRect();(e.clientX
',title:"",trigger:"hover focus"},Xt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===jt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Gt}static get DefaultType(){return Xt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(Wt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=D.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._activeTrigger[Kt]=!1,this._activeTrigger[Ut]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ht({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Rt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return kt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)D.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Kt]=!(t._isShown()&&t._activeTrigger[Kt]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Ut:Yt]=!0,t._enter()}),D.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Ut:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(Wt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=I.getDataAttributes(this._element);for(const e of Object.keys(t))Ft.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}h(Jt);const Zt=".code-header>button",en="timeout",tn="data-title-succeed",nn="data-bs-original-title",on=2e3;function rn(e){if(e.hasAttribute(en)){let t=e.getAttribute(en);if(Number(t)>Date.now())return!0}return!1}function sn(e){e.setAttribute(en,Date.now()+on)}function an(e){e.removeAttribute(en)}function cn(){const e=document.querySelectorAll(Zt);if(0===e.length)return;const t=new ClipboardJS(Zt,{target:e=>e.parentNode.nextElementSibling.querySelector("code .rouge-code")});[...e].map(e=>new Jt(e,{placement:"left"})),t.on("success",e=>{const t=e.trigger;(e.clearSelection(),rn(t))||(t.children[0].setAttribute("class","fas fa-check"),function(e){const t=e.getAttribute(tn);e.setAttribute(nn,t),Jt.getInstance(e).show()}(t),sn(t),setTimeout(()=>{!function(e){Jt.getInstance(e).hide(),e.removeAttribute(nn)}(t),function(e){e.children[0].setAttribute("class","far fa-clipboard")}(t),an(t)},on))})}const ln="data-src",un="data-lqip",dn="shimmer",fn="blur";function pn(e){this.parentElement.classList.remove(e)}function hn(){this.complete&&(this.hasAttribute(un)?pn.call(this,fn):pn.call(this,dn))}function mn(){const e=this.getAttribute(ln);this.setAttribute("src",encodeURI(e)),this.removeAttribute(ln)}const gn=".popup:not(.dark)",bn=".popup:not(.light)";let vn=gn;function _n(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function yn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var wn;const En=document.getElementById("toc-bar"),An=document.getElementById("toc-solo-trigger"),xn=document.getElementsByClassName("toc-trigger"),On=document.getElementById("toc-popup"),Cn=document.getElementById("toc-popup-close"),Tn="overflow-hidden",Ln="closing";class Sn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{En.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${_n(Sn,this,jn)._}px 0px 0px 0px`}).observe(An),kn._=_n(Sn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){_n(Sn,this,kn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return On.open}static showPopup(){this.lockScroll(!0),On.showModal(),Cn.blur();On.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){On.toggleAttribute(Ln),On.addEventListener("animationend",()=>{On.toggleAttribute(Ln),On.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(Tn,e),document.body.classList.toggle(Tn,e)}static clickBackdrop(e){if(On.hasAttribute(Ln))return;const t=e.target.getBoundingClientRect();(e.clientX
',title:"",trigger:"hover focus"},Xt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Jt extends ${constructor(e,t){if(void 0===jt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Gt}static get DefaultType(){return Xt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),D.off(this._element.closest(Wt),Vt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=D.trigger(this._element,this.constructor.eventName("show")),t=(l(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),D.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.on(e,"mouseover",u);this._queueCallback(()=>{D.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(D.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(zt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))D.off(e,"mouseover",u);this._activeTrigger[Kt]=!1,this._activeTrigger[Ut]=!1,this._activeTrigger[Yt]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),D.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(qt,zt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(qt),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ft({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Rt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(qt)}_isShown(){return this.tip&&this.tip.classList.contains(zt)}_createPopper(e){const t=m(this._config.placement,[this,e,this._element]),n=Qt[t.toUpperCase()];return kt(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map(e=>Number.parseInt(e,10)):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return m(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...m(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)D.on(this._element,this.constructor.eventName("click"),this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger[Kt]=!(t._isShown()&&t._activeTrigger[Kt]),t.toggle()});else if("manual"!==t){const e=t===Yt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Yt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");D.on(this._element,e,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Ut:Yt]=!0,t._enter()}),D.on(this._element,n,this._config.selector,e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Ut:Yt]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},D.on(this._element.closest(Wt),Vt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=I.getDataAttributes(this._element);for(const e of Object.keys(t))Ht.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:s(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Jt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}h(Jt);const Zt=".code-header>button",en="timeout",tn="data-title-succeed",nn="data-bs-original-title",on=2e3;function rn(e){if(e.hasAttribute(en)){let t=e.getAttribute(en);if(Number(t)>Date.now())return!0}return!1}function sn(e){e.setAttribute(en,Date.now()+on)}function an(e){e.removeAttribute(en)}function cn(){const e=document.querySelectorAll(Zt);if(0===e.length)return;const t=new ClipboardJS(Zt,{target:e=>e.parentNode.nextElementSibling.querySelector("code .rouge-code")});[...e].map(e=>new Jt(e,{placement:"left"})),t.on("success",e=>{const t=e.trigger;(e.clearSelection(),rn(t))||(t.children[0].setAttribute("class","fas fa-check"),function(e){const t=e.getAttribute(tn);e.setAttribute(nn,t),Jt.getInstance(e).show()}(t),sn(t),setTimeout(()=>{!function(e){Jt.getInstance(e).hide(),e.removeAttribute(nn)}(t),function(e){e.children[0].setAttribute("class","far fa-clipboard")}(t),an(t)},on))})}const ln="data-src",un="data-lqip",dn="shimmer",fn="blur";function pn(e){this.parentElement.classList.remove(e)}function hn(){this.complete&&(this.hasAttribute(un)?pn.call(this,fn):pn.call(this,dn))}function mn(){const e=this.getAttribute(ln);this.setAttribute("src",encodeURI(e)),this.removeAttribute(ln)}const gn=".popup:not(.dark)",bn=".popup:not(.light)";let vn=gn;class _n{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(e){return Number(e.getAttribute(this.attrTimestamp))}static getDateFormat(e){return e.getAttribute(this.attrDateFormat)}}function yn(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var En;const An=document.getElementById("toc-bar"),xn=document.getElementById("toc-solo-trigger"),On=document.getElementsByClassName("toc-trigger"),Cn=document.getElementById("toc-popup"),Tn=document.getElementById("toc-popup-close"),Ln="overflow-hidden",Sn="closing";class kn{static initBar(){new IntersectionObserver(e=>{e.forEach(e=>{An.classList.toggle("invisible",e.isIntersecting)})},{rootMargin:`-${yn(kn,this,Dn)._}px 0px 0px 0px`}).observe(xn),jn._=yn(kn,this,!1)}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach(e=>{e.onclick=()=>this.hidePopup()})}static refresh(){yn(kn,this,jn)._&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static get popupOpened(){return Cn.open}static showPopup(){this.lockScroll(!0),Cn.showModal(),Tn.blur();Cn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(){Cn.toggleAttribute(Sn),Cn.addEventListener("animationend",()=>{Cn.toggleAttribute(Sn),Cn.close()},{once:!0}),this.lockScroll(!1)}static lockScroll(e){document.documentElement.classList.toggle(Ln,e),document.body.classList.toggle(Ln,e)}static clickBackdrop(e){if(Cn.hasAttribute(Sn))return;const t=e.target.getBoundingClientRect();(e.clientX
';
- document.getElementById('lightbox').style.display = 'block';
-
- setGallery(this);
- });
- }
- else if (xmlhttp.status == 400) {
- alert('There was an error 400');
- }
- else {
- alert('something else other than 200 was returned');
- }
- }
- };
- xmlhttp.open("GET", 'https://vimeo.com/api/oembed.json?url='+url, true);
- xmlhttp.send();
-}
-function setGallery(el) {
- var elements = document.body.querySelectorAll(".gallery");
- elements.forEach(element => {
- element.classList.remove('gallery');
- });
- if(el.closest('ul, p')) {
- var link_elements = el.closest('ul, p').querySelectorAll("a[class*='lightbox-']");
- link_elements.forEach(link_element => {
- link_element.classList.remove('current');
- });
- link_elements.forEach(link_element => {
- if(el.getAttribute('href') == link_element.getAttribute('href')) {
- link_element.classList.add('current');
- }
- });
- if(link_elements.length>1) {
- document.getElementById('lightbox').classList.add('gallery');
- link_elements.forEach(link_element => {
- link_element.classList.add('gallery');
- });
- }
- var currentkey;
- var gallery_elements = document.querySelectorAll('a.gallery');
- Object.keys(gallery_elements).forEach(function (k) {
- if(gallery_elements[k].classList.contains('current')) currentkey = k;
- });
- if(currentkey==(gallery_elements.length-1)) var nextkey = 0;
- else var nextkey = parseInt(currentkey)+1;
- if(currentkey==0) var prevkey = parseInt(gallery_elements.length-1);
- else var prevkey = parseInt(currentkey)-1;
- document.getElementById('next').addEventListener("click", function() {
- gallery_elements[nextkey].click();
- });
- document.getElementById('prev').addEventListener("click", function() {
- gallery_elements[prevkey].click();
- });
- }
-}
-
-document.addEventListener("DOMContentLoaded", function() {
-
- //create lightbox div in the footer
- var newdiv = document.createElement("div");
- newdiv.setAttribute('id',"lightbox");
- document.body.appendChild(newdiv);
-
- //add classes to links to be able to initiate lightboxes
- var elements = document.querySelectorAll('a');
- elements.forEach(element => {
- var url = element.getAttribute('href');
- if(url) {
- if(url.indexOf('vimeo') !== -1 && !element.classList.contains('no-lightbox')) {
- is_vimeolink(url,element);
- }
- if(is_youtubelink(url) && !element.classList.contains('no-lightbox')) {
- element.classList.add('lightbox-youtube');
- element.setAttribute('data-id',is_youtubelink(url));
- }
- if(is_imagelink(url) && !element.classList.contains('no-lightbox')) {
- element.classList.add('lightbox-image');
- var href = element.getAttribute('href');
- var filename = href.split('/').pop();
- var split = filename.split(".");
- var name = split[0];
- element.setAttribute('title',name);
- }
- }
- });
-
- //remove the clicked lightbox
- document.getElementById('lightbox').addEventListener("click", function(event) {
- if(event.target.id != 'next' && event.target.id != 'prev'){
- this.innerHTML = '';
- document.getElementById('lightbox').style.display = 'none';
- }
- });
-
- //add the youtube lightbox on click
- var elements = document.querySelectorAll('a.lightbox-youtube');
- elements.forEach(element => {
- element.addEventListener("click", function(event) {
- event.preventDefault();
- document.getElementById('lightbox').innerHTML = '›‹
';
- document.getElementById('lightbox').style.display = 'block';
-
- setGallery(this);
- });
- });
-
- //add the image lightbox on click
- var elements = document.querySelectorAll('a.lightbox-image');
- elements.forEach(element => {
- element.addEventListener("click", function(event) {
- event.preventDefault();
- document.getElementById('lightbox').innerHTML = '›‹
'+this.getAttribute('title')+'';
- document.getElementById('lightbox').style.display = 'block';
-
- setGallery(this);
- });
- });
-
-});
\ No newline at end of file
diff --git a/assets/js/purify.min.js b/assets/js/purify.min.js
deleted file mode 100644
index 79d614c3..00000000
--- a/assets/js/purify.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! @license DOMPurify 3.0.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.0/LICENSE */
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,n){return t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(e,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,a){return r=n()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var a=new(Function.bind.apply(e,o));return r&&t(a,r.prototype),a},r.apply(null,arguments)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,a=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(e){l=!0,o=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw o}}return a}(e,t)||i(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(e)||function(){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 i(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?n-1:0),o=1;o=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,l=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){c=!0,a=e},f:function(){try{l||null==n.return||n.return()}finally{if(c)throw a}}}}(c(e));try{for(r.s();!(t=r.n()).done;){var a=o(t.value,2),l=a[0],u=a[1];n[l]=u}}catch(e){r.e(e)}finally{r.f()}return n}function M(e,t){for(;null!==e;){var n=m(e,t);if(n){if(n.get)return R(n.get);if("function"==typeof n.value)return R(n.value)}e=f(e)}return function(e){return console.warn("fallback value for",e),null}}var I=p(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),U=p(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),F=p(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),z=p(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),H=p(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),j=p(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=p(["#text"]),B=p(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),G=p(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),W=p(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),q=p(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Y=d(/\{\{[\w\W]*|[\w\W]*\}\}/gm),$=d(/<%[\w\W]*|[\w\W]*%>/gm),K=d(/\${[\w\W]*}/gm),V=d(/^data-[\-\w.\u00B7-\uFFFF]/),X=d(/^aria-[\-\w]+$/),Z=d(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),J=d(/^(?:\w+script|data):/i),Q=d(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ee=d(/^html$/i),te=function(){return"undefined"==typeof window?null:window},ne=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var a="dompurify"+(r?"#"+r:"");try{return t.createPolicy(a,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};var re=function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:te(),r=function(e){return t(e)};if(r.version="3.0.0",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;var o=n.document,i=n.document,l=n.DocumentFragment,u=n.HTMLTemplateElement,s=n.Node,f=n.Element,m=n.NodeFilter,d=n.NamedNodeMap,h=void 0===d?n.NamedNodeMap||n.MozNamedAttrMap:d,y=n.HTMLFormElement,g=n.DOMParser,b=n.trustedTypes,v=f.prototype,R=M(v,"cloneNode"),re=M(v,"nextSibling"),oe=M(v,"childNodes"),ae=M(v,"parentNode");if("function"==typeof u){var ie=i.createElement("template");ie.content&&ie.content.ownerDocument&&(i=ie.content.ownerDocument)}var le=ne(b,o),ce=le?le.createHTML(""):"",ue=i,se=ue.implementation,fe=ue.createNodeIterator,me=ue.createDocumentFragment,pe=ue.getElementsByTagName,de=o.importNode,he={};r.isSupported="function"==typeof c&&"function"==typeof ae&&se&&void 0!==se.createHTMLDocument;var ye,ge,be=Y,ve=$,Te=K,Ne=V,Ae=X,Ee=J,we=Q,Se=Z,_e=null,xe=C({},[].concat(a(I),a(U),a(F),a(H),a(P))),ke=null,Oe=C({},[].concat(a(B),a(G),a(W),a(q))),De=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Re=null,Ce=null,Le=!0,Me=!0,Ie=!1,Ue=!0,Fe=!1,ze=!1,He=!1,je=!1,Pe=!1,Be=!1,Ge=!1,We=!0,qe=!1,Ye="user-content-",$e=!0,Ke=!1,Ve={},Xe=null,Ze=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Je=null,Qe=C({},["audio","video","img","source","image","track"]),et=null,tt=C({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),nt="http://www.w3.org/1998/Math/MathML",rt="http://www.w3.org/2000/svg",ot="http://www.w3.org/1999/xhtml",at=ot,it=!1,lt=null,ct=C({},[nt,rt,ot],w),ut=["application/xhtml+xml","text/html"],st="text/html",ft=null,mt=i.createElement("form"),pt=function(e){return e instanceof RegExp||e instanceof Function},dt=function(t){ft&&ft===t||(t&&"object"===e(t)||(t={}),t=L(t),ye=ye=-1===ut.indexOf(t.PARSER_MEDIA_TYPE)?st:t.PARSER_MEDIA_TYPE,ge="application/xhtml+xml"===ye?w:E,_e="ALLOWED_TAGS"in t?C({},t.ALLOWED_TAGS,ge):xe,ke="ALLOWED_ATTR"in t?C({},t.ALLOWED_ATTR,ge):Oe,lt="ALLOWED_NAMESPACES"in t?C({},t.ALLOWED_NAMESPACES,w):ct,et="ADD_URI_SAFE_ATTR"in t?C(L(tt),t.ADD_URI_SAFE_ATTR,ge):tt,Je="ADD_DATA_URI_TAGS"in t?C(L(Qe),t.ADD_DATA_URI_TAGS,ge):Qe,Xe="FORBID_CONTENTS"in t?C({},t.FORBID_CONTENTS,ge):Ze,Re="FORBID_TAGS"in t?C({},t.FORBID_TAGS,ge):{},Ce="FORBID_ATTR"in t?C({},t.FORBID_ATTR,ge):{},Ve="USE_PROFILES"in t&&t.USE_PROFILES,Le=!1!==t.ALLOW_ARIA_ATTR,Me=!1!==t.ALLOW_DATA_ATTR,Ie=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ue=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Fe=t.SAFE_FOR_TEMPLATES||!1,ze=t.WHOLE_DOCUMENT||!1,Pe=t.RETURN_DOM||!1,Be=t.RETURN_DOM_FRAGMENT||!1,Ge=t.RETURN_TRUSTED_TYPE||!1,je=t.FORCE_BODY||!1,We=!1!==t.SANITIZE_DOM,qe=t.SANITIZE_NAMED_PROPS||!1,$e=!1!==t.KEEP_CONTENT,Ke=t.IN_PLACE||!1,Se=t.ALLOWED_URI_REGEXP||Se,at=t.NAMESPACE||ot,De=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(De.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(De.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(De.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Fe&&(Me=!1),Be&&(Pe=!0),Ve&&(_e=C({},a(P)),ke=[],!0===Ve.html&&(C(_e,I),C(ke,B)),!0===Ve.svg&&(C(_e,U),C(ke,G),C(ke,q)),!0===Ve.svgFilters&&(C(_e,F),C(ke,G),C(ke,q)),!0===Ve.mathMl&&(C(_e,H),C(ke,W),C(ke,q))),t.ADD_TAGS&&(_e===xe&&(_e=L(_e)),C(_e,t.ADD_TAGS,ge)),t.ADD_ATTR&&(ke===Oe&&(ke=L(ke)),C(ke,t.ADD_ATTR,ge)),t.ADD_URI_SAFE_ATTR&&C(et,t.ADD_URI_SAFE_ATTR,ge),t.FORBID_CONTENTS&&(Xe===Ze&&(Xe=L(Xe)),C(Xe,t.FORBID_CONTENTS,ge)),$e&&(_e["#text"]=!0),ze&&C(_e,["html","head","body"]),_e.table&&(C(_e,["tbody"]),delete Re.tbody),p&&p(t),ft=t)},ht=C({},["mi","mo","mn","ms","mtext"]),yt=C({},["foreignobject","desc","title","annotation-xml"]),gt=C({},["title","style","font","a","script"]),bt=C({},U);C(bt,F),C(bt,z);var vt=C({},H);C(vt,j);var Tt=function(e){var t=ae(e);t&&t.tagName||(t={namespaceURI:at,tagName:"template"});var n=E(e.tagName),r=E(t.tagName);return!!lt[e.namespaceURI]&&(e.namespaceURI===rt?t.namespaceURI===ot?"svg"===n:t.namespaceURI===nt?"svg"===n&&("annotation-xml"===r||ht[r]):Boolean(bt[n]):e.namespaceURI===nt?t.namespaceURI===ot?"math"===n:t.namespaceURI===rt?"math"===n&&yt[r]:Boolean(vt[n]):e.namespaceURI===ot?!(t.namespaceURI===rt&&!yt[r])&&(!(t.namespaceURI===nt&&!ht[r])&&(!vt[n]&&(gt[n]||!bt[n]))):!("application/xhtml+xml"!==ye||!lt[e.namespaceURI]))},Nt=function(e){A(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},At=function(e,t){try{A(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){A(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!ke[e])if(Pe||Be)try{Nt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Et=function(e){var t,n;if(je)e=" "+e;else{var r=S(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===ye&&at===ot&&(e=''+e+"");var o=le?le.createHTML(e):e;if(at===ot)try{t=(new g).parseFromString(o,ye)}catch(e){}if(!t||!t.documentElement){t=se.createDocument(at,"template",null);try{t.documentElement.innerHTML=it?ce:o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),at===ot?pe.call(t,ze?"html":"body")[0]:ze?t.documentElement:a},wt=function(e){return fe.call(e.ownerDocument||e,e,m.SHOW_ELEMENT|m.SHOW_COMMENT|m.SHOW_TEXT,null,!1)},St=function(e){return e instanceof y&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof h)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},_t=function(t){return"object"===e(s)?t instanceof s:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},xt=function(e,t,n){he[e]&&T(he[e],(function(e){e.call(r,t,n,ft)}))},kt=function(e){var t;if(xt("beforeSanitizeElements",e,null),St(e))return Nt(e),!0;var n=ge(e.nodeName);if(xt("uponSanitizeElement",e,{tagName:n,allowedTags:_e}),e.hasChildNodes()&&!_t(e.firstElementChild)&&(!_t(e.content)||!_t(e.content.firstElementChild))&&O(/<[/\w]/g,e.innerHTML)&&O(/<[/\w]/g,e.textContent))return Nt(e),!0;if(!_e[n]||Re[n]){if(!Re[n]&&Dt(n)){if(De.tagNameCheck instanceof RegExp&&O(De.tagNameCheck,n))return!1;if(De.tagNameCheck instanceof Function&&De.tagNameCheck(n))return!1}if($e&&!Xe[n]){var o=ae(e)||e.parentNode,a=oe(e)||e.childNodes;if(a&&o)for(var i=a.length-1;i>=0;--i)o.insertBefore(R(a[i],!0),re(e))}return Nt(e),!0}return e instanceof f&&!Tt(e)?(Nt(e),!0):"noscript"!==n&&"noembed"!==n||!O(/<\/no(script|embed)/i,e.innerHTML)?(Fe&&3===e.nodeType&&(t=e.textContent,t=_(t,be," "),t=_(t,ve," "),t=_(t,Te," "),e.textContent!==t&&(A(r.removed,{element:e.cloneNode()}),e.textContent=t)),xt("afterSanitizeElements",e,null),!1):(Nt(e),!0)},Ot=function(e,t,n){if(We&&("id"===t||"name"===t)&&(n in i||n in mt))return!1;if(Me&&!Ce[t]&&O(Ne,t));else if(Le&&O(Ae,t));else if(!ke[t]||Ce[t]){if(!(Dt(e)&&(De.tagNameCheck instanceof RegExp&&O(De.tagNameCheck,e)||De.tagNameCheck instanceof Function&&De.tagNameCheck(e))&&(De.attributeNameCheck instanceof RegExp&&O(De.attributeNameCheck,t)||De.attributeNameCheck instanceof Function&&De.attributeNameCheck(t))||"is"===t&&De.allowCustomizedBuiltInElements&&(De.tagNameCheck instanceof RegExp&&O(De.tagNameCheck,n)||De.tagNameCheck instanceof Function&&De.tagNameCheck(n))))return!1}else if(et[t]);else if(O(Se,_(n,we,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==x(n,"data:")||!Je[e]){if(Ie&&!O(Ee,_(n,we,"")));else if(n)return!1}else;return!0},Dt=function(e){return e.indexOf("-")>0},Rt=function(t){var n,o,a,i;xt("beforeSanitizeAttributes",t,null);var l=t.attributes;if(l){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ke};for(i=l.length;i--;){var u=n=l[i],s=u.name,f=u.namespaceURI;if(o="value"===s?n.value:k(n.value),a=ge(s),c.attrName=a,c.attrValue=o,c.keepAttr=!0,c.forceKeepAttr=void 0,xt("uponSanitizeAttribute",t,c),o=c.attrValue,!c.forceKeepAttr&&(At(s,t),c.keepAttr))if(Ue||!O(/\/>/i,o)){Fe&&(o=_(o,be," "),o=_(o,ve," "),o=_(o,Te," "));var m=ge(t.nodeName);if(Ot(m,a,o)){if(!qe||"id"!==a&&"name"!==a||(At(s,t),o=Ye+o),le&&"object"===e(b)&&"function"==typeof b.getAttributeType)if(f);else switch(b.getAttributeType(m,a)){case"TrustedHTML":o=le.createHTML(o);break;case"TrustedScriptURL":o=le.createScriptURL(o)}try{f?t.setAttributeNS(f,s,o):t.setAttribute(s,o),N(r.removed)}catch(e){}}}else At(s,t)}xt("afterSanitizeAttributes",t,null)}},Ct=function e(t){var n,r=wt(t);for(xt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)xt("uponSanitizeShadowNode",n,null),kt(n)||(n.content instanceof l&&e(n.content),Rt(n));xt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){var t,n,a,i,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((it=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!_t(e)){if("function"!=typeof e.toString)throw D("toString is not a function");if("string"!=typeof(e=e.toString()))throw D("dirty is not a string, aborting")}if(!r.isSupported)return e;if(He||dt(c),r.removed=[],"string"==typeof e&&(Ke=!1),Ke){if(e.nodeName){var u=ge(e.nodeName);if(!_e[u]||Re[u])throw D("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof s)1===(n=(t=Et("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===n.nodeName||"HTML"===n.nodeName?t=n:t.appendChild(n);else{if(!Pe&&!Fe&&!ze&&-1===e.indexOf("<"))return le&&Ge?le.createHTML(e):e;if(!(t=Et(e)))return Pe?null:Ge?ce:""}t&&je&&Nt(t.firstChild);for(var f=wt(Ke?e:t);a=f.nextNode();)kt(a)||(a.content instanceof l&&Ct(a.content),Rt(a));if(Ke)return e;if(Pe){if(Be)for(i=me.call(t.ownerDocument);t.firstChild;)i.appendChild(t.firstChild);else i=t;return(ke.shadowroot||ke.shadowrootmod)&&(i=de.call(o,i,!0)),i}var m=ze?t.outerHTML:t.innerHTML;return ze&&_e["!doctype"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&O(ee,t.ownerDocument.doctype.name)&&(m="\n"+m),Fe&&(m=_(m,be," "),m=_(m,ve," "),m=_(m,Te," ")),le&&Ge?le.createHTML(m):m},r.setConfig=function(e){dt(e),He=!0},r.clearConfig=function(){ft=null,He=!1},r.isValidAttribute=function(e,t,n){ft||dt({});var r=ge(e),o=ge(t);return Ot(r,o,n)},r.addHook=function(e,t){"function"==typeof t&&(he[e]=he[e]||[],A(he[e],t))},r.removeHook=function(e){if(he[e])return N(he[e])},r.removeHooks=function(e){he[e]&&(he[e]=[])},r.removeAllHooks=function(){he={}},r}();return re}));
-//# sourceMappingURL=purify.min.js.map
\ No newline at end of file
diff --git a/assets/js/purify.min.js.map b/assets/js/purify.min.js.map
deleted file mode 100644
index d0d4fa0b..00000000
--- a/assets/js/purify.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"purify.min.js","sources":["../src/utils.js","../src/tags.js","../src/attrs.js","../src/regexp.js","../src/purify.js"],"sourcesContent":["const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array, transformCaseFunc) {\n transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n newObject[property] = value;\n }\n\n return newObject;\n}\n\n/* This method automatically checks if the prop is function\n * or getter and behaves accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (\n document.currentScript &&\n document.currentScript.hasAttribute(ATTR_NAME)\n ) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n\n let { document } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n const trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n originalDocument\n );\n const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n typeof implementation.createHTMLDocument !== 'undefined';\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n 'ALLOWED_TAGS' in cfg\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n 'ALLOWED_ATTR' in cfg\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES =\n 'ALLOWED_NAMESPACES' in cfg\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES =\n 'ADD_URI_SAFE_ATTR' in cfg\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n 'ADD_DATA_URI_TAGS' in cfg\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS =\n 'FORBID_CONTENTS' in cfg\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS =\n 'FORBID_TAGS' in cfg\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : {};\n FORBID_ATTR =\n 'FORBID_ATTR' in cfg\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml',\n ]);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},We={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Ue={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},Ve=function(){function t(t,e){if("undefined"==typeof Yt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=i.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(e);var n=u.findShadowRoot(this.element),o=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var r=this.getTipElement(),a=u.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&i.default(r).addClass(Pe);var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,l=this._getAttachment(s);this.addAttachmentClass(l);var f=this._getContainer();i.default(r).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(r).appendTo(f),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new Yt(this.element,r,this._getPopperConfig(l)),i.default(r).addClass(Fe),i.default(r).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,i.default(t.element).trigger(t.constructor.Event.SHOWN),e===He&&t._leave(null,t)};if(i.default(this.tip).hasClass(Pe)){var c=u.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(u.TRANSITION_END,d).emulateTransitionEnd(c)}else d()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==Re&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),i.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass(Fe),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,i.default(this.tip).hasClass(Pe)){var a=u.getTransitionDurationFromElement(n);i.default(n).one(u.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(i.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),i.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=ke(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?i.default(e).parent().is(t)||t.empty().append(e):t.text(i.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:u.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e._getAttachment=function(t){return Be[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)i.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n=e===Me?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o=e===Me?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;i.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},i.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?qe:Me]=!0),i.default(e.getTipElement()).hasClass(Fe)||e._hoverState===Re?e._hoverState=Re:(clearTimeout(e._timeout),e._hoverState=Re,e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){e._hoverState===Re&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?qe:Me]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){e._hoverState===He&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=i.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Le.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),u.typeCheckConfig(Ie,t,this.constructor.DefaultType),t.sanitize&&(t.template=ke(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(je);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(i.default(t).removeClass(Pe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data(Oe),r="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,r),n.data(Oe,o)),"string"==typeof e)){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return Qe}},{key:"NAME",get:function(){return Ie}},{key:"DATA_KEY",get:function(){return Oe}},{key:"Event",get:function(){return Ue}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return We}}]),t}();i.default.fn.tooltip=Ve._jQueryInterface,i.default.fn.tooltip.Constructor=Ve,i.default.fn.tooltip.noConflict=function(){return i.default.fn.tooltip=xe,Ve._jQueryInterface};var Ye="bs.popover",ze=i.default.fn.popover,Ke=new RegExp("(^|\\s)bs-popover\\S+","g"),Xe=a({},Ve.Default,{placement:"right",trigger:"click",content:"",template:''}),Ge=a({},Ve.DefaultType,{content:"(string|element|function)"}),$e={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},Je=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,s(e,n);var a=o.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},a.setContent=function(){var t=i.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(Ke);null!==e&&e.length>0&&t.removeClass(e.join(""))},o._jQueryInterface=function(t){return this.each((function(){var e=i.default(this).data(Ye),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new o(this,n),i.default(this).data(Ye,e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},r(o,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return Xe}},{key:"NAME",get:function(){return"popover"}},{key:"DATA_KEY",get:function(){return Ye}},{key:"Event",get:function(){return $e}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Ge}}]),o}(Ve);i.default.fn.popover=Je._jQueryInterface,i.default.fn.popover.Constructor=Je,i.default.fn.popover.noConflict=function(){return i.default.fn.popover=ze,Je._jQueryInterface};var Ze="scrollspy",tn="bs.scrollspy",en=i.default.fn[Ze],nn="active",on="position",rn=".nav, .list-group",an={offset:10,method:"auto",target:""},sn={offset:"number",method:"string",target:"(string|element)"},ln=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,i.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":on,n="auto"===this._config.method?e:this._config.method,o=n===on?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=u.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[i.default(e)[n]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){i.default.removeData(this._element,tn),i.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=a({},an,"object"==typeof t&&t?t:{})).target&&u.isElement(t.target)){var e=i.default(t.target).attr("id");e||(e=u.getUID(Ze),i.default(t.target).attr("id",e)),t.target="#"+e}return u.typeCheckConfig(Ze,t,sn),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n // Check for Popper dependency\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element)\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n // eslint-disable-next-line unicorn/prefer-spread\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '
' +\n '' +\n '
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element)\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '' +\n '' +\n '' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both - and
- Comments powered by Disqus. -
-