diff --git a/Dockerfile b/Dockerfile
index de32e3be..d7657f09 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -18,10 +18,9 @@ WORKDIR /app
ADD . .
RUN apk update \
- && apk add build-base zlib-dev tzdata nodejs openssl-dev shared-mime-info libc6-compat \
+ && apk add build-base zlib-dev tzdata openssl-dev shared-mime-info libc6-compat \
&& rm -rf /var/cache/apk/* \
&& gem install bundler -v $(tail -n1 Gemfile.lock | xargs) \
- && bundle config set build.sassc "--disable-march-tune-native" \
&& bundle config set without "development test" \
&& bundle install \
&& bundle exec rails assets:precompile \
diff --git a/Gemfile b/Gemfile
index fe733385..d80b4cf3 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,24 +1,19 @@
source "https://rubygems.org"
# Bundle edge Rails instead: gem "rails", github: "rails/rails"
-gem "rails", "~> 7.2.2"
-# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
-gem "sprockets-rails"
+gem "rails", "~> 8.0.0"
+# The modern asset pipeline for Rails [https://github.com/rails/propshaft]
+gem "propshaft"
# Use the Puma web server [https://github.com/puma/puma]
gem "puma", ">= 5.0"
# Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
-# gem "importmap-rails"
+gem "importmap-rails"
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
-# gem "turbo-rails"
+gem "turbo-rails"
# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
# gem "stimulus-rails"
# Build JSON APIs with ease [https://github.com/rails/jbuilder]
# gem "jbuilder"
-# Use Redis adapter to run Action Cable in production
-# gem "redis", ">= 4.0.1"
-
-# Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis]
-# gem "kredis"
# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
# gem "bcrypt", "~> 3.1.7"
@@ -26,9 +21,20 @@ gem "puma", ">= 5.0"
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
# gem "tzinfo-data", platforms: %i[ windows jruby ]
+# Use the database-backed adapters for Rails.cache, Active Job, and Action Cable
+# gem "solid_cache"
+# gem "solid_queue"
+# gem "solid_cable"
+
# Reduces boot times through caching; required in config/boot.rb
gem "bootsnap", require: false
+# Deploy this application anywhere as a Docker container [https://kamal-deploy.org]
+# gem "kamal", require: false
+
+# Add HTTP asset caching/compression and X-Sendfile acceleration to Puma [https://github.com/basecamp/thruster/]
+# gem "thruster", require: false
+
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem "image_processing", "~> 1.2"
@@ -56,12 +62,6 @@ end
# custom
-gem "sassc-rails"
-gem "jquery-rails"
-gem "popper_js"
-gem "turbolinks", "~> 5.2.0"
-gem "ostruct"
-
gem "faraday", "~> 2.9"
gem "faraday-follow_redirects", "~> 0.3.0"
diff --git a/Gemfile.lock b/Gemfile.lock
index 910ff854..f1f56aae 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,66 +1,65 @@
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.2.2)
- actionpack (= 7.2.2)
- activesupport (= 7.2.2)
+ actioncable (8.0.0)
+ actionpack (= 8.0.0)
+ activesupport (= 8.0.0)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.2.2)
- actionpack (= 7.2.2)
- activejob (= 7.2.2)
- activerecord (= 7.2.2)
- activestorage (= 7.2.2)
- activesupport (= 7.2.2)
+ actionmailbox (8.0.0)
+ actionpack (= 8.0.0)
+ activejob (= 8.0.0)
+ activerecord (= 8.0.0)
+ activestorage (= 8.0.0)
+ activesupport (= 8.0.0)
mail (>= 2.8.0)
- actionmailer (7.2.2)
- actionpack (= 7.2.2)
- actionview (= 7.2.2)
- activejob (= 7.2.2)
- activesupport (= 7.2.2)
+ actionmailer (8.0.0)
+ actionpack (= 8.0.0)
+ actionview (= 8.0.0)
+ activejob (= 8.0.0)
+ activesupport (= 8.0.0)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (7.2.2)
- actionview (= 7.2.2)
- activesupport (= 7.2.2)
+ actionpack (8.0.0)
+ actionview (= 8.0.0)
+ activesupport (= 8.0.0)
nokogiri (>= 1.8.5)
- racc
- rack (>= 2.2.4, < 3.2)
+ rack (>= 2.2.4)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
- actiontext (7.2.2)
- actionpack (= 7.2.2)
- activerecord (= 7.2.2)
- activestorage (= 7.2.2)
- activesupport (= 7.2.2)
+ actiontext (8.0.0)
+ actionpack (= 8.0.0)
+ activerecord (= 8.0.0)
+ activestorage (= 8.0.0)
+ activesupport (= 8.0.0)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.2.2)
- activesupport (= 7.2.2)
+ actionview (8.0.0)
+ activesupport (= 8.0.0)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- activejob (7.2.2)
- activesupport (= 7.2.2)
+ activejob (8.0.0)
+ activesupport (= 8.0.0)
globalid (>= 0.3.6)
- activemodel (7.2.2)
- activesupport (= 7.2.2)
- activerecord (7.2.2)
- activemodel (= 7.2.2)
- activesupport (= 7.2.2)
+ activemodel (8.0.0)
+ activesupport (= 8.0.0)
+ activerecord (8.0.0)
+ activemodel (= 8.0.0)
+ activesupport (= 8.0.0)
timeout (>= 0.4.0)
- activestorage (7.2.2)
- actionpack (= 7.2.2)
- activejob (= 7.2.2)
- activerecord (= 7.2.2)
- activesupport (= 7.2.2)
+ activestorage (8.0.0)
+ actionpack (= 8.0.0)
+ activejob (= 8.0.0)
+ activerecord (= 8.0.0)
+ activesupport (= 8.0.0)
marcel (~> 1.0)
- activesupport (7.2.2)
+ activesupport (8.0.0)
base64
benchmark (>= 0.3)
bigdecimal
@@ -72,6 +71,7 @@ GEM
minitest (>= 5.1)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
+ uri (>= 0.13.1)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
ast (2.4.2)
@@ -96,7 +96,7 @@ GEM
bigdecimal
rexml
crass (1.0.6)
- date (3.3.4)
+ date (3.4.0)
debug (1.9.2)
irb (~> 1.10)
reline (>= 0.3.8)
@@ -111,20 +111,19 @@ GEM
faraday (>= 1, < 3)
faraday-net_http (3.4.0)
net-http (>= 0.5.0)
- ffi (1.15.5)
globalid (1.2.1)
activesupport (>= 6.1)
hashdiff (1.1.1)
i18n (1.14.6)
concurrent-ruby (~> 1.0)
+ importmap-rails (2.0.3)
+ actionpack (>= 6.0.0)
+ activesupport (>= 6.0.0)
+ railties (>= 6.0.0)
io-console (0.7.2)
irb (1.14.1)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
- jquery-rails (4.6.0)
- rails-dom-testing (>= 1, < 3)
- railties (>= 4.2.0)
- thor (>= 0.14, < 2.0)
json (2.8.2)
language_server-protocol (3.17.0.3)
logger (1.6.1)
@@ -144,7 +143,7 @@ GEM
msgpack (1.7.2)
net-http (0.5.0)
uri
- net-imap (0.5.0)
+ net-imap (0.5.1)
date
net-protocol
net-pop (0.1.2)
@@ -157,12 +156,15 @@ GEM
nokogiri (1.16.7)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
- ostruct (0.6.1)
parallel (1.26.1)
parser (3.3.4.2)
ast (~> 2.4.1)
racc
- popper_js (2.11.8)
+ propshaft (1.1.0)
+ actionpack (>= 7.0.0)
+ activesupport (>= 7.0.0)
+ rack
+ railties (>= 7.0.0)
psych (5.2.0)
stringio
public_suffix (6.0.1)
@@ -176,20 +178,20 @@ GEM
rack (>= 1.3)
rackup (2.2.0)
rack (>= 3)
- rails (7.2.2)
- actioncable (= 7.2.2)
- actionmailbox (= 7.2.2)
- actionmailer (= 7.2.2)
- actionpack (= 7.2.2)
- actiontext (= 7.2.2)
- actionview (= 7.2.2)
- activejob (= 7.2.2)
- activemodel (= 7.2.2)
- activerecord (= 7.2.2)
- activestorage (= 7.2.2)
- activesupport (= 7.2.2)
+ rails (8.0.0)
+ actioncable (= 8.0.0)
+ actionmailbox (= 8.0.0)
+ actionmailer (= 8.0.0)
+ actionpack (= 8.0.0)
+ actiontext (= 8.0.0)
+ actionview (= 8.0.0)
+ activejob (= 8.0.0)
+ activemodel (= 8.0.0)
+ activerecord (= 8.0.0)
+ activestorage (= 8.0.0)
+ activesupport (= 8.0.0)
bundler (>= 1.15.0)
- railties (= 7.2.2)
+ railties (= 8.0.0)
rails-dom-testing (2.2.0)
activesupport (>= 5.0.0)
minitest
@@ -197,9 +199,9 @@ GEM
rails-html-sanitizer (1.6.0)
loofah (~> 2.21)
nokogiri (~> 1.14)
- railties (7.2.2)
- actionpack (= 7.2.2)
- activesupport (= 7.2.2)
+ railties (8.0.0)
+ actionpack (= 8.0.0)
+ activesupport (= 8.0.0)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -261,14 +263,6 @@ GEM
rubocop-rails
ruby-progressbar (1.13.0)
rubyzip (2.3.2)
- sassc (2.4.0)
- ffi (~> 1.9)
- sassc-rails (2.1.2)
- railties (>= 4.0.0)
- sassc (>= 2.0)
- sprockets (> 3.0)
- sprockets-rails
- tilt
securerandom (0.3.1)
selenium-webdriver (4.26.0)
base64 (~> 0.2)
@@ -276,20 +270,12 @@ GEM
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
- sprockets (4.2.1)
- concurrent-ruby (~> 1.0)
- rack (>= 2.2.4, < 4)
- sprockets-rails (3.5.2)
- actionpack (>= 6.1)
- activesupport (>= 6.1)
- sprockets (>= 3.0.0)
stringio (3.1.2)
thor (1.3.2)
- tilt (2.0.11)
- timeout (0.4.1)
- turbolinks (5.2.1)
- turbolinks-source (~> 5.2)
- turbolinks-source (5.2.0)
+ timeout (0.4.2)
+ turbo-rails (2.0.11)
+ actionpack (>= 6.0.0)
+ railties (>= 6.0.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.5.0)
@@ -319,17 +305,14 @@ DEPENDENCIES
debug
faraday (~> 2.9)
faraday-follow_redirects (~> 0.3.0)
- jquery-rails
- ostruct
- popper_js
+ importmap-rails
+ propshaft
puma (>= 5.0)
- rails (~> 7.2.2)
+ rails (~> 8.0.0)
rspec-rails (~> 7.1.0)
rubocop-rails-omakase
- sassc-rails
selenium-webdriver
- sprockets-rails
- turbolinks (~> 5.2.0)
+ turbo-rails
vcr (~> 6.3.1)
version_sorter (~> 2.3.0)
webmock
diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js
index b16e53d6..ab693a12 100644
--- a/app/assets/config/manifest.js
+++ b/app/assets/config/manifest.js
@@ -1,3 +1,5 @@
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
+//= link_tree ../../javascript .js
+//= link_tree ../../../vendor/javascript .js
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 0f9e4ae6..3bb929dc 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -1,26 +1,64 @@
-// This is a manifest file that'll be compiled into application.js, which will include all the files
-// listed below.
-//
-// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
-// vendor/assets/javascripts directory can be referenced here using a relative path.
-//
-// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
-// compiled file. JavaScript code in this file should be added after the last require_* statement.
-//
-// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
-// about supported directives.
-//
-//= require rails-ujs
-//= require turbolinks
-//= require jquery
-//= require popper
-//= require bootstrap
-//= require_tree .
-
-$(document).on("turbolinks:load", function () {
- // bootstrap tooltips
- $('[data-toggle="tooltip"]').tooltip();
-
- // bootstrap popover
- $('[data-toggle="popover"]').popover();
+// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
+
+import "@hotwired/turbo-rails"
+
+import $ from "jquery"
+import "bootstrap"
+
+$(document).on("turbo:load", function () {
+ $("#delete_confirm").on("keyup", function (e) {
+ e.preventDefault();
+
+ var field = $(this);
+ var button = $("#delete-button");
+
+ if (field.val() == field.attr("data-expected")) {
+ button.removeClass("disabled");
+ }
+ else {
+ button.addClass("disabled");
+ }
+ });
+
+ $("[data-copy-target]").on("click", function (e) {
+ e.preventDefault();
+
+ var $icon = $(this);
+ $icon.data("origin-title", $icon.data("original-title"));
+ var $target = $icon.parent().parent().find($icon.data("copy-target"));
+
+ $target.select();
+ document.execCommand("copy");
+
+ // microcopy
+ $icon.prop("title", "Copied").tooltip('_fixTitle').tooltip('show');
+ setTimeout(function () { $icon.prop("title", $icon.data("origin-title")).tooltip('_fixTitle').tooltip('hide'); $target.blur(); }, 3000);
+
+ return false;
+ });
+
+ $(".js-copy-to-clipboard").find("input").on("focus", function () {
+ $(this).parent().next().find("a[data-copy-target]").click();
+ });
+
+ $("[data-copy]").on("click", function (e) {
+ e.preventDefault();
+
+ var $icon = $(this);
+ $icon.data("origin-title", $icon.data("original-title"));
+ var $target = $("");
+ $("body").append($target);
+
+ var text = $(this).data("copy")
+ $target.val(text)
+
+ $icon.prop("title", "Copied").tooltip('_fixTitle').tooltip('show');
+ setTimeout(function () { $icon.prop("title", $icon.data("origin-title")).tooltip('_fixTitle').tooltip('hide'); }, 3000);
+
+ $target.select();
+ document.execCommand("copy");
+ $target.remove();
+
+ return false;
+ });
});
diff --git a/app/assets/javascripts/bootstrap.js b/app/assets/javascripts/bootstrap.js
deleted file mode 100644
index d8b4e87b..00000000
--- a/app/assets/javascripts/bootstrap.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v4.6.2 (https://getbootstrap.com/)
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */
-!function (t, e) { "object" == typeof exports && "undefined" != typeof module ? e(exports, require("jquery"), require("popper.js")) : "function" == typeof define && define.amd ? define(["exports", "jquery", "popper.js"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self).bootstrap = {}, t.jQuery, t.Popper) }(this, (function (t, e, n) { "use strict"; function i(t) { return t && "object" == typeof t && "default" in t ? t : { default: t } } var o = i(e), a = i(n); function s(t, e) { for (var n = 0; n < e.length; n++) { var i = e[n]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) } } function l(t, e, n) { return e && s(t.prototype, e), n && s(t, n), Object.defineProperty(t, "prototype", { writable: !1 }), t } function r() { return r = Object.assign ? Object.assign.bind() : function (t) { for (var e = 1; e < arguments.length; e++) { var n = arguments[e]; for (var i in n) Object.prototype.hasOwnProperty.call(n, i) && (t[i] = n[i]) } return t }, r.apply(this, arguments) } function u(t, e) { return u = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t }, u(t, e) } var f = "transitionend"; var d = { TRANSITION_END: "bsTransitionEnd", getUID: function (t) { do { t += ~~(1e6 * Math.random()) } while (document.getElementById(t)); return t }, getSelectorFromElement: function (t) { var e = t.getAttribute("data-target"); if (!e || "#" === e) { var n = t.getAttribute("href"); e = n && "#" !== n ? n.trim() : "" } try { return document.querySelector(e) ? e : null } catch (t) { return null } }, getTransitionDurationFromElement: function (t) { if (!t) return 0; var e = o.default(t).css("transition-duration"), n = o.default(t).css("transition-delay"), i = parseFloat(e), a = parseFloat(n); return i || a ? (e = e.split(",")[0], n = n.split(",")[0], 1e3 * (parseFloat(e) + parseFloat(n))) : 0 }, reflow: function (t) { return t.offsetHeight }, triggerTransitionEnd: function (t) { o.default(t).trigger(f) }, supportsTransitionEnd: function () { return Boolean(f) }, isElement: function (t) { return (t[0] || t).nodeType }, typeCheckConfig: function (t, e, n) { for (var i in n) if (Object.prototype.hasOwnProperty.call(n, i)) { var o = n[i], a = e[i], s = a && d.isElement(a) ? "element" : null === (l = a) || "undefined" == typeof l ? "" + l : {}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase(); if (!new RegExp(o).test(s)) throw new Error(t.toUpperCase() + ': Option "' + i + '" provided type "' + s + '" but expected type "' + o + '".') } var l }, findShadowRoot: function (t) { if (!document.documentElement.attachShadow) return null; if ("function" == typeof t.getRootNode) { var e = t.getRootNode(); return e instanceof ShadowRoot ? e : null } return t instanceof ShadowRoot ? t : t.parentNode ? d.findShadowRoot(t.parentNode) : null }, jQueryDetection: function () { if ("undefined" == typeof o.default) throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript."); var t = o.default.fn.jquery.split(" ")[0].split("."); if (t[0] < 2 && t[1] < 9 || 1 === t[0] && 9 === t[1] && t[2] < 1 || t[0] >= 4) throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0") } }; d.jQueryDetection(), o.default.fn.emulateTransitionEnd = function (t) { var e = this, n = !1; return o.default(this).one(d.TRANSITION_END, (function () { n = !0 })), setTimeout((function () { n || d.triggerTransitionEnd(e) }), t), this }, o.default.event.special[d.TRANSITION_END] = { bindType: f, delegateType: f, handle: function (t) { if (o.default(t.target).is(this)) return t.handleObj.handler.apply(this, arguments) } }; var c = "bs.alert", h = o.default.fn.alert, g = function () { function t(t) { this._element = t } var e = t.prototype; return e.close = function (t) { var e = this._element; t && (e = this._getRootElement(t)), this._triggerCloseEvent(e).isDefaultPrevented() || this._removeElement(e) }, e.dispose = function () { o.default.removeData(this._element, c), this._element = null }, e._getRootElement = function (t) { var e = d.getSelectorFromElement(t), n = !1; return e && (n = document.querySelector(e)), n || (n = o.default(t).closest(".alert")[0]), n }, e._triggerCloseEvent = function (t) { var e = o.default.Event("close.bs.alert"); return o.default(t).trigger(e), e }, e._removeElement = function (t) { var e = this; if (o.default(t).removeClass("show"), o.default(t).hasClass("fade")) { var n = d.getTransitionDurationFromElement(t); o.default(t).one(d.TRANSITION_END, (function (n) { return e._destroyElement(t, n) })).emulateTransitionEnd(n) } else this._destroyElement(t) }, e._destroyElement = function (t) { o.default(t).detach().trigger("closed.bs.alert").remove() }, t._jQueryInterface = function (e) { return this.each((function () { var n = o.default(this), i = n.data(c); i || (i = new t(this), n.data(c, i)), "close" === e && i[e](this) })) }, t._handleDismiss = function (t) { return function (e) { e && e.preventDefault(), t.close(this) } }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }]), t }(); o.default(document).on("click.bs.alert.data-api", '[data-dismiss="alert"]', g._handleDismiss(new g)), o.default.fn.alert = g._jQueryInterface, o.default.fn.alert.Constructor = g, o.default.fn.alert.noConflict = function () { return o.default.fn.alert = h, g._jQueryInterface }; var m = "bs.button", p = o.default.fn.button, _ = "active", v = '[data-toggle^="button"]', y = 'input:not([type="hidden"])', b = ".btn", E = function () { function t(t) { this._element = t, this.shouldAvoidTriggerChange = !1 } var e = t.prototype; return e.toggle = function () { var t = !0, e = !0, n = o.default(this._element).closest('[data-toggle="buttons"]')[0]; if (n) { var i = this._element.querySelector(y); if (i) { if ("radio" === i.type) if (i.checked && this._element.classList.contains(_)) t = !1; else { var a = n.querySelector(".active"); a && o.default(a).removeClass(_) } t && ("checkbox" !== i.type && "radio" !== i.type || (i.checked = !this._element.classList.contains(_)), this.shouldAvoidTriggerChange || o.default(i).trigger("change")), i.focus(), e = !1 } } this._element.hasAttribute("disabled") || this._element.classList.contains("disabled") || (e && this._element.setAttribute("aria-pressed", !this._element.classList.contains(_)), t && o.default(this._element).toggleClass(_)) }, e.dispose = function () { o.default.removeData(this._element, m), this._element = null }, t._jQueryInterface = function (e, n) { return this.each((function () { var i = o.default(this), a = i.data(m); a || (a = new t(this), i.data(m, a)), a.shouldAvoidTriggerChange = n, "toggle" === e && a[e]() })) }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }]), t }(); o.default(document).on("click.bs.button.data-api", v, (function (t) { var e = t.target, n = e; if (o.default(e).hasClass("btn") || (e = o.default(e).closest(b)[0]), !e || e.hasAttribute("disabled") || e.classList.contains("disabled")) t.preventDefault(); else { var i = e.querySelector(y); if (i && (i.hasAttribute("disabled") || i.classList.contains("disabled"))) return void t.preventDefault(); "INPUT" !== n.tagName && "LABEL" === e.tagName || E._jQueryInterface.call(o.default(e), "toggle", "INPUT" === n.tagName) } })).on("focus.bs.button.data-api blur.bs.button.data-api", v, (function (t) { var e = o.default(t.target).closest(b)[0]; o.default(e).toggleClass("focus", /^focus(in)?$/.test(t.type)) })), o.default(window).on("load.bs.button.data-api", (function () { for (var t = [].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')), e = 0, n = t.length; e < n; e++) { var i = t[e], o = i.querySelector(y); o.checked || o.hasAttribute("checked") ? i.classList.add(_) : i.classList.remove(_) } for (var a = 0, s = (t = [].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length; a < s; a++) { var l = t[a]; "true" === l.getAttribute("aria-pressed") ? l.classList.add(_) : l.classList.remove(_) } })), o.default.fn.button = E._jQueryInterface, o.default.fn.button.Constructor = E, o.default.fn.button.noConflict = function () { return o.default.fn.button = p, E._jQueryInterface }; var T = "carousel", w = "bs.carousel", C = o.default.fn[T], S = "active", N = "next", D = "prev", A = "slid.bs.carousel", I = ".active.carousel-item", k = { interval: 5e3, keyboard: !0, slide: !1, pause: "hover", wrap: !0, touch: !0 }, O = { interval: "(number|boolean)", keyboard: "boolean", slide: "(boolean|string)", pause: "(string|boolean)", wrap: "boolean", touch: "boolean" }, j = { TOUCH: "touch", PEN: "pen" }, P = function () { function t(t, e) { this._items = null, this._interval = null, this._activeElement = null, this._isPaused = !1, this._isSliding = !1, this.touchTimeout = null, this.touchStartX = 0, this.touchDeltaX = 0, this._config = this._getConfig(e), this._element = t, this._indicatorsElement = this._element.querySelector(".carousel-indicators"), this._touchSupported = "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0, this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent), this._addEventListeners() } var e = t.prototype; return e.next = function () { this._isSliding || this._slide(N) }, e.nextWhenVisible = function () { var t = o.default(this._element); !document.hidden && t.is(":visible") && "hidden" !== t.css("visibility") && this.next() }, e.prev = function () { this._isSliding || this._slide(D) }, e.pause = function (t) { t || (this._isPaused = !0), this._element.querySelector(".carousel-item-next, .carousel-item-prev") && (d.triggerTransitionEnd(this._element), this.cycle(!0)), clearInterval(this._interval), this._interval = null }, e.cycle = function (t) { t || (this._isPaused = !1), this._interval && (clearInterval(this._interval), this._interval = null), this._config.interval && !this._isPaused && (this._updateInterval(), this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval)) }, e.to = function (t) { var e = this; this._activeElement = this._element.querySelector(I); var n = this._getItemIndex(this._activeElement); if (!(t > this._items.length - 1 || t < 0)) if (this._isSliding) o.default(this._element).one(A, (function () { return e.to(t) })); else { if (n === t) return this.pause(), void this.cycle(); var i = t > n ? N : D; this._slide(i, this._items[t]) } }, e.dispose = function () { o.default(this._element).off(".bs.carousel"), o.default.removeData(this._element, w), this._items = null, this._config = null, this._element = null, this._interval = null, this._isPaused = null, this._isSliding = null, this._activeElement = null, this._indicatorsElement = null }, e._getConfig = function (t) { return t = r({}, k, t), d.typeCheckConfig(T, t, O), t }, e._handleSwipe = function () { var t = Math.abs(this.touchDeltaX); if (!(t <= 40)) { var e = t / this.touchDeltaX; this.touchDeltaX = 0, e > 0 && this.prev(), e < 0 && this.next() } }, e._addEventListeners = function () { var t = this; this._config.keyboard && o.default(this._element).on("keydown.bs.carousel", (function (e) { return t._keydown(e) })), "hover" === this._config.pause && o.default(this._element).on("mouseenter.bs.carousel", (function (e) { return t.pause(e) })).on("mouseleave.bs.carousel", (function (e) { return t.cycle(e) })), this._config.touch && this._addTouchEventListeners() }, e._addTouchEventListeners = function () { var t = this; if (this._touchSupported) { var e = function (e) { t._pointerEvent && j[e.originalEvent.pointerType.toUpperCase()] ? t.touchStartX = e.originalEvent.clientX : t._pointerEvent || (t.touchStartX = e.originalEvent.touches[0].clientX) }, n = function (e) { t._pointerEvent && j[e.originalEvent.pointerType.toUpperCase()] && (t.touchDeltaX = e.originalEvent.clientX - t.touchStartX), t._handleSwipe(), "hover" === t._config.pause && (t.pause(), t.touchTimeout && clearTimeout(t.touchTimeout), t.touchTimeout = setTimeout((function (e) { return t.cycle(e) }), 500 + t._config.interval)) }; o.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel", (function (t) { return t.preventDefault() })), this._pointerEvent ? (o.default(this._element).on("pointerdown.bs.carousel", (function (t) { return e(t) })), o.default(this._element).on("pointerup.bs.carousel", (function (t) { return n(t) })), this._element.classList.add("pointer-event")) : (o.default(this._element).on("touchstart.bs.carousel", (function (t) { return e(t) })), o.default(this._element).on("touchmove.bs.carousel", (function (e) { return function (e) { t.touchDeltaX = e.originalEvent.touches && e.originalEvent.touches.length > 1 ? 0 : e.originalEvent.touches[0].clientX - t.touchStartX }(e) })), o.default(this._element).on("touchend.bs.carousel", (function (t) { return n(t) }))) } }, e._keydown = function (t) { if (!/input|textarea/i.test(t.target.tagName)) switch (t.which) { case 37: t.preventDefault(), this.prev(); break; case 39: t.preventDefault(), this.next() } }, e._getItemIndex = function (t) { return this._items = t && t.parentNode ? [].slice.call(t.parentNode.querySelectorAll(".carousel-item")) : [], this._items.indexOf(t) }, e._getItemByDirection = function (t, e) { var n = t === N, i = t === D, o = this._getItemIndex(e), a = this._items.length - 1; if ((i && 0 === o || n && o === a) && !this._config.wrap) return e; var s = (o + (t === D ? -1 : 1)) % this._items.length; return -1 === s ? this._items[this._items.length - 1] : this._items[s] }, e._triggerSlideEvent = function (t, e) { var n = this._getItemIndex(t), i = this._getItemIndex(this._element.querySelector(I)), a = o.default.Event("slide.bs.carousel", { relatedTarget: t, direction: e, from: i, to: n }); return o.default(this._element).trigger(a), a }, e._setActiveIndicatorElement = function (t) { if (this._indicatorsElement) { var e = [].slice.call(this._indicatorsElement.querySelectorAll(".active")); o.default(e).removeClass(S); var n = this._indicatorsElement.children[this._getItemIndex(t)]; n && o.default(n).addClass(S) } }, e._updateInterval = function () { var t = this._activeElement || this._element.querySelector(I); if (t) { var e = parseInt(t.getAttribute("data-interval"), 10); e ? (this._config.defaultInterval = this._config.defaultInterval || this._config.interval, this._config.interval = e) : this._config.interval = this._config.defaultInterval || this._config.interval } }, e._slide = function (t, e) { var n, i, a, s = this, l = this._element.querySelector(I), r = this._getItemIndex(l), u = e || l && this._getItemByDirection(t, l), f = this._getItemIndex(u), c = Boolean(this._interval); if (t === N ? (n = "carousel-item-left", i = "carousel-item-next", a = "left") : (n = "carousel-item-right", i = "carousel-item-prev", a = "right"), u && o.default(u).hasClass(S)) this._isSliding = !1; else if (!this._triggerSlideEvent(u, a).isDefaultPrevented() && l && u) { this._isSliding = !0, c && this.pause(), this._setActiveIndicatorElement(u), this._activeElement = u; var h = o.default.Event(A, { relatedTarget: u, direction: a, from: r, to: f }); if (o.default(this._element).hasClass("slide")) { o.default(u).addClass(i), d.reflow(u), o.default(l).addClass(n), o.default(u).addClass(n); var g = d.getTransitionDurationFromElement(l); o.default(l).one(d.TRANSITION_END, (function () { o.default(u).removeClass(n + " " + i).addClass(S), o.default(l).removeClass("active " + i + " " + n), s._isSliding = !1, setTimeout((function () { return o.default(s._element).trigger(h) }), 0) })).emulateTransitionEnd(g) } else o.default(l).removeClass(S), o.default(u).addClass(S), this._isSliding = !1, o.default(this._element).trigger(h); c && this.cycle() } }, t._jQueryInterface = function (e) { return this.each((function () { var n = o.default(this).data(w), i = r({}, k, o.default(this).data()); "object" == typeof e && (i = r({}, i, e)); var a = "string" == typeof e ? e : i.slide; if (n || (n = new t(this, i), o.default(this).data(w, n)), "number" == typeof e) n.to(e); else if ("string" == typeof a) { if ("undefined" == typeof n[a]) throw new TypeError('No method named "' + a + '"'); n[a]() } else i.interval && i.ride && (n.pause(), n.cycle()) })) }, t._dataApiClickHandler = function (e) { var n = d.getSelectorFromElement(this); if (n) { var i = o.default(n)[0]; if (i && o.default(i).hasClass("carousel")) { var a = r({}, o.default(i).data(), o.default(this).data()), s = this.getAttribute("data-slide-to"); s && (a.interval = !1), t._jQueryInterface.call(o.default(i), a), s && o.default(i).data(w).to(s), e.preventDefault() } } }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "Default", get: function () { return k } }]), t }(); o.default(document).on("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", P._dataApiClickHandler), o.default(window).on("load.bs.carousel.data-api", (function () { for (var t = [].slice.call(document.querySelectorAll('[data-ride="carousel"]')), e = 0, n = t.length; e < n; e++) { var i = o.default(t[e]); P._jQueryInterface.call(i, i.data()) } })), o.default.fn[T] = P._jQueryInterface, o.default.fn[T].Constructor = P, o.default.fn[T].noConflict = function () { return o.default.fn[T] = C, P._jQueryInterface }; var L = "collapse", R = "bs.collapse", x = o.default.fn[L], q = "show", F = "collapse", Q = "collapsing", B = "collapsed", H = "width", U = '[data-toggle="collapse"]', M = { toggle: !0, parent: "" }, W = { toggle: "boolean", parent: "(string|element)" }, V = function () { function t(t, e) { this._isTransitioning = !1, this._element = t, this._config = this._getConfig(e), this._triggerArray = [].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#' + t.id + '"],[data-toggle="collapse"][data-target="#' + t.id + '"]')); for (var n = [].slice.call(document.querySelectorAll(U)), i = 0, o = n.length; i < o; i++) { var a = n[i], s = d.getSelectorFromElement(a), l = [].slice.call(document.querySelectorAll(s)).filter((function (e) { return e === t })); null !== s && l.length > 0 && (this._selector = s, this._triggerArray.push(a)) } this._parent = this._config.parent ? this._getParent() : null, this._config.parent || this._addAriaAndCollapsedClass(this._element, this._triggerArray), this._config.toggle && this.toggle() } var e = t.prototype; return e.toggle = function () { o.default(this._element).hasClass(q) ? this.hide() : this.show() }, e.show = function () { var e, n, i = this; if (!(this._isTransitioning || o.default(this._element).hasClass(q) || (this._parent && 0 === (e = [].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function (t) { return "string" == typeof i._config.parent ? t.getAttribute("data-parent") === i._config.parent : t.classList.contains(F) }))).length && (e = null), e && (n = o.default(e).not(this._selector).data(R)) && n._isTransitioning))) { var a = o.default.Event("show.bs.collapse"); if (o.default(this._element).trigger(a), !a.isDefaultPrevented()) { e && (t._jQueryInterface.call(o.default(e).not(this._selector), "hide"), n || o.default(e).data(R, null)); var s = this._getDimension(); o.default(this._element).removeClass(F).addClass(Q), this._element.style[s] = 0, this._triggerArray.length && o.default(this._triggerArray).removeClass(B).attr("aria-expanded", !0), this.setTransitioning(!0); var l = "scroll" + (s[0].toUpperCase() + s.slice(1)), r = d.getTransitionDurationFromElement(this._element); o.default(this._element).one(d.TRANSITION_END, (function () { o.default(i._element).removeClass(Q).addClass("collapse show"), i._element.style[s] = "", i.setTransitioning(!1), o.default(i._element).trigger("shown.bs.collapse") })).emulateTransitionEnd(r), this._element.style[s] = this._element[l] + "px" } } }, e.hide = function () { var t = this; if (!this._isTransitioning && o.default(this._element).hasClass(q)) { var e = o.default.Event("hide.bs.collapse"); if (o.default(this._element).trigger(e), !e.isDefaultPrevented()) { var n = this._getDimension(); this._element.style[n] = this._element.getBoundingClientRect()[n] + "px", d.reflow(this._element), o.default(this._element).addClass(Q).removeClass("collapse show"); var i = this._triggerArray.length; if (i > 0) for (var a = 0; a < i; a++) { var s = this._triggerArray[a], l = d.getSelectorFromElement(s); null !== l && (o.default([].slice.call(document.querySelectorAll(l))).hasClass(q) || o.default(s).addClass(B).attr("aria-expanded", !1)) } this.setTransitioning(!0), this._element.style[n] = ""; var r = d.getTransitionDurationFromElement(this._element); o.default(this._element).one(d.TRANSITION_END, (function () { t.setTransitioning(!1), o.default(t._element).removeClass(Q).addClass(F).trigger("hidden.bs.collapse") })).emulateTransitionEnd(r) } } }, e.setTransitioning = function (t) { this._isTransitioning = t }, e.dispose = function () { o.default.removeData(this._element, R), this._config = null, this._parent = null, this._element = null, this._triggerArray = null, this._isTransitioning = null }, e._getConfig = function (t) { return (t = r({}, M, t)).toggle = Boolean(t.toggle), d.typeCheckConfig(L, t, W), t }, e._getDimension = function () { return o.default(this._element).hasClass(H) ? H : "height" }, e._getParent = function () { var e, n = this; d.isElement(this._config.parent) ? (e = this._config.parent, "undefined" != typeof this._config.parent.jquery && (e = this._config.parent[0])) : e = document.querySelector(this._config.parent); var i = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]', a = [].slice.call(e.querySelectorAll(i)); return o.default(a).each((function (e, i) { n._addAriaAndCollapsedClass(t._getTargetFromElement(i), [i]) })), e }, e._addAriaAndCollapsedClass = function (t, e) { var n = o.default(t).hasClass(q); e.length && o.default(e).toggleClass(B, !n).attr("aria-expanded", n) }, t._getTargetFromElement = function (t) { var e = d.getSelectorFromElement(t); return e ? document.querySelector(e) : null }, t._jQueryInterface = function (e) { return this.each((function () { var n = o.default(this), i = n.data(R), a = r({}, M, n.data(), "object" == typeof e && e ? e : {}); if (!i && a.toggle && "string" == typeof e && /show|hide/.test(e) && (a.toggle = !1), i || (i = new t(this, a), n.data(R, i)), "string" == typeof e) { if ("undefined" == typeof i[e]) throw new TypeError('No method named "' + e + '"'); i[e]() } })) }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "Default", get: function () { return M } }]), t }(); o.default(document).on("click.bs.collapse.data-api", U, (function (t) { "A" === t.currentTarget.tagName && t.preventDefault(); var e = o.default(this), n = d.getSelectorFromElement(this), i = [].slice.call(document.querySelectorAll(n)); o.default(i).each((function () { var t = o.default(this), n = t.data(R) ? "toggle" : e.data(); V._jQueryInterface.call(t, n) })) })), o.default.fn[L] = V._jQueryInterface, o.default.fn[L].Constructor = V, o.default.fn[L].noConflict = function () { return o.default.fn[L] = x, V._jQueryInterface }; var z = "dropdown", K = "bs.dropdown", X = o.default.fn[z], Y = new RegExp("38|40|27"), $ = "disabled", J = "show", G = "dropdown-menu-right", Z = "hide.bs.dropdown", tt = "hidden.bs.dropdown", et = "click.bs.dropdown.data-api", nt = "keydown.bs.dropdown.data-api", it = '[data-toggle="dropdown"]', ot = ".dropdown-menu", at = { offset: 0, flip: !0, boundary: "scrollParent", reference: "toggle", display: "dynamic", popperConfig: null }, st = { offset: "(number|string|function)", flip: "boolean", boundary: "(string|element)", reference: "(string|element)", display: "string", popperConfig: "(null|object)" }, lt = function () { function t(t, e) { this._element = t, this._popper = null, this._config = this._getConfig(e), this._menu = this._getMenuElement(), this._inNavbar = this._detectNavbar(), this._addEventListeners() } var e = t.prototype; return e.toggle = function () { if (!this._element.disabled && !o.default(this._element).hasClass($)) { var e = o.default(this._menu).hasClass(J); t._clearMenus(), e || this.show(!0) } }, e.show = function (e) { if (void 0 === e && (e = !1), !(this._element.disabled || o.default(this._element).hasClass($) || o.default(this._menu).hasClass(J))) { var n = { relatedTarget: this._element }, i = o.default.Event("show.bs.dropdown", n), s = t._getParentFromElement(this._element); if (o.default(s).trigger(i), !i.isDefaultPrevented()) { if (!this._inNavbar && e) { if ("undefined" == typeof a.default) throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)"); var l = this._element; "parent" === this._config.reference ? l = s : d.isElement(this._config.reference) && (l = this._config.reference, "undefined" != typeof this._config.reference.jquery && (l = this._config.reference[0])), "scrollParent" !== this._config.boundary && o.default(s).addClass("position-static"), this._popper = new a.default(l, this._menu, this._getPopperConfig()) } "ontouchstart" in document.documentElement && 0 === o.default(s).closest(".navbar-nav").length && o.default(document.body).children().on("mouseover", null, o.default.noop), this._element.focus(), this._element.setAttribute("aria-expanded", !0), o.default(this._menu).toggleClass(J), o.default(s).toggleClass(J).trigger(o.default.Event("shown.bs.dropdown", n)) } } }, e.hide = function () { if (!this._element.disabled && !o.default(this._element).hasClass($) && o.default(this._menu).hasClass(J)) { var e = { relatedTarget: this._element }, n = o.default.Event(Z, e), i = t._getParentFromElement(this._element); o.default(i).trigger(n), n.isDefaultPrevented() || (this._popper && this._popper.destroy(), o.default(this._menu).toggleClass(J), o.default(i).toggleClass(J).trigger(o.default.Event(tt, e))) } }, e.dispose = function () { o.default.removeData(this._element, K), o.default(this._element).off(".bs.dropdown"), this._element = null, this._menu = null, null !== this._popper && (this._popper.destroy(), this._popper = null) }, e.update = function () { this._inNavbar = this._detectNavbar(), null !== this._popper && this._popper.scheduleUpdate() }, e._addEventListeners = function () { var t = this; o.default(this._element).on("click.bs.dropdown", (function (e) { e.preventDefault(), e.stopPropagation(), t.toggle() })) }, e._getConfig = function (t) { return t = r({}, this.constructor.Default, o.default(this._element).data(), t), d.typeCheckConfig(z, t, this.constructor.DefaultType), t }, e._getMenuElement = function () { if (!this._menu) { var e = t._getParentFromElement(this._element); e && (this._menu = e.querySelector(ot)) } return this._menu }, e._getPlacement = function () { var t = o.default(this._element.parentNode), e = "bottom-start"; return t.hasClass("dropup") ? e = o.default(this._menu).hasClass(G) ? "top-end" : "top-start" : t.hasClass("dropright") ? e = "right-start" : t.hasClass("dropleft") ? e = "left-start" : o.default(this._menu).hasClass(G) && (e = "bottom-end"), e }, e._detectNavbar = function () { return o.default(this._element).closest(".navbar").length > 0 }, e._getOffset = function () { var t = this, e = {}; return "function" == typeof this._config.offset ? e.fn = function (e) { return e.offsets = r({}, e.offsets, t._config.offset(e.offsets, t._element)), e } : e.offset = this._config.offset, e }, e._getPopperConfig = function () { var t = { placement: this._getPlacement(), modifiers: { offset: this._getOffset(), flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } }; return "static" === this._config.display && (t.modifiers.applyStyle = { enabled: !1 }), r({}, t, this._config.popperConfig) }, t._jQueryInterface = function (e) { return this.each((function () { var n = o.default(this).data(K); if (n || (n = new t(this, "object" == typeof e ? e : null), o.default(this).data(K, n)), "string" == typeof e) { if ("undefined" == typeof n[e]) throw new TypeError('No method named "' + e + '"'); n[e]() } })) }, t._clearMenus = function (e) { if (!e || 3 !== e.which && ("keyup" !== e.type || 9 === e.which)) for (var n = [].slice.call(document.querySelectorAll(it)), i = 0, a = n.length; i < a; i++) { var s = t._getParentFromElement(n[i]), l = o.default(n[i]).data(K), r = { relatedTarget: n[i] }; if (e && "click" === e.type && (r.clickEvent = e), l) { var u = l._menu; if (o.default(s).hasClass(J) && !(e && ("click" === e.type && /input|textarea/i.test(e.target.tagName) || "keyup" === e.type && 9 === e.which) && o.default.contains(s, e.target))) { var f = o.default.Event(Z, r); o.default(s).trigger(f), f.isDefaultPrevented() || ("ontouchstart" in document.documentElement && o.default(document.body).children().off("mouseover", null, o.default.noop), n[i].setAttribute("aria-expanded", "false"), l._popper && l._popper.destroy(), o.default(u).removeClass(J), o.default(s).removeClass(J).trigger(o.default.Event(tt, r))) } } } }, t._getParentFromElement = function (t) { var e, n = d.getSelectorFromElement(t); return n && (e = document.querySelector(n)), e || t.parentNode }, t._dataApiKeydownHandler = function (e) { if (!(/input|textarea/i.test(e.target.tagName) ? 32 === e.which || 27 !== e.which && (40 !== e.which && 38 !== e.which || o.default(e.target).closest(ot).length) : !Y.test(e.which)) && !this.disabled && !o.default(this).hasClass($)) { var n = t._getParentFromElement(this), i = o.default(n).hasClass(J); if (i || 27 !== e.which) { if (e.preventDefault(), e.stopPropagation(), !i || 27 === e.which || 32 === e.which) return 27 === e.which && o.default(n.querySelector(it)).trigger("focus"), void o.default(this).trigger("click"); var a = [].slice.call(n.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function (t) { return o.default(t).is(":visible") })); if (0 !== a.length) { var s = a.indexOf(e.target); 38 === e.which && s > 0 && s--, 40 === e.which && s < a.length - 1 && s++, s < 0 && (s = 0), a[s].focus() } } } }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "Default", get: function () { return at } }, { key: "DefaultType", get: function () { return st } }]), t }(); o.default(document).on(nt, it, lt._dataApiKeydownHandler).on(nt, ot, lt._dataApiKeydownHandler).on(et + " keyup.bs.dropdown.data-api", lt._clearMenus).on(et, it, (function (t) { t.preventDefault(), t.stopPropagation(), lt._jQueryInterface.call(o.default(this), "toggle") })).on(et, ".dropdown form", (function (t) { t.stopPropagation() })), o.default.fn[z] = lt._jQueryInterface, o.default.fn[z].Constructor = lt, o.default.fn[z].noConflict = function () { return o.default.fn[z] = X, lt._jQueryInterface }; var rt = "bs.modal", ut = o.default.fn.modal, ft = "modal-open", dt = "fade", ct = "show", ht = "modal-static", gt = "hidden.bs.modal", mt = "show.bs.modal", pt = "focusin.bs.modal", _t = "resize.bs.modal", vt = "click.dismiss.bs.modal", yt = "keydown.dismiss.bs.modal", bt = "mousedown.dismiss.bs.modal", Et = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", Tt = { backdrop: !0, keyboard: !0, focus: !0, show: !0 }, wt = { backdrop: "(boolean|string)", keyboard: "boolean", focus: "boolean", show: "boolean" }, Ct = function () { function t(t, e) { this._config = this._getConfig(e), this._element = t, this._dialog = t.querySelector(".modal-dialog"), this._backdrop = null, this._isShown = !1, this._isBodyOverflowing = !1, this._ignoreBackdropClick = !1, this._isTransitioning = !1, this._scrollbarWidth = 0 } var e = t.prototype; return e.toggle = function (t) { return this._isShown ? this.hide() : this.show(t) }, e.show = function (t) { var e = this; if (!this._isShown && !this._isTransitioning) { var n = o.default.Event(mt, { relatedTarget: t }); o.default(this._element).trigger(n), n.isDefaultPrevented() || (this._isShown = !0, o.default(this._element).hasClass(dt) && (this._isTransitioning = !0), this._checkScrollbar(), this._setScrollbar(), this._adjustDialog(), this._setEscapeEvent(), this._setResizeEvent(), o.default(this._element).on(vt, '[data-dismiss="modal"]', (function (t) { return e.hide(t) })), o.default(this._dialog).on(bt, (function () { o.default(e._element).one("mouseup.dismiss.bs.modal", (function (t) { o.default(t.target).is(e._element) && (e._ignoreBackdropClick = !0) })) })), this._showBackdrop((function () { return e._showElement(t) }))) } }, e.hide = function (t) { var e = this; if (t && t.preventDefault(), this._isShown && !this._isTransitioning) { var n = o.default.Event("hide.bs.modal"); if (o.default(this._element).trigger(n), this._isShown && !n.isDefaultPrevented()) { this._isShown = !1; var i = o.default(this._element).hasClass(dt); if (i && (this._isTransitioning = !0), this._setEscapeEvent(), this._setResizeEvent(), o.default(document).off(pt), o.default(this._element).removeClass(ct), o.default(this._element).off(vt), o.default(this._dialog).off(bt), i) { var a = d.getTransitionDurationFromElement(this._element); o.default(this._element).one(d.TRANSITION_END, (function (t) { return e._hideModal(t) })).emulateTransitionEnd(a) } else this._hideModal() } } }, e.dispose = function () { [window, this._element, this._dialog].forEach((function (t) { return o.default(t).off(".bs.modal") })), o.default(document).off(pt), o.default.removeData(this._element, rt), this._config = null, this._element = null, this._dialog = null, this._backdrop = null, this._isShown = null, this._isBodyOverflowing = null, this._ignoreBackdropClick = null, this._isTransitioning = null, this._scrollbarWidth = null }, e.handleUpdate = function () { this._adjustDialog() }, e._getConfig = function (t) { return t = r({}, Tt, t), d.typeCheckConfig("modal", t, wt), t }, e._triggerBackdropTransition = function () { var t = this, e = o.default.Event("hidePrevented.bs.modal"); if (o.default(this._element).trigger(e), !e.isDefaultPrevented()) { var n = this._element.scrollHeight > document.documentElement.clientHeight; n || (this._element.style.overflowY = "hidden"), this._element.classList.add(ht); var i = d.getTransitionDurationFromElement(this._dialog); o.default(this._element).off(d.TRANSITION_END), o.default(this._element).one(d.TRANSITION_END, (function () { t._element.classList.remove(ht), n || o.default(t._element).one(d.TRANSITION_END, (function () { t._element.style.overflowY = "" })).emulateTransitionEnd(t._element, i) })).emulateTransitionEnd(i), this._element.focus() } }, e._showElement = function (t) { var e = this, n = o.default(this._element).hasClass(dt), i = this._dialog ? this._dialog.querySelector(".modal-body") : null; this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE || document.body.appendChild(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), o.default(this._dialog).hasClass("modal-dialog-scrollable") && i ? i.scrollTop = 0 : this._element.scrollTop = 0, n && d.reflow(this._element), o.default(this._element).addClass(ct), this._config.focus && this._enforceFocus(); var a = o.default.Event("shown.bs.modal", { relatedTarget: t }), s = function () { e._config.focus && e._element.focus(), e._isTransitioning = !1, o.default(e._element).trigger(a) }; if (n) { var l = d.getTransitionDurationFromElement(this._dialog); o.default(this._dialog).one(d.TRANSITION_END, s).emulateTransitionEnd(l) } else s() }, e._enforceFocus = function () { var t = this; o.default(document).off(pt).on(pt, (function (e) { document !== e.target && t._element !== e.target && 0 === o.default(t._element).has(e.target).length && t._element.focus() })) }, e._setEscapeEvent = function () { var t = this; this._isShown ? o.default(this._element).on(yt, (function (e) { t._config.keyboard && 27 === e.which ? (e.preventDefault(), t.hide()) : t._config.keyboard || 27 !== e.which || t._triggerBackdropTransition() })) : this._isShown || o.default(this._element).off(yt) }, e._setResizeEvent = function () { var t = this; this._isShown ? o.default(window).on(_t, (function (e) { return t.handleUpdate(e) })) : o.default(window).off(_t) }, e._hideModal = function () { var t = this; this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._isTransitioning = !1, this._showBackdrop((function () { o.default(document.body).removeClass(ft), t._resetAdjustments(), t._resetScrollbar(), o.default(t._element).trigger(gt) })) }, e._removeBackdrop = function () { this._backdrop && (o.default(this._backdrop).remove(), this._backdrop = null) }, e._showBackdrop = function (t) { var e = this, n = o.default(this._element).hasClass(dt) ? dt : ""; if (this._isShown && this._config.backdrop) { if (this._backdrop = document.createElement("div"), this._backdrop.className = "modal-backdrop", n && this._backdrop.classList.add(n), o.default(this._backdrop).appendTo(document.body), o.default(this._element).on(vt, (function (t) { e._ignoreBackdropClick ? e._ignoreBackdropClick = !1 : t.target === t.currentTarget && ("static" === e._config.backdrop ? e._triggerBackdropTransition() : e.hide()) })), n && d.reflow(this._backdrop), o.default(this._backdrop).addClass(ct), !t) return; if (!n) return void t(); var i = d.getTransitionDurationFromElement(this._backdrop); o.default(this._backdrop).one(d.TRANSITION_END, t).emulateTransitionEnd(i) } else if (!this._isShown && this._backdrop) { o.default(this._backdrop).removeClass(ct); var a = function () { e._removeBackdrop(), t && t() }; if (o.default(this._element).hasClass(dt)) { var s = d.getTransitionDurationFromElement(this._backdrop); o.default(this._backdrop).one(d.TRANSITION_END, a).emulateTransitionEnd(s) } else a() } else t && t() }, e._adjustDialog = function () { var t = this._element.scrollHeight > document.documentElement.clientHeight; !this._isBodyOverflowing && t && (this._element.style.paddingLeft = this._scrollbarWidth + "px"), this._isBodyOverflowing && !t && (this._element.style.paddingRight = this._scrollbarWidth + "px") }, e._resetAdjustments = function () { this._element.style.paddingLeft = "", this._element.style.paddingRight = "" }, e._checkScrollbar = function () { var t = document.body.getBoundingClientRect(); this._isBodyOverflowing = Math.round(t.left + t.right) < window.innerWidth, this._scrollbarWidth = this._getScrollbarWidth() }, e._setScrollbar = function () { var t = this; if (this._isBodyOverflowing) { var e = [].slice.call(document.querySelectorAll(Et)), n = [].slice.call(document.querySelectorAll(".sticky-top")); o.default(e).each((function (e, n) { var i = n.style.paddingRight, a = o.default(n).css("padding-right"); o.default(n).data("padding-right", i).css("padding-right", parseFloat(a) + t._scrollbarWidth + "px") })), o.default(n).each((function (e, n) { var i = n.style.marginRight, a = o.default(n).css("margin-right"); o.default(n).data("margin-right", i).css("margin-right", parseFloat(a) - t._scrollbarWidth + "px") })); var i = document.body.style.paddingRight, a = o.default(document.body).css("padding-right"); o.default(document.body).data("padding-right", i).css("padding-right", parseFloat(a) + this._scrollbarWidth + "px") } o.default(document.body).addClass(ft) }, e._resetScrollbar = function () { var t = [].slice.call(document.querySelectorAll(Et)); o.default(t).each((function (t, e) { var n = o.default(e).data("padding-right"); o.default(e).removeData("padding-right"), e.style.paddingRight = n || "" })); var e = [].slice.call(document.querySelectorAll(".sticky-top")); o.default(e).each((function (t, e) { var n = o.default(e).data("margin-right"); "undefined" != typeof n && o.default(e).css("margin-right", n).removeData("margin-right") })); var n = o.default(document.body).data("padding-right"); o.default(document.body).removeData("padding-right"), document.body.style.paddingRight = n || "" }, e._getScrollbarWidth = function () { var t = document.createElement("div"); t.className = "modal-scrollbar-measure", document.body.appendChild(t); var e = t.getBoundingClientRect().width - t.clientWidth; return document.body.removeChild(t), e }, t._jQueryInterface = function (e, n) { return this.each((function () { var i = o.default(this).data(rt), a = r({}, Tt, o.default(this).data(), "object" == typeof e && e ? e : {}); if (i || (i = new t(this, a), o.default(this).data(rt, i)), "string" == typeof e) { if ("undefined" == typeof i[e]) throw new TypeError('No method named "' + e + '"'); i[e](n) } else a.show && i.show(n) })) }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "Default", get: function () { return Tt } }]), t }(); o.default(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', (function (t) { var e, n = this, i = d.getSelectorFromElement(this); i && (e = document.querySelector(i)); var a = o.default(e).data(rt) ? "toggle" : r({}, o.default(e).data(), o.default(this).data()); "A" !== this.tagName && "AREA" !== this.tagName || t.preventDefault(); var s = o.default(e).one(mt, (function (t) { t.isDefaultPrevented() || s.one(gt, (function () { o.default(n).is(":visible") && n.focus() })) })); Ct._jQueryInterface.call(o.default(e), a, this) })), o.default.fn.modal = Ct._jQueryInterface, o.default.fn.modal.Constructor = Ct, o.default.fn.modal.noConflict = function () { return o.default.fn.modal = ut, Ct._jQueryInterface }; var St = ["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"], Nt = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i, Dt = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; function At(t, e, n) { if (0 === t.length) return t; if (n && "function" == typeof n) return n(t); for (var i = (new window.DOMParser).parseFromString(t, "text/html"), o = Object.keys(e), a = [].slice.call(i.body.querySelectorAll("*")), s = function (t, n) { var i = a[t], s = i.nodeName.toLowerCase(); if (-1 === o.indexOf(i.nodeName.toLowerCase())) return i.parentNode.removeChild(i), "continue"; var l = [].slice.call(i.attributes), r = [].concat(e["*"] || [], e[s] || []); l.forEach((function (t) { (function (t, e) { var n = t.nodeName.toLowerCase(); if (-1 !== e.indexOf(n)) return -1 === St.indexOf(n) || Boolean(Nt.test(t.nodeValue) || Dt.test(t.nodeValue)); for (var i = e.filter((function (t) { return t instanceof RegExp })), o = 0, a = i.length; o < a; o++)if (i[o].test(n)) return !0; return !1 })(t, r) || i.removeAttribute(t.nodeName) })) }, l = 0, r = a.length; l < r; l++)s(l); return i.body.innerHTML } var It = "tooltip", kt = "bs.tooltip", Ot = o.default.fn.tooltip, jt = new RegExp("(^|\\s)bs-tooltip\\S+", "g"), Pt = ["sanitize", "whiteList", "sanitizeFn"], Lt = "fade", Rt = "show", xt = "show", qt = "out", Ft = "hover", Qt = "focus", Bt = { AUTO: "auto", TOP: "top", RIGHT: "right", BOTTOM: "bottom", LEFT: "left" }, Ht = { animation: !0, template: '
', 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 }, Ut = { 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)" }, Mt = { 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" }, Wt = function () { function t(t, e) { if ("undefined" == typeof a.default) 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 = o.default(t.currentTarget).data(e); n || (n = new this.constructor(t.currentTarget, this._getDelegateConfig()), o.default(t.currentTarget).data(e, n)), n._activeTrigger.click = !n._activeTrigger.click, n._isWithActiveTrigger() ? n._enter(null, n) : n._leave(null, n) } else { if (o.default(this.getTipElement()).hasClass(Rt)) return void this._leave(null, this); this._enter(null, this) } }, e.dispose = function () { clearTimeout(this._timeout), o.default.removeData(this.element, this.constructor.DATA_KEY), o.default(this.element).off(this.constructor.EVENT_KEY), o.default(this.element).closest(".modal").off("hide.bs.modal", this._hideModalHandler), this.tip && o.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" === o.default(this.element).css("display")) throw new Error("Please use show on visible elements"); var e = o.default.Event(this.constructor.Event.SHOW); if (this.isWithContent() && this._isEnabled) { o.default(this.element).trigger(e); var n = d.findShadowRoot(this.element), i = o.default.contains(null !== n ? n : this.element.ownerDocument.documentElement, this.element); if (e.isDefaultPrevented() || !i) return; var s = this.getTipElement(), l = d.getUID(this.constructor.NAME); s.setAttribute("id", l), this.element.setAttribute("aria-describedby", l), this.setContent(), this.config.animation && o.default(s).addClass(Lt); var r = "function" == typeof this.config.placement ? this.config.placement.call(this, s, this.element) : this.config.placement, u = this._getAttachment(r); this.addAttachmentClass(u); var f = this._getContainer(); o.default(s).data(this.constructor.DATA_KEY, this), o.default.contains(this.element.ownerDocument.documentElement, this.tip) || o.default(s).appendTo(f), o.default(this.element).trigger(this.constructor.Event.INSERTED), this._popper = new a.default(this.element, s, this._getPopperConfig(u)), o.default(s).addClass(Rt), o.default(s).addClass(this.config.customClass), "ontouchstart" in document.documentElement && o.default(document.body).children().on("mouseover", null, o.default.noop); var c = function () { t.config.animation && t._fixTransition(); var e = t._hoverState; t._hoverState = null, o.default(t.element).trigger(t.constructor.Event.SHOWN), e === qt && t._leave(null, t) }; if (o.default(this.tip).hasClass(Lt)) { var h = d.getTransitionDurationFromElement(this.tip); o.default(this.tip).one(d.TRANSITION_END, c).emulateTransitionEnd(h) } else c() } }, e.hide = function (t) { var e = this, n = this.getTipElement(), i = o.default.Event(this.constructor.Event.HIDE), a = function () { e._hoverState !== xt && n.parentNode && n.parentNode.removeChild(n), e._cleanTipClass(), e.element.removeAttribute("aria-describedby"), o.default(e.element).trigger(e.constructor.Event.HIDDEN), null !== e._popper && e._popper.destroy(), t && t() }; if (o.default(this.element).trigger(i), !i.isDefaultPrevented()) { if (o.default(n).removeClass(Rt), "ontouchstart" in document.documentElement && o.default(document.body).children().off("mouseover", null, o.default.noop), this._activeTrigger.click = !1, this._activeTrigger.focus = !1, this._activeTrigger.hover = !1, o.default(this.tip).hasClass(Lt)) { var s = d.getTransitionDurationFromElement(n); o.default(n).one(d.TRANSITION_END, a).emulateTransitionEnd(s) } else a(); this._hoverState = "" } }, e.update = function () { null !== this._popper && this._popper.scheduleUpdate() }, e.isWithContent = function () { return Boolean(this.getTitle()) }, e.addAttachmentClass = function (t) { o.default(this.getTipElement()).addClass("bs-tooltip-" + t) }, e.getTipElement = function () { return this.tip = this.tip || o.default(this.config.template)[0], this.tip }, e.setContent = function () { var t = this.getTipElement(); this.setElementContent(o.default(t.querySelectorAll(".tooltip-inner")), this.getTitle()), o.default(t).removeClass("fade show") }, e.setElementContent = function (t, e) { "object" != typeof e || !e.nodeType && !e.jquery ? this.config.html ? (this.config.sanitize && (e = At(e, this.config.whiteList, this.config.sanitizeFn)), t.html(e)) : t.text(e) : this.config.html ? o.default(e).parent().is(t) || t.empty().append(e) : t.text(o.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 r({}, { 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 = r({}, 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 : d.isElement(this.config.container) ? o.default(this.config.container) : o.default(document).find(this.config.container) }, e._getAttachment = function (t) { return Bt[t.toUpperCase()] }, e._setListeners = function () { var t = this; this.config.trigger.split(" ").forEach((function (e) { if ("click" === e) o.default(t.element).on(t.constructor.Event.CLICK, t.config.selector, (function (e) { return t.toggle(e) })); else if ("manual" !== e) { var n = e === Ft ? t.constructor.Event.MOUSEENTER : t.constructor.Event.FOCUSIN, i = e === Ft ? t.constructor.Event.MOUSELEAVE : t.constructor.Event.FOCUSOUT; o.default(t.element).on(n, t.config.selector, (function (e) { return t._enter(e) })).on(i, t.config.selector, (function (e) { return t._leave(e) })) } })), this._hideModalHandler = function () { t.element && t.hide() }, o.default(this.element).closest(".modal").on("hide.bs.modal", this._hideModalHandler), this.config.selector ? this.config = r({}, 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 || o.default(t.currentTarget).data(n)) || (e = new this.constructor(t.currentTarget, this._getDelegateConfig()), o.default(t.currentTarget).data(n, e)), t && (e._activeTrigger["focusin" === t.type ? Qt : Ft] = !0), o.default(e.getTipElement()).hasClass(Rt) || e._hoverState === xt ? e._hoverState = xt : (clearTimeout(e._timeout), e._hoverState = xt, e.config.delay && e.config.delay.show ? e._timeout = setTimeout((function () { e._hoverState === xt && e.show() }), e.config.delay.show) : e.show()) }, e._leave = function (t, e) { var n = this.constructor.DATA_KEY; (e = e || o.default(t.currentTarget).data(n)) || (e = new this.constructor(t.currentTarget, this._getDelegateConfig()), o.default(t.currentTarget).data(n, e)), t && (e._activeTrigger["focusout" === t.type ? Qt : Ft] = !1), e._isWithActiveTrigger() || (clearTimeout(e._timeout), e._hoverState = qt, e.config.delay && e.config.delay.hide ? e._timeout = setTimeout((function () { e._hoverState === qt && 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 = o.default(this.element).data(); return Object.keys(e).forEach((function (t) { -1 !== Pt.indexOf(t) && delete e[t] })), "number" == typeof (t = r({}, 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()), d.typeCheckConfig(It, t, this.constructor.DefaultType), t.sanitize && (t.template = At(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 = o.default(this.getTipElement()), e = t.attr("class").match(jt); 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") && (o.default(t).removeClass(Lt), this.config.animation = !1, this.hide(), this.show(), this.config.animation = e) }, t._jQueryInterface = function (e) { return this.each((function () { var n = o.default(this), i = n.data(kt), a = "object" == typeof e && e; if ((i || !/dispose|hide/.test(e)) && (i || (i = new t(this, a), n.data(kt, i)), "string" == typeof e)) { if ("undefined" == typeof i[e]) throw new TypeError('No method named "' + e + '"'); i[e]() } })) }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "Default", get: function () { return Ht } }, { key: "NAME", get: function () { return It } }, { key: "DATA_KEY", get: function () { return kt } }, { key: "Event", get: function () { return Mt } }, { key: "EVENT_KEY", get: function () { return ".bs.tooltip" } }, { key: "DefaultType", get: function () { return Ut } }]), t }(); o.default.fn.tooltip = Wt._jQueryInterface, o.default.fn.tooltip.Constructor = Wt, o.default.fn.tooltip.noConflict = function () { return o.default.fn.tooltip = Ot, Wt._jQueryInterface }; var Vt = "bs.popover", zt = o.default.fn.popover, Kt = new RegExp("(^|\\s)bs-popover\\S+", "g"), Xt = r({}, Wt.Default, { placement: "right", trigger: "click", content: "", template: '' }), Yt = r({}, Wt.DefaultType, { content: "(string|element|function)" }), $t = { 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" }, Jt = function (t) { var e, n; function i() { return t.apply(this, arguments) || this } n = t, (e = i).prototype = Object.create(n.prototype), e.prototype.constructor = e, u(e, n); var a = i.prototype; return a.isWithContent = function () { return this.getTitle() || this._getContent() }, a.addAttachmentClass = function (t) { o.default(this.getTipElement()).addClass("bs-popover-" + t) }, a.getTipElement = function () { return this.tip = this.tip || o.default(this.config.template)[0], this.tip }, a.setContent = function () { var t = o.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 = o.default(this.getTipElement()), e = t.attr("class").match(Kt); null !== e && e.length > 0 && t.removeClass(e.join("")) }, i._jQueryInterface = function (t) { return this.each((function () { var e = o.default(this).data(Vt), n = "object" == typeof t ? t : null; if ((e || !/dispose|hide/.test(t)) && (e || (e = new i(this, n), o.default(this).data(Vt, e)), "string" == typeof t)) { if ("undefined" == typeof e[t]) throw new TypeError('No method named "' + t + '"'); e[t]() } })) }, l(i, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "Default", get: function () { return Xt } }, { key: "NAME", get: function () { return "popover" } }, { key: "DATA_KEY", get: function () { return Vt } }, { key: "Event", get: function () { return $t } }, { key: "EVENT_KEY", get: function () { return ".bs.popover" } }, { key: "DefaultType", get: function () { return Yt } }]), i }(Wt); o.default.fn.popover = Jt._jQueryInterface, o.default.fn.popover.Constructor = Jt, o.default.fn.popover.noConflict = function () { return o.default.fn.popover = zt, Jt._jQueryInterface }; var Gt = "scrollspy", Zt = "bs.scrollspy", te = o.default.fn[Gt], ee = "active", ne = "position", ie = ".nav, .list-group", oe = { offset: 10, method: "auto", target: "" }, ae = { offset: "number", method: "string", target: "(string|element)" }, se = 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, o.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" : ne, n = "auto" === this._config.method ? e : this._config.method, i = n === ne ? this._getScrollTop() : 0; this._offsets = [], this._targets = [], this._scrollHeight = this._getScrollHeight(), [].slice.call(document.querySelectorAll(this._selector)).map((function (t) { var e, a = d.getSelectorFromElement(t); if (a && (e = document.querySelector(a)), e) { var s = e.getBoundingClientRect(); if (s.width || s.height) return [o.default(e)[n]().top + i, a] } return null })).filter(Boolean).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 () { o.default.removeData(this._element, Zt), o.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 = r({}, oe, "object" == typeof t && t ? t : {})).target && d.isElement(t.target)) { var e = o.default(t.target).attr("id"); e || (e = d.getUID(Gt), o.default(t.target).attr("id", e)), t.target = "#" + e } return d.typeCheckConfig(Gt, t, ae), 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 < this._offsets[0] && this._offsets[0] > 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 < this._offsets[o + 1]) && this._activate(this._targets[o]) } }, e._activate = function (t) { this._activeTarget = t, this._clear(); var e = this._selector.split(",").map((function (e) { return e + '[data-target="' + t + '"],' + e + '[href="' + t + '"]' })), n = o.default([].slice.call(document.querySelectorAll(e.join(",")))); n.hasClass("dropdown-item") ? (n.closest(".dropdown").find(".dropdown-toggle").addClass(ee), n.addClass(ee)) : (n.addClass(ee), n.parents(ie).prev(".nav-link, .list-group-item").addClass(ee), n.parents(ie).prev(".nav-item").children(".nav-link").addClass(ee)), o.default(this._scrollElement).trigger("activate.bs.scrollspy", { relatedTarget: t }) }, e._clear = function () { [].slice.call(document.querySelectorAll(this._selector)).filter((function (t) { return t.classList.contains(ee) })).forEach((function (t) { return t.classList.remove(ee) })) }, t._jQueryInterface = function (e) { return this.each((function () { var n = o.default(this).data(Zt); if (n || (n = new t(this, "object" == typeof e && e), o.default(this).data(Zt, n)), "string" == typeof e) { if ("undefined" == typeof n[e]) throw new TypeError('No method named "' + e + '"'); n[e]() } })) }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "Default", get: function () { return oe } }]), t }(); o.default(window).on("load.bs.scrollspy.data-api", (function () { for (var t = [].slice.call(document.querySelectorAll('[data-spy="scroll"]')), e = t.length; e--;) { var n = o.default(t[e]); se._jQueryInterface.call(n, n.data()) } })), o.default.fn[Gt] = se._jQueryInterface, o.default.fn[Gt].Constructor = se, o.default.fn[Gt].noConflict = function () { return o.default.fn[Gt] = te, se._jQueryInterface }; var le = "bs.tab", re = o.default.fn.tab, ue = "active", fe = "fade", de = "show", ce = ".active", he = "> li > .active", ge = 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 && o.default(this._element).hasClass(ue) || o.default(this._element).hasClass("disabled") || this._element.hasAttribute("disabled"))) { var e, n, i = o.default(this._element).closest(".nav, .list-group")[0], a = d.getSelectorFromElement(this._element); if (i) { var s = "UL" === i.nodeName || "OL" === i.nodeName ? he : ce; n = (n = o.default.makeArray(o.default(i).find(s)))[n.length - 1] } var l = o.default.Event("hide.bs.tab", { relatedTarget: this._element }), r = o.default.Event("show.bs.tab", { relatedTarget: n }); if (n && o.default(n).trigger(l), o.default(this._element).trigger(r), !r.isDefaultPrevented() && !l.isDefaultPrevented()) { a && (e = document.querySelector(a)), this._activate(this._element, i); var u = function () { var e = o.default.Event("hidden.bs.tab", { relatedTarget: t._element }), i = o.default.Event("shown.bs.tab", { relatedTarget: n }); o.default(n).trigger(e), o.default(t._element).trigger(i) }; e ? this._activate(e, e.parentNode, u) : u() } } }, e.dispose = function () { o.default.removeData(this._element, le), this._element = null }, e._activate = function (t, e, n) { var i = this, a = (!e || "UL" !== e.nodeName && "OL" !== e.nodeName ? o.default(e).children(ce) : o.default(e).find(he))[0], s = n && a && o.default(a).hasClass(fe), l = function () { return i._transitionComplete(t, a, n) }; if (a && s) { var r = d.getTransitionDurationFromElement(a); o.default(a).removeClass(de).one(d.TRANSITION_END, l).emulateTransitionEnd(r) } else l() }, e._transitionComplete = function (t, e, n) { if (e) { o.default(e).removeClass(ue); var i = o.default(e.parentNode).find("> .dropdown-menu .active")[0]; i && o.default(i).removeClass(ue), "tab" === e.getAttribute("role") && e.setAttribute("aria-selected", !1) } o.default(t).addClass(ue), "tab" === t.getAttribute("role") && t.setAttribute("aria-selected", !0), d.reflow(t), t.classList.contains(fe) && t.classList.add(de); var a = t.parentNode; if (a && "LI" === a.nodeName && (a = a.parentNode), a && o.default(a).hasClass("dropdown-menu")) { var s = o.default(t).closest(".dropdown")[0]; if (s) { var l = [].slice.call(s.querySelectorAll(".dropdown-toggle")); o.default(l).addClass(ue) } t.setAttribute("aria-expanded", !0) } n && n() }, t._jQueryInterface = function (e) { return this.each((function () { var n = o.default(this), i = n.data(le); if (i || (i = new t(this), n.data(le, i)), "string" == typeof e) { if ("undefined" == typeof i[e]) throw new TypeError('No method named "' + e + '"'); i[e]() } })) }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }]), t }(); o.default(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', (function (t) { t.preventDefault(), ge._jQueryInterface.call(o.default(this), "show") })), o.default.fn.tab = ge._jQueryInterface, o.default.fn.tab.Constructor = ge, o.default.fn.tab.noConflict = function () { return o.default.fn.tab = re, ge._jQueryInterface }; var me = "bs.toast", pe = o.default.fn.toast, _e = "hide", ve = "show", ye = "showing", be = "click.dismiss.bs.toast", Ee = { animation: !0, autohide: !0, delay: 500 }, Te = { animation: "boolean", autohide: "boolean", delay: "number" }, we = 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 = o.default.Event("show.bs.toast"); if (o.default(this._element).trigger(e), !e.isDefaultPrevented()) { this._clearTimeout(), this._config.animation && this._element.classList.add("fade"); var n = function () { t._element.classList.remove(ye), t._element.classList.add(ve), o.default(t._element).trigger("shown.bs.toast"), t._config.autohide && (t._timeout = setTimeout((function () { t.hide() }), t._config.delay)) }; if (this._element.classList.remove(_e), d.reflow(this._element), this._element.classList.add(ye), this._config.animation) { var i = d.getTransitionDurationFromElement(this._element); o.default(this._element).one(d.TRANSITION_END, n).emulateTransitionEnd(i) } else n() } }, e.hide = function () { if (this._element.classList.contains(ve)) { var t = o.default.Event("hide.bs.toast"); o.default(this._element).trigger(t), t.isDefaultPrevented() || this._close() } }, e.dispose = function () { this._clearTimeout(), this._element.classList.contains(ve) && this._element.classList.remove(ve), o.default(this._element).off(be), o.default.removeData(this._element, me), this._element = null, this._config = null }, e._getConfig = function (t) { return t = r({}, Ee, o.default(this._element).data(), "object" == typeof t && t ? t : {}), d.typeCheckConfig("toast", t, this.constructor.DefaultType), t }, e._setListeners = function () { var t = this; o.default(this._element).on(be, '[data-dismiss="toast"]', (function () { return t.hide() })) }, e._close = function () { var t = this, e = function () { t._element.classList.add(_e), o.default(t._element).trigger("hidden.bs.toast") }; if (this._element.classList.remove(ve), this._config.animation) { var n = d.getTransitionDurationFromElement(this._element); o.default(this._element).one(d.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 = o.default(this), i = n.data(me); if (i || (i = new t(this, "object" == typeof e && e), n.data(me, i)), "string" == typeof e) { if ("undefined" == typeof i[e]) throw new TypeError('No method named "' + e + '"'); i[e](this) } })) }, l(t, null, [{ key: "VERSION", get: function () { return "4.6.2" } }, { key: "DefaultType", get: function () { return Te } }, { key: "Default", get: function () { return Ee } }]), t }(); o.default.fn.toast = we._jQueryInterface, o.default.fn.toast.Constructor = we, o.default.fn.toast.noConflict = function () { return o.default.fn.toast = pe, we._jQueryInterface }, t.Alert = g, t.Button = E, t.Carousel = P, t.Collapse = V, t.Dropdown = lt, t.Modal = Ct, t.Popover = Jt, t.Scrollspy = se, t.Tab = ge, t.Toast = we, t.Tooltip = Wt, t.Util = d, Object.defineProperty(t, "__esModule", { value: !0 }) }));
-//# sourceMappingURL=bootstrap.min.js.map
diff --git a/app/assets/javascripts/repositories.js b/app/assets/javascripts/repositories.js
deleted file mode 100644
index 907fdf67..00000000
--- a/app/assets/javascripts/repositories.js
+++ /dev/null
@@ -1,58 +0,0 @@
-$(document).on("turbolinks:load", function() {
- $("#delete_confirm").on("keyup", function(e) {
- e.preventDefault();
-
- var field = $(this);
- var button = $("#delete-button");
-
- if(field.val() == field.attr("data-expected")) {
- button.removeClass("disabled");
- }
- else {
- button.addClass("disabled");
- }
- });
-
- $("[data-copy-target]").on("click", function(e) {
- e.preventDefault();
-
- var $icon = $(this);
- $icon.data("origin-title", $icon.data("original-title"));
- var $target = $icon.parent().parent().find( $icon.data("copy-target") );
-
- $target.select();
- document.execCommand("copy");
-
- // microcopy
- $icon.prop("title", "Copied").tooltip('_fixTitle').tooltip('show');
- setTimeout(function(){ $icon.prop("title", $icon.data("origin-title")).tooltip('_fixTitle').tooltip('hide'); $target.blur(); }, 3000);
-
- return false;
- });
-
- $(".js-copy-to-clipboard").find("input").on("focus", function() {
- $(this).parent().next().find("a[data-copy-target]").click();
- });
-
- $("[data-copy]").on("click", function(e) {
- e.preventDefault();
-
- var $icon = $(this);
- $icon.data("origin-title", $icon.data("original-title"));
- var $target = $("");
- $("body").append($target);
-
- var text = $(this).data("copy")
- $target.val(text)
-
- $icon.prop("title", "Copied").tooltip('_fixTitle').tooltip('show');
- setTimeout(function(){ $icon.prop("title", $icon.data("origin-title")).tooltip('_fixTitle').tooltip('hide'); }, 3000);
-
- $target.select();
- document.execCommand("copy");
- $target.remove();
-
- return false;
- });
-
-});
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.css
similarity index 55%
rename from app/assets/stylesheets/application.scss
rename to app/assets/stylesheets/application.css
index b5fcfb8a..0841851b 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.css
@@ -1,17 +1,18 @@
-@import "bootstrap";
+/*
+ * This is a manifest file that'll be compiled into application.css.
+ *
+ * With Propshaft, assets are served efficiently without preprocessing steps. You can still include
+ * application-wide styles in this file, but keep in mind that CSS precedence will follow the standard
+ * cascading order, meaning styles declared later in the document or manifest will override earlier ones,
+ * depending on specificity.
+ *
+ * Consider organizing styles into separate files for maintainability.
+ */
body > .container {
padding: 6rem 1rem;
}
-.alert-notice {
- @extend .alert-warning;
-}
-
-.alert-error {
- @extend .alert-danger;
-}
-
.badge-dimage {
color: #ffffff;
background-color: #22aac4;
diff --git a/app/assets/stylesheets/_bootstrap.scss b/app/assets/stylesheets/bootstrap.css
similarity index 100%
rename from app/assets/stylesheets/_bootstrap.scss
rename to app/assets/stylesheets/bootstrap.css
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 1e793d68..cfe29df9 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,4 +1,11 @@
module ApplicationHelper
+ def flash_css_class(type)
+ {
+ "notice" => "warning",
+ "error" => "danger"
+ }.fetch(type, type)
+ end
+
def pull_command(repository, tag)
"docker pull " + [ Rails.configuration.x.public_registry_url, repository ].join("/") + ":" + tag
end
diff --git a/app/views/application/_flash.html.erb b/app/views/application/_flash.html.erb
index 0afe1780..9272bcbb 100644
--- a/app/views/application/_flash.html.erb
+++ b/app/views/application/_flash.html.erb
@@ -4,7 +4,7 @@
<%# only render the usual messages %>
<% next unless %w(success notice error info).include?(type.to_s) %>
- <%= content_tag :div, class: "alert alert-#{type} alert-flash" do %>
+ <%= content_tag :div, class: "alert alert-#{flash_css_class type} alert-flash" do %>
<% if body.kind_of?(Array) %>
<% body.each do |message| %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index c8a2630d..ba11d241 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -9,8 +9,9 @@
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
- <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
+ <%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
+ <%= javascript_importmap_tags %>
+
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
diff --git a/app/views/tags/_delete.html.erb b/app/views/tags/_delete.html.erb
index 1dd4985b..de5de9d1 100644
--- a/app/views/tags/_delete.html.erb
+++ b/app/views/tags/_delete.html.erb
@@ -40,7 +40,7 @@
diff --git a/bin/importmap b/bin/importmap
new file mode 100755
index 00000000..36502ab1
--- /dev/null
+++ b/bin/importmap
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+
+require_relative "../config/application"
+require "importmap/commands"
diff --git a/bin/setup b/bin/setup
index 24b50281..a632ff90 100755
--- a/bin/setup
+++ b/bin/setup
@@ -3,7 +3,6 @@ require "fileutils"
# path to your application root.
APP_ROOT = File.expand_path("..", __dir__)
-APP_NAME = "docker-registry-browser"
def system!(*args)
system(*args, exception: true)
@@ -15,7 +14,6 @@ FileUtils.chdir APP_ROOT do
# Add necessary setup steps to this file.
puts "== Installing dependencies =="
- system! "gem install bundler --conservative"
system("bundle check") || system!("bundle install")
# puts "\n== Copying sample files =="
@@ -23,12 +21,15 @@ FileUtils.chdir APP_ROOT do
# FileUtils.cp "config/database.yml.sample", "config/database.yml"
# end
- # puts "\n== Preparing database =="
- # system! "bin/rails db:prepare"
+ puts "\n== Preparing database =="
+ system! "bin/rails db:prepare"
puts "\n== Removing old logs and tempfiles =="
system! "bin/rails log:clear tmp:clear"
- puts "\n== Restarting application server =="
- system! "bin/rails restart"
+ unless ARGV.include?("--skip-server")
+ puts "\n== Starting development server =="
+ STDOUT.flush # flush the output before exec(2) so that it displays
+ exec "bin/dev"
+ end
end
diff --git a/config/application.rb b/config/application.rb
index 47f8832e..47d435ab 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -8,7 +8,6 @@
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
-require "sprockets/railtie"
# require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
@@ -18,7 +17,7 @@
module DockerRegistryBrowser
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
- config.load_defaults 7.2
+ config.load_defaults 8.0
# Please, add to the `ignore` list any other `lib` subdirectories that do
# not contain `.rb` files, or that should not be reloaded or eager loaded.
diff --git a/config/environments/development.rb b/config/environments/development.rb
index eb0752df..27c2070c 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -3,9 +3,7 @@
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
- # In the development environment your application's code is reloaded any time
- # it changes. This slows down response time but is perfect for development
- # since you don't have to restart the web server when you make code changes.
+ # Make code changes take effect immediately without server restart.
config.enable_reloading = true
# Do not eager load code on boot.
@@ -17,44 +15,47 @@
# Enable server timing.
config.server_timing = true
- # Enable/disable caching. By default caching is disabled.
- # Run rails dev:cache to toggle caching.
+ # Enable/disable Action Controller caching. By default Action Controller caching is disabled.
+ # Run rails dev:cache to toggle Action Controller caching.
if Rails.root.join("tmp/caching-dev.txt").exist?
config.action_controller.perform_caching = true
config.action_controller.enable_fragment_cache_logging = true
- config.cache_store = :memory_store
- config.public_file_server.headers = { "Cache-Control" => "public, max-age=#{2.days.to_i}" }
+ config.public_file_server.headers = { "cache-control" => "public, max-age=#{2.days.to_i}" }
else
config.action_controller.perform_caching = false
-
- config.cache_store = :null_store
end
+ # Change to :null_store to avoid any caching.
+ config.cache_store = :memory_store
+
+ # Store uploaded files on the local file system (see config/storage.yml for options).
+ # config.active_storage.service = :local
+
# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false
- # Disable caching for Action Mailer templates even if Action Controller
- # caching is enabled.
+ # Make template changes take effect immediately.
config.action_mailer.perform_caching = false
+ # Set localhost to be used by links generated in mailer templates.
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
# Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log
- # Raise exceptions for disallowed deprecations.
- config.active_support.disallowed_deprecation = :raise
+ # Raise an error on page load if there are pending migrations.
+ # config.active_record.migration_error = :page_load
- # Tell Active Support which deprecation messages to disallow.
- config.active_support.disallowed_deprecation_warnings = []
+ # Highlight code that triggered database queries in logs.
+ # config.active_record.verbose_query_logs = true
+
+ # Append comments with runtime information tags to SQL queries in logs.
+ # config.active_record.query_log_tags_enabled = true
# Highlight code that enqueued background job in logs.
config.active_job.verbose_enqueue_logs = true
- # Suppress logger output for asset requests.
- config.assets.quiet = true
-
# Raises error for missing translations.
# config.i18n.raise_on_missing_translations = true
diff --git a/config/environments/production.rb b/config/environments/production.rb
index db06f2f0..a1eb4831 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -6,91 +6,83 @@
# Code is not reloaded between requests.
config.enable_reloading = false
- # Eager load code on boot. This eager loads most of Rails and
- # your application in memory, allowing both threaded web servers
- # and those relying on copy on write to perform better.
- # Rake tasks automatically ignore this option for performance.
+ # Eager load code on boot for better performance and memory savings (ignored by Rake tasks).
config.eager_load = true
- # Full error reports are disabled and caching is turned on.
- config.consider_all_requests_local = false
- config.action_controller.perform_caching = true
+ # Full error reports are disabled.
+ config.consider_all_requests_local = false
- # Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment
- # key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files).
- # config.require_master_key = true
-
- # Disable serving static files from the `/public` folder by default since
- # Apache or NGINX already handles this.
- # Enable static file serving from the `/public` folder (turn off if using NGINX/Apache for it).
- config.public_file_server.enabled = true
-
- # Compress CSS using a preprocessor.
- # config.assets.css_compressor = :sass
-
- # Do not fallback to assets pipeline if a precompiled asset is missed.
- config.assets.compile = false
+ # Cache assets for far-future expiry since they are all digest stamped.
+ config.public_file_server.headers = { "cache-control" => "public, max-age=#{1.year.to_i}" }
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config..asset_host = "http://assets.example.com"
- # Specifies the header that your server uses for sending files.
- # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache
- # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX
+ # Store uploaded files on the local file system (see config/storage.yml for options).
+ # config.active_storage.service = :local
# Assume all access to the app is happening through a SSL-terminating reverse proxy.
- # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
# config.assume_ssl = true
+ config.assume_ssl = ENV["ASSUME_SSL"].in? %w[true 1 yes]
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ # config.force_ssl = true
config.force_ssl = ENV["FORCE_SSL"].in? %w[true 1 yes]
# Skip http-to-https redirect for the default health check endpoint.
# config.ssl_options = { redirect: { exclude: ->(request) { request.path == "/up" } } }
- # Log to STDOUT by default
- config.logger = ActiveSupport::Logger.new(STDOUT)
- .tap { |logger| logger.formatter = ::Logger::Formatter.new }
- .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
-
- # Prepend all log lines with the following tags.
+ # Log to STDOUT with the current request id as a default log tag.
config.log_tags = [ :request_id ]
+ config.logger = ActiveSupport::TaggedLogging.logger(STDOUT)
- # Info include generic and useful information about system operation, but avoids logging too much
- # information to avoid inadvertent exposure of personally identifiable information (PII). If you
- # want to log everything, set the level to "debug".
+ # Change to "debug" to log everything (including potentially personally-identifiable information!)
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
- # Use a different cache store in production.
+ # Prevent health checks from clogging up the logs.
+ config.silence_healthcheck_path = "/up"
+
+ # Don't log any deprecations.
+ config.active_support.report_deprecations = false
+
+ # Replace the default in-process memory cache store with a durable alternative.
# config.cache_store = :mem_cache_store
- # Use a real queuing backend for Active Job (and separate queues per environment).
+ # Replace the default in-process and non-durable queuing backend for Active Job.
# config.active_job.queue_adapter = :resque
- # config.active_job.queue_name_prefix = "docker_registry_browser_production"
-
- # Disable caching for Action Mailer templates even if Action Controller
- # caching is enabled.
- config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false
+ # Set host to be used by links generated in mailer templates.
+ config.action_mailer.default_url_options = { host: "example.com" }
+
+ # Specify outgoing SMTP server. Remember to add smtp/* credentials via rails credentials:edit.
+ # config.action_mailer.smtp_settings = {
+ # user_name: Rails.application.credentials.dig(:smtp, :user_name),
+ # password: Rails.application.credentials.dig(:smtp, :password),
+ # address: "smtp.example.com",
+ # port: 587,
+ # authentication: :plain
+ # }
+
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true
- # Don't log any deprecations.
- config.active_support.report_deprecations = false
+ # Do not dump schema after migrations.
+ # config.active_record.dump_schema_after_migration = false
+
+ # Only use :id for inspections in production.
+ # config.active_record.attributes_for_inspect = [ :id ]
# Enable DNS rebinding protection and other `Host` header attacks.
# config.hosts = [
# "example.com", # Allow requests from example.com
# /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
# ]
+ #
# Skip DNS rebinding protection for the default health check endpoint.
# config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
-
- # custom
- config.action_mailer.default_url_options = { host: ENV["DOMAIN"] }
end
diff --git a/config/environments/test.rb b/config/environments/test.rb
index b6f5b877..63f01160 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,5 +1,3 @@
-require "active_support/core_ext/integer/time"
-
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
@@ -17,12 +15,11 @@
# loading is working properly before deploying your code.
config.eager_load = ENV["CI"].present?
- # Configure public file server for tests with Cache-Control for performance.
- config.public_file_server.headers = { "Cache-Control" => "public, max-age=#{1.hour.to_i}" }
+ # Configure public file server for tests with cache-control for performance.
+ config.public_file_server.headers = { "cache-control" => "public, max-age=3600" }
- # Show full error reports and disable caching.
- config.consider_all_requests_local = true
- config.action_controller.perform_caching = false
+ # Show full error reports.
+ config.consider_all_requests_local = true
config.cache_store = :null_store
# Raise exceptions instead of rendering exception templates.
@@ -31,28 +28,20 @@
# Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false
- # Disable caching for Action Mailer templates even if Action Controller
- # caching is enabled.
- config.action_mailer.perform_caching = false
+ # Store uploaded files on the local file system in a temporary directory.
+ # config.active_storage.service = :test
# Tell Action Mailer not to deliver emails to the real world.
# The :test delivery method accumulates sent emails in the
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
- # Unlike controllers, the mailer instance doesn't have any context about the
- # incoming request so you'll need to provide the :host parameter yourself.
- config.action_mailer.default_url_options = { host: "www.example.com" }
+ # Set host to be used by links generated in mailer templates.
+ config.action_mailer.default_url_options = { host: "example.com" }
# Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr
- # Raise exceptions for disallowed deprecations.
- config.active_support.disallowed_deprecation = :raise
-
- # Tell Active Support which deprecation messages to disallow.
- config.active_support.disallowed_deprecation_warnings = []
-
# Raises error for missing translations.
# config.i18n.raise_on_missing_translations = true
diff --git a/config/importmap.rb b/config/importmap.rb
new file mode 100644
index 00000000..df4aef19
--- /dev/null
+++ b/config/importmap.rb
@@ -0,0 +1,8 @@
+# Pin npm packages by running ./bin/importmap
+
+pin "application", preload: true
+pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
+
+pin "bootstrap" # @4.6.2
+pin "jquery" # @3.7.1
+pin "popper.js" # @1.16.1
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index 36a9daa8..7107bce6 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -10,7 +10,7 @@
policy.font_src :self, :https, :data
policy.img_src :self, :https, :data
policy.object_src :none
- policy.script_src :self, :https
+ policy.script_src :self, :https, :unsafe_inline
policy.style_src :self, :https, :unsafe_inline
# Specify URI for violation reports
# policy.report_uri "/csp-violation-report-endpoint"
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index c010b83d..c0b717f7 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -4,5 +4,5 @@
# Use this to limit dissemination of sensitive information.
# See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors.
Rails.application.config.filter_parameters += [
- :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+ :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn, :cvv, :cvc
]
diff --git a/vendor/javascript/.keep b/vendor/javascript/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/vendor/javascript/bootstrap.js b/vendor/javascript/bootstrap.js
new file mode 100644
index 00000000..e76b5424
--- /dev/null
+++ b/vendor/javascript/bootstrap.js
@@ -0,0 +1,4 @@
+// bootstrap@4.6.2 downloaded from https://ga.jspm.io/npm:bootstrap@4.6.2/dist/js/bootstrap.js
+
+import*as e from"jquery";import*as t from"popper.js";var n="default"in e?e.default:e;var i="default"in t?t.default:t;var a="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:global;var r={};(function(e,t){t(r,n,i)})(0,(function(e,t,n){function _interopDefaultLegacy(e){return e&&"object"===typeof e&&"default"in e?e:{default:e}}var i=_interopDefaultLegacy(t);var r=_interopDefaultLegacy(n);function _defineProperties(e,t){for(var n=0;n=o)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};u.jQueryDetection();setTransitionEndSupport();var f="alert";var d="4.6.2";var c="bs.alert";var h="."+c;var g=".data-api";var v=i.default.fn[f];var _="alert";var m="fade";var p="show";var y="close"+h;var E="closed"+h;var b="click"+h+g;var C='[data-dismiss="alert"]';var T=function(){function Alert(e){(this||a)._element=e}var e=Alert.prototype;e.close=function close(e){var t=(this||a)._element;e&&(t=this._getRootElement(e));var n=this._triggerCloseEvent(t);n.isDefaultPrevented()||this._removeElement(t)};e.dispose=function dispose(){i.default.removeData((this||a)._element,c);(this||a)._element=null};e._getRootElement=function _getRootElement(e){var t=u.getSelectorFromElement(e);var n=false;t&&(n=document.querySelector(t));n||(n=i.default(e).closest("."+_)[0]);return n};e._triggerCloseEvent=function _triggerCloseEvent(e){var t=i.default.Event(y);i.default(e).trigger(t);return t};e._removeElement=function _removeElement(e){var t=this||a;i.default(e).removeClass(p);if(i.default(e).hasClass(m)){var n=u.getTransitionDurationFromElement(e);i.default(e).one(u.TRANSITION_END,(function(n){return t._destroyElement(e,n)})).emulateTransitionEnd(n)}else this._destroyElement(e)};e._destroyElement=function _destroyElement(e){i.default(e).detach().trigger(E).remove()};Alert._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a);var n=t.data(c);if(!n){n=new Alert(this||a);t.data(c,n)}"close"===e&&n[e](this||a)}))};Alert._handleDismiss=function _handleDismiss(e){return function(t){t&&t.preventDefault();e.close(this||a)}};_createClass(Alert,null,[{key:"VERSION",get:function get(){return d}}]);return Alert}();i.default(document).on(b,C,T._handleDismiss(new T));i.default.fn[f]=T._jQueryInterface;i.default.fn[f].Constructor=T;i.default.fn[f].noConflict=function(){i.default.fn[f]=v;return T._jQueryInterface};var w="button";var S="4.6.2";var D="bs.button";var A="."+D;var I=".data-api";var N=i.default.fn[w];var k="active";var j="btn";var O="focus";var P="click"+A+I;var x="focus"+A+I+" blur"+A+I;var L="load"+A+I;var R='[data-toggle^="button"]';var F='[data-toggle="buttons"]';var Q='[data-toggle="button"]';var q='[data-toggle="buttons"] .btn';var B='input:not([type="hidden"])';var H=".active";var M=".btn";var U=function(){function Button(e){(this||a)._element=e;(this||a).shouldAvoidTriggerChange=false}var e=Button.prototype;e.toggle=function toggle(){var e=true;var t=true;var n=i.default((this||a)._element).closest(F)[0];if(n){var r=(this||a)._element.querySelector(B);if(r){if("radio"===r.type)if(r.checked&&(this||a)._element.classList.contains(k))e=false;else{var o=n.querySelector(H);o&&i.default(o).removeClass(k)}if(e){"checkbox"!==r.type&&"radio"!==r.type||(r.checked=!(this||a)._element.classList.contains(k));(this||a).shouldAvoidTriggerChange||i.default(r).trigger("change")}r.focus();t=false}}if(!((this||a)._element.hasAttribute("disabled")||(this||a)._element.classList.contains("disabled"))){t&&(this||a)._element.setAttribute("aria-pressed",!(this||a)._element.classList.contains(k));e&&i.default((this||a)._element).toggleClass(k)}};e.dispose=function dispose(){i.default.removeData((this||a)._element,D);(this||a)._element=null};Button._jQueryInterface=function _jQueryInterface(e,t){return this.each((function(){var n=i.default(this||a);var r=n.data(D);if(!r){r=new Button(this||a);n.data(D,r)}r.shouldAvoidTriggerChange=t;"toggle"===e&&r[e]()}))};_createClass(Button,null,[{key:"VERSION",get:function get(){return S}}]);return Button}();i.default(document).on(P,R,(function(e){var t=e.target;var n=t;i.default(t).hasClass(j)||(t=i.default(t).closest(M)[0]);if(!t||t.hasAttribute("disabled")||t.classList.contains("disabled"))e.preventDefault();else{var a=t.querySelector(B);if(a&&(a.hasAttribute("disabled")||a.classList.contains("disabled"))){e.preventDefault();return}"INPUT"!==n.tagName&&"LABEL"===t.tagName||U._jQueryInterface.call(i.default(t),"toggle","INPUT"===n.tagName)}})).on(x,R,(function(e){var t=i.default(e.target).closest(M)[0];i.default(t).toggleClass(O,/^focus(in)?$/.test(e.type))}));i.default(window).on(L,(function(){var e=[].slice.call(document.querySelectorAll(q));for(var t=0,n=e.length;t0;(this||a)._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent);this._addEventListeners()}var e=Carousel.prototype;e.next=function next(){(this||a)._isSliding||this._slide(le)};e.nextWhenVisible=function nextWhenVisible(){var e=i.default((this||a)._element);!document.hidden&&e.is(":visible")&&"hidden"!==e.css("visibility")&&this.next()};e.prev=function prev(){(this||a)._isSliding||this._slide(ue)};e.pause=function pause(e){e||((this||a)._isPaused=true);if((this||a)._element.querySelector(Ne)){u.triggerTransitionEnd((this||a)._element);this.cycle(true)}clearInterval((this||a)._interval);(this||a)._interval=null};e.cycle=function cycle(e){e||((this||a)._isPaused=false);if((this||a)._interval){clearInterval((this||a)._interval);(this||a)._interval=null}if((this||a)._config.interval&&!(this||a)._isPaused){this._updateInterval();(this||a)._interval=setInterval((document.visibilityState?(this||a).nextWhenVisible:(this||a).next).bind(this||a),(this||a)._config.interval)}};e.to=function to(e){var t=this||a;(this||a)._activeElement=(this||a)._element.querySelector(De);var n=this._getItemIndex((this||a)._activeElement);if(!(e>(this||a)._items.length-1||e<0))if((this||a)._isSliding)i.default((this||a)._element).one(he,(function(){return t.to(e)}));else if(n!==e){var r=e>n?le:ue;this._slide(r,(this||a)._items[e])}else{this.pause();this.cycle()}};e.dispose=function dispose(){i.default((this||a)._element).off(K);i.default.removeData((this||a)._element,z);(this||a)._items=null;(this||a)._config=null;(this||a)._element=null;(this||a)._interval=null;(this||a)._isPaused=null;(this||a)._isSliding=null;(this||a)._activeElement=null;(this||a)._indicatorsElement=null};e._getConfig=function _getConfig(e){e=_extends({},Pe,e);u.typeCheckConfig(W,e,xe);return e};e._handleSwipe=function _handleSwipe(){var e=Math.abs((this||a).touchDeltaX);if(!(e<=Z)){var t=e/(this||a).touchDeltaX;(this||a).touchDeltaX=0;t>0&&this.prev();t<0&&this.next()}};e._addEventListeners=function _addEventListeners(){var e=this||a;(this||a)._config.keyboard&&i.default((this||a)._element).on(ge,(function(t){return e._keydown(t)}));"hover"===(this||a)._config.pause&&i.default((this||a)._element).on(ve,(function(t){return e.pause(t)})).on(_e,(function(t){return e.cycle(t)}));(this||a)._config.touch&&this._addTouchEventListeners()};e._addTouchEventListeners=function _addTouchEventListeners(){var e=this||a;if((this||a)._touchSupported){var t=function start(t){e._pointerEvent&&Le[t.originalEvent.pointerType.toUpperCase()]?e.touchStartX=t.originalEvent.clientX:e._pointerEvent||(e.touchStartX=t.originalEvent.touches[0].clientX)};var n=function move(t){e.touchDeltaX=t.originalEvent.touches&&t.originalEvent.touches.length>1?0:t.originalEvent.touches[0].clientX-e.touchStartX};var r=function end(t){e._pointerEvent&&Le[t.originalEvent.pointerType.toUpperCase()]&&(e.touchDeltaX=t.originalEvent.clientX-e.touchStartX);e._handleSwipe();if("hover"===e._config.pause){e.pause();e.touchTimeout&&clearTimeout(e.touchTimeout);e.touchTimeout=setTimeout((function(t){return e.cycle(t)}),G+e._config.interval)}};i.default((this||a)._element.querySelectorAll(Ie)).on(Ce,(function(e){return e.preventDefault()}));if((this||a)._pointerEvent){i.default((this||a)._element).on(Ee,(function(e){return t(e)}));i.default((this||a)._element).on(be,(function(e){return r(e)}));(this||a)._element.classList.add(se)}else{i.default((this||a)._element).on(me,(function(e){return t(e)}));i.default((this||a)._element).on(pe,(function(e){return n(e)}));i.default((this||a)._element).on(ye,(function(e){return r(e)}))}}};e._keydown=function _keydown(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case $:e.preventDefault();this.prev();break;case J:e.preventDefault();this.next();break}};e._getItemIndex=function _getItemIndex(e){(this||a)._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll(Ae)):[];return(this||a)._items.indexOf(e)};e._getItemByDirection=function _getItemByDirection(e,t){var n=e===le;var i=e===ue;var r=this._getItemIndex(t);var o=(this||a)._items.length-1;var s=i&&0===r||n&&r===o;if(s&&!(this||a)._config.wrap)return t;var l=e===ue?-1:1;var u=(r+l)%(this||a)._items.length;return-1===u?(this||a)._items[(this||a)._items.length-1]:(this||a)._items[u]};e._triggerSlideEvent=function _triggerSlideEvent(e,t){var n=this._getItemIndex(e);var r=this._getItemIndex((this||a)._element.querySelector(De));var o=i.default.Event(ce,{relatedTarget:e,direction:t,from:r,to:n});i.default((this||a)._element).trigger(o);return o};e._setActiveIndicatorElement=function _setActiveIndicatorElement(e){if((this||a)._indicatorsElement){var t=[].slice.call((this||a)._indicatorsElement.querySelectorAll(Se));i.default(t).removeClass(te);var n=(this||a)._indicatorsElement.children[this._getItemIndex(e)];n&&i.default(n).addClass(te)}};e._updateInterval=function _updateInterval(){var e=(this||a)._activeElement||(this||a)._element.querySelector(De);if(e){var t=parseInt(e.getAttribute("data-interval"),10);if(t){(this||a)._config.defaultInterval=(this||a)._config.defaultInterval||(this||a)._config.interval;(this||a)._config.interval=t}else(this||a)._config.interval=(this||a)._config.defaultInterval||(this||a)._config.interval}};e._slide=function _slide(e,t){var n=this||a;var r=(this||a)._element.querySelector(De);var o=this._getItemIndex(r);var s=t||r&&this._getItemByDirection(e,r);var l=this._getItemIndex(s);var f=Boolean((this||a)._interval);var d;var c;var h;if(e===le){d=ae;c=re;h=fe}else{d=ie;c=oe;h=de}if(s&&i.default(s).hasClass(te))(this||a)._isSliding=false;else{var g=this._triggerSlideEvent(s,h);if(!g.isDefaultPrevented()&&r&&s){(this||a)._isSliding=true;f&&this.pause();this._setActiveIndicatorElement(s);(this||a)._activeElement=s;var v=i.default.Event(he,{relatedTarget:s,direction:h,from:o,to:l});if(i.default((this||a)._element).hasClass(ne)){i.default(s).addClass(c);u.reflow(s);i.default(r).addClass(d);i.default(s).addClass(d);var _=u.getTransitionDurationFromElement(r);i.default(r).one(u.TRANSITION_END,(function(){i.default(s).removeClass(d+" "+c).addClass(te);i.default(r).removeClass(te+" "+c+" "+d);n._isSliding=false;setTimeout((function(){return i.default(n._element).trigger(v)}),0)})).emulateTransitionEnd(_)}else{i.default(r).removeClass(te);i.default(s).addClass(te);(this||a)._isSliding=false;i.default((this||a)._element).trigger(v)}f&&this.cycle()}}};Carousel._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a).data(z);var n=_extends({},Pe,i.default(this||a).data());"object"===typeof e&&(n=_extends({},n,e));var r="string"===typeof e?e:n.slide;if(!t){t=new Carousel(this||a,n);i.default(this||a).data(z,t)}if("number"===typeof e)t.to(e);else if("string"===typeof r){if("undefined"===typeof t[r])throw new TypeError('No method named "'+r+'"');t[r]()}else if(n.interval&&n.ride){t.pause();t.cycle()}}))};Carousel._dataApiClickHandler=function _dataApiClickHandler(e){var t=u.getSelectorFromElement(this||a);if(t){var n=i.default(t)[0];if(n&&i.default(n).hasClass(ee)){var r=_extends({},i.default(n).data(),i.default(this||a).data());var o=this.getAttribute("data-slide-to");o&&(r.interval=false);Carousel._jQueryInterface.call(i.default(n),r);o&&i.default(n).data(z).to(o);e.preventDefault()}}};_createClass(Carousel,null,[{key:"VERSION",get:function get(){return V}},{key:"Default",get:function get(){return Pe}}]);return Carousel}();i.default(document).on(we,je,Re._dataApiClickHandler);i.default(window).on(Te,(function(){var e=[].slice.call(document.querySelectorAll(Oe));for(var t=0,n=e.length;t0){(this||a)._selector=s;(this||a)._triggerArray.push(o)}}(this||a)._parent=(this||a)._config.parent?this._getParent():null;(this||a)._config.parent||this._addAriaAndCollapsedClass((this||a)._element,(this||a)._triggerArray);(this||a)._config.toggle&&this.toggle()}var e=Collapse.prototype;e.toggle=function toggle(){i.default((this||a)._element).hasClass(Ue)?this.hide():this.show()};e.show=function show(){var e=this||a;if(!(this||a)._isTransitioning&&!i.default((this||a)._element).hasClass(Ue)){var t;var n;if((this||a)._parent){t=[].slice.call((this||a)._parent.querySelectorAll(et)).filter((function(t){return"string"===typeof e._config.parent?t.getAttribute("data-parent")===e._config.parent:t.classList.contains(We)}));0===t.length&&(t=null)}if(t){n=i.default(t).not((this||a)._selector).data(qe);if(n&&n._isTransitioning)return}var r=i.default.Event(Ye);i.default((this||a)._element).trigger(r);if(!r.isDefaultPrevented()){if(t){Collapse._jQueryInterface.call(i.default(t).not((this||a)._selector),"hide");n||i.default(t).data(qe,null)}var o=this._getDimension();i.default((this||a)._element).removeClass(We).addClass(Ve);(this||a)._element.style[o]=0;(this||a)._triggerArray.length&&i.default((this||a)._triggerArray).removeClass(ze).attr("aria-expanded",true);this.setTransitioning(true);var s=function complete(){i.default(e._element).removeClass(Ve).addClass(We+" "+Ue);e._element.style[o]="";e.setTransitioning(false);i.default(e._element).trigger($e)};var l=o[0].toUpperCase()+o.slice(1);var f="scroll"+l;var d=u.getTransitionDurationFromElement((this||a)._element);i.default((this||a)._element).one(u.TRANSITION_END,s).emulateTransitionEnd(d);(this||a)._element.style[o]=(this||a)._element[f]+"px"}}};e.hide=function hide(){var e=this||a;if(!(this||a)._isTransitioning&&i.default((this||a)._element).hasClass(Ue)){var t=i.default.Event(Je);i.default((this||a)._element).trigger(t);if(!t.isDefaultPrevented()){var n=this._getDimension();(this||a)._element.style[n]=(this||a)._element.getBoundingClientRect()[n]+"px";u.reflow((this||a)._element);i.default((this||a)._element).addClass(Ve).removeClass(We+" "+Ue);var r=(this||a)._triggerArray.length;if(r>0)for(var o=0;o0};e._getOffset=function _getOffset(){var e=this||a;var t={};"function"===typeof(this||a)._config.offset?t.fn=function(t){t.offsets=_extends({},t.offsets,e._config.offset(t.offsets,e._element));return t}:t.offset=(this||a)._config.offset;return t};e._getPopperConfig=function _getPopperConfig(){var e={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:(this||a)._config.flip},preventOverflow:{boundariesElement:(this||a)._config.boundary}}};"static"===(this||a)._config.display&&(e.modifiers.applyStyle={enabled:false});return _extends({},e,(this||a)._config.popperConfig)};Dropdown._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a).data(st);var n="object"===typeof e?e:null;if(!t){t=new Dropdown(this||a,n);i.default(this||a).data(st,t)}if("string"===typeof e){if("undefined"===typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}}))};Dropdown._clearMenus=function _clearMenus(e){if(!e||e.which!==_t&&("keyup"!==e.type||e.which===ht)){var t=[].slice.call(document.querySelectorAll(Pt));for(var n=0,a=t.length;n0&&o--;e.which===vt&&odocument.documentElement.clientHeight;n||((this||a)._element.style.overflowY="hidden");(this||a)._element.classList.add(sn);var r=u.getTransitionDurationFromElement((this||a)._dialog);i.default((this||a)._element).off(u.TRANSITION_END);i.default((this||a)._element).one(u.TRANSITION_END,(function(){e._element.classList.remove(sn);n||i.default(e._element).one(u.TRANSITION_END,(function(){e._element.style.overflowY=""})).emulateTransitionEnd(e._element,r)})).emulateTransitionEnd(r);(this||a)._element.focus()}};e._showElement=function _showElement(e){var t=this||a;var n=i.default((this||a)._element).hasClass(rn);var r=(this||a)._dialog?(this||a)._dialog.querySelector(bn):null;(this||a)._element.parentNode&&(this||a)._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild((this||a)._element);(this||a)._element.style.display="block";(this||a)._element.removeAttribute("aria-hidden");(this||a)._element.setAttribute("aria-modal",true);(this||a)._element.setAttribute("role","dialog");i.default((this||a)._dialog).hasClass(en)&&r?r.scrollTop=0:(this||a)._element.scrollTop=0;n&&u.reflow((this||a)._element);i.default((this||a)._element).addClass(on);(this||a)._config.focus&&this._enforceFocus();var o=i.default.Event(cn,{relatedTarget:e});var s=function transitionComplete(){t._config.focus&&t._element.focus();t._isTransitioning=false;i.default(t._element).trigger(o)};if(n){var l=u.getTransitionDurationFromElement((this||a)._dialog);i.default((this||a)._dialog).one(u.TRANSITION_END,s).emulateTransitionEnd(l)}else s()};e._enforceFocus=function _enforceFocus(){var e=this||a;i.default(document).off(hn).on(hn,(function(t){document!==t.target&&e._element!==t.target&&0===i.default(e._element).has(t.target).length&&e._element.focus()}))};e._setEscapeEvent=function _setEscapeEvent(){var e=this||a;(this||a)._isShown?i.default((this||a)._element).on(_n,(function(t){if(e._config.keyboard&&t.which===Zt){t.preventDefault();e.hide()}else e._config.keyboard||t.which!==Zt||e._triggerBackdropTransition()})):(this||a)._isShown||i.default((this||a)._element).off(_n)};e._setResizeEvent=function _setResizeEvent(){var e=this||a;(this||a)._isShown?i.default(window).on(gn,(function(t){return e.handleUpdate(t)})):i.default(window).off(gn)};e._hideModal=function _hideModal(){var e=this||a;(this||a)._element.style.display="none";(this||a)._element.setAttribute("aria-hidden",true);(this||a)._element.removeAttribute("aria-modal");(this||a)._element.removeAttribute("role");(this||a)._isTransitioning=false;this._showBackdrop((function(){i.default(document.body).removeClass(an);e._resetAdjustments();e._resetScrollbar();i.default(e._element).trigger(fn)}))};e._removeBackdrop=function _removeBackdrop(){if((this||a)._backdrop){i.default((this||a)._backdrop).remove();(this||a)._backdrop=null}};e._showBackdrop=function _showBackdrop(e){var t=this||a;var n=i.default((this||a)._element).hasClass(rn)?rn:"";if((this||a)._isShown&&(this||a)._config.backdrop){(this||a)._backdrop=document.createElement("div");(this||a)._backdrop.className=nn;n&&(this||a)._backdrop.classList.add(n);i.default((this||a)._backdrop).appendTo(document.body);i.default((this||a)._element).on(vn,(function(e){t._ignoreBackdropClick?t._ignoreBackdropClick=false:e.target===e.currentTarget&&("static"===t._config.backdrop?t._triggerBackdropTransition():t.hide())}));n&&u.reflow((this||a)._backdrop);i.default((this||a)._backdrop).addClass(on);if(!e)return;if(!n){e();return}var r=u.getTransitionDurationFromElement((this||a)._backdrop);i.default((this||a)._backdrop).one(u.TRANSITION_END,e).emulateTransitionEnd(r)}else if(!(this||a)._isShown&&(this||a)._backdrop){i.default((this||a)._backdrop).removeClass(on);var o=function callbackRemove(){t._removeBackdrop();e&&e()};if(i.default((this||a)._element).hasClass(rn)){var s=u.getTransitionDurationFromElement((this||a)._backdrop);i.default((this||a)._backdrop).one(u.TRANSITION_END,o).emulateTransitionEnd(s)}else o()}else e&&e()};e._adjustDialog=function _adjustDialog(){var e=(this||a)._element.scrollHeight>document.documentElement.clientHeight;!(this||a)._isBodyOverflowing&&e&&((this||a)._element.style.paddingLeft=(this||a)._scrollbarWidth+"px");(this||a)._isBodyOverflowing&&!e&&((this||a)._element.style.paddingRight=(this||a)._scrollbarWidth+"px")};e._resetAdjustments=function _resetAdjustments(){(this||a)._element.style.paddingLeft="";(this||a)._element.style.paddingRight=""};e._checkScrollbar=function _checkScrollbar(){var e=document.body.getBoundingClientRect();(this||a)._isBodyOverflowing=Math.round(e.left+e.right)',trigger:"hover focus",title:"",delay:0,html:false,selector:false,placement:"top",offset:0,container:false,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:true,sanitizeFn:null,whiteList:jn,popperConfig:null};var ei={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)"};var ti={HIDE:"hide"+Fn,HIDDEN:"hidden"+Fn,SHOW:"show"+Fn,SHOWN:"shown"+Fn,INSERTED:"inserted"+Fn,CLICK:"click"+Fn,FOCUSIN:"focusin"+Fn,FOCUSOUT:"focusout"+Fn,MOUSEENTER:"mouseenter"+Fn,MOUSELEAVE:"mouseleave"+Fn};var ni=function(){function Tooltip(e,t){if("undefined"===typeof r.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");(this||a)._isEnabled=true;(this||a)._timeout=0;(this||a)._hoverState="";(this||a)._activeTrigger={};(this||a)._popper=null;(this||a).element=e;(this||a).config=this._getConfig(t);(this||a).tip=null;this._setListeners()}var e=Tooltip.prototype;e.enable=function enable(){(this||a)._isEnabled=true};e.disable=function disable(){(this||a)._isEnabled=false};e.toggleEnabled=function toggleEnabled(){(this||a)._isEnabled=!(this||a)._isEnabled};e.toggle=function toggle(e){if((this||a)._isEnabled)if(e){var t=(this||a).constructor.DATA_KEY;var n=i.default(e.currentTarget).data(t);if(!n){n=new(this||a).constructor(e.currentTarget,this._getDelegateConfig());i.default(e.currentTarget).data(t,n)}n._activeTrigger.click=!n._activeTrigger.click;n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass(Un)){this._leave(null,this||a);return}this._enter(null,this||a)}};e.dispose=function dispose(){clearTimeout((this||a)._timeout);i.default.removeData((this||a).element,(this||a).constructor.DATA_KEY);i.default((this||a).element).off((this||a).constructor.EVENT_KEY);i.default((this||a).element).closest(".modal").off("hide.bs.modal",(this||a)._hideModalHandler);(this||a).tip&&i.default((this||a).tip).remove();(this||a)._isEnabled=null;(this||a)._timeout=null;(this||a)._hoverState=null;(this||a)._activeTrigger=null;(this||a)._popper&&(this||a)._popper.destroy();(this||a)._popper=null;(this||a).element=null;(this||a).config=null;(this||a).tip=null};e.show=function show(){var e=this||a;if("none"===i.default((this||a).element).css("display"))throw new Error("Please use show on visible elements");var t=i.default.Event((this||a).constructor.Event.SHOW);if(this.isWithContent()&&(this||a)._isEnabled){i.default((this||a).element).trigger(t);var n=u.findShadowRoot((this||a).element);var o=i.default.contains(null!==n?n:(this||a).element.ownerDocument.documentElement,(this||a).element);if(t.isDefaultPrevented()||!o)return;var s=this.getTipElement();var l=u.getUID((this||a).constructor.NAME);s.setAttribute("id",l);(this||a).element.setAttribute("aria-describedby",l);this.setContent();(this||a).config.animation&&i.default(s).addClass(Mn);var f="function"===typeof(this||a).config.placement?(this||a).config.placement.call(this||a,s,(this||a).element):(this||a).config.placement;var d=this._getAttachment(f);this.addAttachmentClass(d);var c=this._getContainer();i.default(s).data((this||a).constructor.DATA_KEY,this||a);i.default.contains((this||a).element.ownerDocument.documentElement,(this||a).tip)||i.default(s).appendTo(c);i.default((this||a).element).trigger((this||a).constructor.Event.INSERTED);(this||a)._popper=new r.default((this||a).element,s,this._getPopperConfig(d));i.default(s).addClass(Un);i.default(s).addClass((this||a).config.customClass);"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var h=function complete(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null;i.default(e.element).trigger(e.constructor.Event.SHOWN);t===Vn&&e._leave(null,e)};if(i.default((this||a).tip).hasClass(Mn)){var g=u.getTransitionDurationFromElement((this||a).tip);i.default((this||a).tip).one(u.TRANSITION_END,h).emulateTransitionEnd(g)}else h()}};e.hide=function hide(e){var t=this||a;var n=this.getTipElement();var r=i.default.Event((this||a).constructor.Event.HIDE);var o=function complete(){t._hoverState!==Wn&&n.parentNode&&n.parentNode.removeChild(n);t._cleanTipClass();t.element.removeAttribute("aria-describedby");i.default(t.element).trigger(t.constructor.Event.HIDDEN);null!==t._popper&&t._popper.destroy();e&&e()};i.default((this||a).element).trigger(r);if(!r.isDefaultPrevented()){i.default(n).removeClass(Un);"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop);(this||a)._activeTrigger[$n]=false;(this||a)._activeTrigger[Yn]=false;(this||a)._activeTrigger[Xn]=false;if(i.default((this||a).tip).hasClass(Mn)){var s=u.getTransitionDurationFromElement(n);i.default(n).one(u.TRANSITION_END,o).emulateTransitionEnd(s)}else o();(this||a)._hoverState=""}};e.update=function update(){null!==(this||a)._popper&&(this||a)._popper.scheduleUpdate()};e.isWithContent=function isWithContent(){return Boolean(this.getTitle())};e.addAttachmentClass=function addAttachmentClass(e){i.default(this.getTipElement()).addClass(qn+"-"+e)};e.getTipElement=function getTipElement(){(this||a).tip=(this||a).tip||i.default((this||a).config.template)[0];return(this||a).tip};e.setContent=function setContent(){var e=this.getTipElement();this.setElementContent(i.default(e.querySelectorAll(zn)),this.getTitle());i.default(e).removeClass(Mn+" "+Un)};e.setElementContent=function setElementContent(e,t){if("object"!==typeof t||!t.nodeType&&!t.jquery)if((this||a).config.html){(this||a).config.sanitize&&(t=sanitizeHtml(t,(this||a).config.whiteList,(this||a).config.sanitizeFn));e.html(t)}else e.text(t);else(this||a).config.html?i.default(t).parent().is(e)||e.empty().append(t):e.text(i.default(t).text())};e.getTitle=function getTitle(){var e=(this||a).element.getAttribute("data-original-title");e||(e="function"===typeof(this||a).config.title?(this||a).config.title.call((this||a).element):(this||a).config.title);return e};e._getPopperConfig=function _getPopperConfig(e){var t=this||a;var n={placement:e,modifiers:{offset:this._getOffset(),flip:{behavior:(this||a).config.fallbackPlacement},arrow:{element:Kn},preventOverflow:{boundariesElement:(this||a).config.boundary}},onCreate:function onCreate(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function onUpdate(e){return t._handlePopperPlacementChange(e)}};return _extends({},n,(this||a).config.popperConfig)};e._getOffset=function _getOffset(){var e=this||a;var t={};"function"===typeof(this||a).config.offset?t.fn=function(t){t.offsets=_extends({},t.offsets,e.config.offset(t.offsets,e.element));return t}:t.offset=(this||a).config.offset;return t};e._getContainer=function _getContainer(){return false===(this||a).config.container?document.body:u.isElement((this||a).config.container)?i.default((this||a).config.container):i.default(document).find((this||a).config.container)};e._getAttachment=function _getAttachment(e){return Gn[e.toUpperCase()]};e._setListeners=function _setListeners(){var e=this||a;var t=(this||a).config.trigger.split(" ");t.forEach((function(t){if("click"===t)i.default(e.element).on(e.constructor.Event.CLICK,e.config.selector,(function(t){return e.toggle(t)}));else if(t!==Jn){var n=t===Xn?e.constructor.Event.MOUSEENTER:e.constructor.Event.FOCUSIN;var a=t===Xn?e.constructor.Event.MOUSELEAVE:e.constructor.Event.FOCUSOUT;i.default(e.element).on(n,e.config.selector,(function(t){return e._enter(t)})).on(a,e.config.selector,(function(t){return e._leave(t)}))}}));(this||a)._hideModalHandler=function(){e.element&&e.hide()};i.default((this||a).element).closest(".modal").on("hide.bs.modal",(this||a)._hideModalHandler);(this||a).config.selector?(this||a).config=_extends({},(this||a).config,{trigger:"manual",selector:""}):this._fixTitle()};e._fixTitle=function _fixTitle(){var e=typeof(this||a).element.getAttribute("data-original-title");if((this||a).element.getAttribute("title")||"string"!==e){(this||a).element.setAttribute("data-original-title",(this||a).element.getAttribute("title")||"");(this||a).element.setAttribute("title","")}};e._enter=function _enter(e,t){var n=(this||a).constructor.DATA_KEY;t=t||i.default(e.currentTarget).data(n);if(!t){t=new(this||a).constructor(e.currentTarget,this._getDelegateConfig());i.default(e.currentTarget).data(n,t)}e&&(t._activeTrigger["focusin"===e.type?Yn:Xn]=true);if(i.default(t.getTipElement()).hasClass(Un)||t._hoverState===Wn)t._hoverState=Wn;else{clearTimeout(t._timeout);t._hoverState=Wn;t.config.delay&&t.config.delay.show?t._timeout=setTimeout((function(){t._hoverState===Wn&&t.show()}),t.config.delay.show):t.show()}};e._leave=function _leave(e,t){var n=(this||a).constructor.DATA_KEY;t=t||i.default(e.currentTarget).data(n);if(!t){t=new(this||a).constructor(e.currentTarget,this._getDelegateConfig());i.default(e.currentTarget).data(n,t)}e&&(t._activeTrigger["focusout"===e.type?Yn:Xn]=false);if(!t._isWithActiveTrigger()){clearTimeout(t._timeout);t._hoverState=Vn;t.config.delay&&t.config.delay.hide?t._timeout=setTimeout((function(){t._hoverState===Vn&&t.hide()}),t.config.delay.hide):t.hide()}};e._isWithActiveTrigger=function _isWithActiveTrigger(){for(var e in(this||a)._activeTrigger)if((this||a)._activeTrigger[e])return true;return false};e._getConfig=function _getConfig(e){var t=i.default((this||a).element).data();Object.keys(t).forEach((function(e){-1!==Hn.indexOf(e)&&delete t[e]}));e=_extends({},(this||a).constructor.Default,t,"object"===typeof e&&e?e:{});"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());u.typeCheckConfig(xn,e,(this||a).constructor.DefaultType);e.sanitize&&(e.template=sanitizeHtml(e.template,e.whiteList,e.sanitizeFn));return e};e._getDelegateConfig=function _getDelegateConfig(){var e={};if((this||a).config)for(var t in(this||a).config)(this||a).constructor.Default[t]!==(this||a).config[t]&&(e[t]=(this||a).config[t]);return e};e._cleanTipClass=function _cleanTipClass(){var e=i.default(this.getTipElement());var t=e.attr("class").match(Bn);null!==t&&t.length&&e.removeClass(t.join(""))};e._handlePopperPlacementChange=function _handlePopperPlacementChange(e){(this||a).tip=e.instance.popper;this._cleanTipClass();this.addAttachmentClass(this._getAttachment(e.placement))};e._fixTransition=function _fixTransition(){var e=this.getTipElement();var t=(this||a).config.animation;if(null===e.getAttribute("x-placement")){i.default(e).removeClass(Mn);(this||a).config.animation=false;this.hide();this.show();(this||a).config.animation=t}};Tooltip._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a);var n=t.data(Rn);var r="object"===typeof e&&e;if(n||!/dispose|hide/.test(e)){if(!n){n=new Tooltip(this||a,r);t.data(Rn,n)}if("string"===typeof e){if("undefined"===typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}}))};_createClass(Tooltip,null,[{key:"VERSION",get:function get(){return Ln}},{key:"Default",get:function get(){return Zn}},{key:"NAME",get:function get(){return xn}},{key:"DATA_KEY",get:function get(){return Rn}},{key:"Event",get:function get(){return ti}},{key:"EVENT_KEY",get:function get(){return Fn}},{key:"DefaultType",get:function get(){return ei}}]);return Tooltip}();i.default.fn[xn]=ni._jQueryInterface;i.default.fn[xn].Constructor=ni;i.default.fn[xn].noConflict=function(){i.default.fn[xn]=Qn;return ni._jQueryInterface};var ii="popover";var ai="4.6.2";var ri="bs.popover";var oi="."+ri;var si=i.default.fn[ii];var li="bs-popover";var ui=new RegExp("(^|\\s)"+li+"\\S+","g");var fi="fade";var di="show";var ci=".popover-header";var hi=".popover-body";var gi=_extends({},ni.Default,{placement:"right",trigger:"click",content:"",template:''});var vi=_extends({},ni.DefaultType,{content:"(string|element|function)"});var _i={HIDE:"hide"+oi,HIDDEN:"hidden"+oi,SHOW:"show"+oi,SHOWN:"shown"+oi,INSERTED:"inserted"+oi,CLICK:"click"+oi,FOCUSIN:"focusin"+oi,FOCUSOUT:"focusout"+oi,MOUSEENTER:"mouseenter"+oi,MOUSELEAVE:"mouseleave"+oi};var mi=function(e){_inheritsLoose(Popover,e);function Popover(){return e.apply(this||a,arguments)||this||a}var t=Popover.prototype;t.isWithContent=function isWithContent(){return this.getTitle()||this._getContent()};t.addAttachmentClass=function addAttachmentClass(e){i.default(this.getTipElement()).addClass(li+"-"+e)};t.getTipElement=function getTipElement(){(this||a).tip=(this||a).tip||i.default((this||a).config.template)[0];return(this||a).tip};t.setContent=function setContent(){var e=i.default(this.getTipElement());this.setElementContent(e.find(ci),this.getTitle());var t=this._getContent();"function"===typeof t&&(t=t.call((this||a).element));this.setElementContent(e.find(hi),t);e.removeClass(fi+" "+di)};t._getContent=function _getContent(){return(this||a).element.getAttribute("data-content")||(this||a).config.content};t._cleanTipClass=function _cleanTipClass(){var e=i.default(this.getTipElement());var t=e.attr("class").match(ui);null!==t&&t.length>0&&e.removeClass(t.join(""))};Popover._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a).data(ri);var n="object"===typeof e?e:null;if(t||!/dispose|hide/.test(e)){if(!t){t=new Popover(this||a,n);i.default(this||a).data(ri,t)}if("string"===typeof e){if("undefined"===typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}}}))};_createClass(Popover,null,[{key:"VERSION",get:function get(){return ai}},{key:"Default",get:function get(){return gi}},{key:"NAME",get:function get(){return ii}},{key:"DATA_KEY",get:function get(){return ri}},{key:"Event",get:function get(){return _i}},{key:"EVENT_KEY",get:function get(){return oi}},{key:"DefaultType",get:function get(){return vi}}]);return Popover}(ni);i.default.fn[ii]=mi._jQueryInterface;i.default.fn[ii].Constructor=mi;i.default.fn[ii].noConflict=function(){i.default.fn[ii]=si;return mi._jQueryInterface};var pi="scrollspy";var yi="4.6.2";var Ei="bs.scrollspy";var bi="."+Ei;var Ci=".data-api";var Ti=i.default.fn[pi];var wi="dropdown-item";var Si="active";var Di="activate"+bi;var Ai="scroll"+bi;var Ii="load"+bi+Ci;var Ni="offset";var ki="position";var ji='[data-spy="scroll"]';var Oi=".nav, .list-group";var Pi=".nav-link";var xi=".nav-item";var Li=".list-group-item";var Ri=".dropdown";var Fi=".dropdown-item";var Qi=".dropdown-toggle";var qi={offset:10,method:"auto",target:""};var Bi={offset:"number",method:"string",target:"(string|element)"};var Hi=function(){function ScrollSpy(e,t){var n=this||a;(this||a)._element=e;(this||a)._scrollElement="BODY"===e.tagName?window:e;(this||a)._config=this._getConfig(t);(this||a)._selector=(this||a)._config.target+" "+Pi+","+(this||a)._config.target+" "+Li+","+(this||a)._config.target+" "+Fi;(this||a)._offsets=[];(this||a)._targets=[];(this||a)._activeTarget=null;(this||a)._scrollHeight=0;i.default((this||a)._scrollElement).on(Ai,(function(e){return n._process(e)}));this.refresh();this._process()}var e=ScrollSpy.prototype;e.refresh=function refresh(){var e=this||a;var t=(this||a)._scrollElement===(this||a)._scrollElement.window?Ni:ki;var n="auto"===(this||a)._config.method?t:(this||a)._config.method;var r=n===ki?this._getScrollTop():0;(this||a)._offsets=[];(this||a)._targets=[];(this||a)._scrollHeight=this._getScrollHeight();var o=[].slice.call(document.querySelectorAll((this||a)._selector));o.map((function(e){var t;var a=u.getSelectorFromElement(e);a&&(t=document.querySelector(a));if(t){var o=t.getBoundingClientRect();if(o.width||o.height)return[i.default(t)[n]().top+r,a]}return null})).filter(Boolean).sort((function(e,t){return e[0]-t[0]})).forEach((function(t){e._offsets.push(t[0]);e._targets.push(t[1])}))};e.dispose=function dispose(){i.default.removeData((this||a)._element,Ei);i.default((this||a)._scrollElement).off(bi);(this||a)._element=null;(this||a)._scrollElement=null;(this||a)._config=null;(this||a)._selector=null;(this||a)._offsets=null;(this||a)._targets=null;(this||a)._activeTarget=null;(this||a)._scrollHeight=null};e._getConfig=function _getConfig(e){e=_extends({},qi,"object"===typeof e&&e?e:{});if("string"!==typeof e.target&&u.isElement(e.target)){var t=i.default(e.target).attr("id");if(!t){t=u.getUID(pi);i.default(e.target).attr("id",t)}e.target="#"+t}u.typeCheckConfig(pi,e,Bi);return e};e._getScrollTop=function _getScrollTop(){return(this||a)._scrollElement===window?(this||a)._scrollElement.pageYOffset:(this||a)._scrollElement.scrollTop};e._getScrollHeight=function _getScrollHeight(){return(this||a)._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)};e._getOffsetHeight=function _getOffsetHeight(){return(this||a)._scrollElement===window?window.innerHeight:(this||a)._scrollElement.getBoundingClientRect().height};e._process=function _process(){var e=this._getScrollTop()+(this||a)._config.offset;var t=this._getScrollHeight();var n=(this||a)._config.offset+t-this._getOffsetHeight();(this||a)._scrollHeight!==t&&this.refresh();if(e>=n){var i=(this||a)._targets[(this||a)._targets.length-1];(this||a)._activeTarget!==i&&this._activate(i)}else if((this||a)._activeTarget&&e<(this||a)._offsets[0]&&(this||a)._offsets[0]>0){(this||a)._activeTarget=null;this._clear()}else for(var r=(this||a)._offsets.length;r--;){var o=(this||a)._activeTarget!==(this||a)._targets[r]&&e>=(this||a)._offsets[r]&&("undefined"===typeof(this||a)._offsets[r+1]||e<(this||a)._offsets[r+1]);o&&this._activate((this||a)._targets[r])}};e._activate=function _activate(e){(this||a)._activeTarget=e;this._clear();var t=(this||a)._selector.split(",").map((function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}));var n=i.default([].slice.call(document.querySelectorAll(t.join(","))));if(n.hasClass(wi)){n.closest(Ri).find(Qi).addClass(Si);n.addClass(Si)}else{n.addClass(Si);n.parents(Oi).prev(Pi+", "+Li).addClass(Si);n.parents(Oi).prev(xi).children(Pi).addClass(Si)}i.default((this||a)._scrollElement).trigger(Di,{relatedTarget:e})};e._clear=function _clear(){[].slice.call(document.querySelectorAll((this||a)._selector)).filter((function(e){return e.classList.contains(Si)})).forEach((function(e){return e.classList.remove(Si)}))};ScrollSpy._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a).data(Ei);var n="object"===typeof e&&e;if(!t){t=new ScrollSpy(this||a,n);i.default(this||a).data(Ei,t)}if("string"===typeof e){if("undefined"===typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}}))};_createClass(ScrollSpy,null,[{key:"VERSION",get:function get(){return yi}},{key:"Default",get:function get(){return qi}}]);return ScrollSpy}();i.default(window).on(Ii,(function(){var e=[].slice.call(document.querySelectorAll(ji));var t=e.length;for(var n=t;n--;){var a=i.default(e[n]);Hi._jQueryInterface.call(a,a.data())}}));i.default.fn[pi]=Hi._jQueryInterface;i.default.fn[pi].Constructor=Hi;i.default.fn[pi].noConflict=function(){i.default.fn[pi]=Ti;return Hi._jQueryInterface};var Mi="tab";var Ui="4.6.2";var Wi="bs.tab";var Vi="."+Wi;var zi=".data-api";var Ki=i.default.fn[Mi];var Xi="dropdown-menu";var Yi="active";var $i="disabled";var Ji="fade";var Gi="show";var Zi="hide"+Vi;var ea="hidden"+Vi;var ta="show"+Vi;var na="shown"+Vi;var ia="click"+Vi+zi;var aa=".dropdown";var ra=".nav, .list-group";var oa=".active";var sa="> li > .active";var la='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';var ua=".dropdown-toggle";var fa="> .dropdown-menu .active";var da=function(){function Tab(e){(this||a)._element=e}var e=Tab.prototype;e.show=function show(){var e=this||a;if(!((this||a)._element.parentNode&&(this||a)._element.parentNode.nodeType===Node.ELEMENT_NODE&&i.default((this||a)._element).hasClass(Yi)||i.default((this||a)._element).hasClass($i)||(this||a)._element.hasAttribute("disabled"))){var t;var n;var r=i.default((this||a)._element).closest(ra)[0];var o=u.getSelectorFromElement((this||a)._element);if(r){var s="UL"===r.nodeName||"OL"===r.nodeName?sa:oa;n=i.default.makeArray(i.default(r).find(s));n=n[n.length-1]}var l=i.default.Event(Zi,{relatedTarget:(this||a)._element});var f=i.default.Event(ta,{relatedTarget:n});n&&i.default(n).trigger(l);i.default((this||a)._element).trigger(f);if(!f.isDefaultPrevented()&&!l.isDefaultPrevented()){o&&(t=document.querySelector(o));this._activate((this||a)._element,r);var d=function complete(){var t=i.default.Event(ea,{relatedTarget:e._element});var a=i.default.Event(na,{relatedTarget:n});i.default(n).trigger(t);i.default(e._element).trigger(a)};t?this._activate(t,t.parentNode,d):d()}}};e.dispose=function dispose(){i.default.removeData((this||a)._element,Wi);(this||a)._element=null};e._activate=function _activate(e,t,n){var r=this||a;var o=!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?i.default(t).children(oa):i.default(t).find(sa);var s=o[0];var l=n&&s&&i.default(s).hasClass(Ji);var f=function complete(){return r._transitionComplete(e,s,n)};if(s&&l){var d=u.getTransitionDurationFromElement(s);i.default(s).removeClass(Gi).one(u.TRANSITION_END,f).emulateTransitionEnd(d)}else f()};e._transitionComplete=function _transitionComplete(e,t,n){if(t){i.default(t).removeClass(Yi);var a=i.default(t.parentNode).find(fa)[0];a&&i.default(a).removeClass(Yi);"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",false)}i.default(e).addClass(Yi);"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",true);u.reflow(e);e.classList.contains(Ji)&&e.classList.add(Gi);var r=e.parentNode;r&&"LI"===r.nodeName&&(r=r.parentNode);if(r&&i.default(r).hasClass(Xi)){var o=i.default(e).closest(aa)[0];if(o){var s=[].slice.call(o.querySelectorAll(ua));i.default(s).addClass(Yi)}e.setAttribute("aria-expanded",true)}n&&n()};Tab._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a);var n=t.data(Wi);if(!n){n=new Tab(this||a);t.data(Wi,n)}if("string"===typeof e){if("undefined"===typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))};_createClass(Tab,null,[{key:"VERSION",get:function get(){return Ui}}]);return Tab}();i.default(document).on(ia,la,(function(e){e.preventDefault();da._jQueryInterface.call(i.default(this||a),"show")}));i.default.fn[Mi]=da._jQueryInterface;i.default.fn[Mi].Constructor=da;i.default.fn[Mi].noConflict=function(){i.default.fn[Mi]=Ki;return da._jQueryInterface};var ca="toast";var ha="4.6.2";var ga="bs.toast";var va="."+ga;var _a=i.default.fn[ca];var ma="fade";var pa="hide";var ya="show";var Ea="showing";var ba="click.dismiss"+va;var Ca="hide"+va;var Ta="hidden"+va;var wa="show"+va;var Sa="shown"+va;var Da='[data-dismiss="toast"]';var Aa={animation:true,autohide:true,delay:500};var Ia={animation:"boolean",autohide:"boolean",delay:"number"};var Na=function(){function Toast(e,t){(this||a)._element=e;(this||a)._config=this._getConfig(t);(this||a)._timeout=null;this._setListeners()}var e=Toast.prototype;e.show=function show(){var e=this||a;var t=i.default.Event(wa);i.default((this||a)._element).trigger(t);if(!t.isDefaultPrevented()){this._clearTimeout();(this||a)._config.animation&&(this||a)._element.classList.add(ma);var n=function complete(){e._element.classList.remove(Ea);e._element.classList.add(ya);i.default(e._element).trigger(Sa);e._config.autohide&&(e._timeout=setTimeout((function(){e.hide()}),e._config.delay))};(this||a)._element.classList.remove(pa);u.reflow((this||a)._element);(this||a)._element.classList.add(Ea);if((this||a)._config.animation){var r=u.getTransitionDurationFromElement((this||a)._element);i.default((this||a)._element).one(u.TRANSITION_END,n).emulateTransitionEnd(r)}else n()}};e.hide=function hide(){if((this||a)._element.classList.contains(ya)){var e=i.default.Event(Ca);i.default((this||a)._element).trigger(e);e.isDefaultPrevented()||this._close()}};e.dispose=function dispose(){this._clearTimeout();(this||a)._element.classList.contains(ya)&&(this||a)._element.classList.remove(ya);i.default((this||a)._element).off(ba);i.default.removeData((this||a)._element,ga);(this||a)._element=null;(this||a)._config=null};e._getConfig=function _getConfig(e){e=_extends({},Aa,i.default((this||a)._element).data(),"object"===typeof e&&e?e:{});u.typeCheckConfig(ca,e,(this||a).constructor.DefaultType);return e};e._setListeners=function _setListeners(){var e=this||a;i.default((this||a)._element).on(ba,Da,(function(){return e.hide()}))};e._close=function _close(){var e=this||a;var t=function complete(){e._element.classList.add(pa);i.default(e._element).trigger(Ta)};(this||a)._element.classList.remove(ya);if((this||a)._config.animation){var n=u.getTransitionDurationFromElement((this||a)._element);i.default((this||a)._element).one(u.TRANSITION_END,t).emulateTransitionEnd(n)}else t()};e._clearTimeout=function _clearTimeout(){clearTimeout((this||a)._timeout);(this||a)._timeout=null};Toast._jQueryInterface=function _jQueryInterface(e){return this.each((function(){var t=i.default(this||a);var n=t.data(ga);var r="object"===typeof e&&e;if(!n){n=new Toast(this||a,r);t.data(ga,n)}if("string"===typeof e){if("undefined"===typeof n[e])throw new TypeError('No method named "'+e+'"');n[e](this||a)}}))};_createClass(Toast,null,[{key:"VERSION",get:function get(){return ha}},{key:"DefaultType",get:function get(){return Ia}},{key:"Default",get:function get(){return Aa}}]);return Toast}();i.default.fn[ca]=Na._jQueryInterface;i.default.fn[ca].Constructor=Na;i.default.fn[ca].noConflict=function(){i.default.fn[ca]=_a;return Na._jQueryInterface};e.Alert=T;e.Button=U;e.Carousel=Re;e.Collapse=at;e.Dropdown=zt;e.Modal=In;e.Popover=mi;e.Scrollspy=Hi;e.Tab=da;e.Toast=Na;e.Tooltip=ni;e.Util=u;Object.defineProperty(e,"__esModule",{value:true})}));const o=r.Alert,s=r.Button,l=r.Carousel,u=r.Collapse,f=r.Dropdown,d=r.Modal,c=r.Popover,h=r.Scrollspy,g=r.Tab,v=r.Toast,_=r.Tooltip,m=r.Util,p=r.__esModule;export{o as Alert,s as Button,l as Carousel,u as Collapse,f as Dropdown,d as Modal,c as Popover,h as Scrollspy,g as Tab,v as Toast,_ as Tooltip,m as Util,p as __esModule,r as default};
+
diff --git a/vendor/javascript/jquery.js b/vendor/javascript/jquery.js
new file mode 100644
index 00000000..7c97c500
--- /dev/null
+++ b/vendor/javascript/jquery.js
@@ -0,0 +1,57 @@
+// jquery@3.7.1 downloaded from https://ga.jspm.io/npm:jquery@3.7.1/dist/jquery.js
+
+var e="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:global;var t={};(function(e,n){t=e.document?n(e,true):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}})("undefined"!==typeof window?window:t,(function(t,n){var r=[];var i=Object.getPrototypeOf;var o=r.slice;var a=r.flat?function(e){return r.flat.call(e)}:function(e){return r.concat.apply([],e)};var s=r.push;var u=r.indexOf;var l={};var c=l.toString;var f=l.hasOwnProperty;var d=f.toString;var p=d.call(Object);var h={};var g=function isFunction(e){return"function"===typeof e&&"number"!==typeof e.nodeType&&"function"!==typeof e.item};var m=function isWindow(e){return null!=e&&e===e.window};var v=t.document;var y={type:true,src:true,nonce:true,noModule:true};function DOMEval(e,t,n){n=n||v;var r,i,o=n.createElement("script");o.text=e;if(t)for(r in y){i=t[r]||t.getAttribute&&t.getAttribute(r);i&&o.setAttribute(r,i)}n.head.appendChild(o).parentNode.removeChild(o)}function toType(e){return null==e?e+"":"object"===typeof e||"function"===typeof e?l[c.call(e)]||"object":typeof e}var x="3.7.1",b=/HTML$/i,jQuery=function(e,t){return new jQuery.fn.init(e,t)};jQuery.fn=jQuery.prototype={jquery:x,constructor:jQuery,length:0,toArray:function(){return o.call(this||e)},get:function(t){return null==t?o.call(this||e):t<0?(this||e)[t+(this||e).length]:(this||e)[t]},pushStack:function(t){var n=jQuery.merge(this.constructor(),t);n.prevObject=this||e;return n},each:function(t){return jQuery.each(this||e,t)},map:function(t){return this.pushStack(jQuery.map(this||e,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(o.apply(this||e,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(jQuery.grep(this||e,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(jQuery.grep(this||e,(function(e,t){return t%2})))},eq:function(t){var n=(this||e).length,r=+t+(t<0?n:0);return this.pushStack(r>=0&&r0&&t-1 in e)}function nodeName(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var w=r.pop;var T=r.sort;var C=r.splice;var S="[\\x20\\t\\r\\n\\f]";var k=new RegExp("^"+S+"+|((?:^|[^\\\\])(?:\\\\.)*)"+S+"+$","g");jQuery.contains=function(e,t){var n=t&&t.parentNode;return e===n||!!(n&&1===n.nodeType&&(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var A=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function fcssescape(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}jQuery.escapeSelector=function(e){return(e+"").replace(A,fcssescape)};var E=v,D=s;(function(){var n,i,a,s,l,c,d,p,g,m,v=D,y=jQuery.expando,x=0,b=0,A=createCache(),N=createCache(),j=createCache(),P=createCache(),sortOrder=function(e,t){e===t&&(l=true);return 0},H="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="(?:\\\\[\\da-fA-F]{1,6}"+S+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",L="\\["+S+"*("+M+")(?:"+S+"*([*^$|!~]?=)"+S+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+S+"*\\]",q=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+L+")*)|.*)\\)|)",O=new RegExp(S+"+","g"),F=new RegExp("^"+S+"*,"+S+"*"),R=new RegExp("^"+S+"*([>+~]|"+S+")"+S+"*"),I=new RegExp(S+"|>"),W=new RegExp(q),$=new RegExp("^"+M+"$"),B={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+L),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+S+"*(even|odd|(([+-]|)(\\d*)n|)"+S+"*(?:([+-]|)"+S+"*(\\d+)|))"+S+"*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^"+S+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+S+"*((?:-\\d)?\\d*)"+S+"*\\)|)(?=[^-]|$)","i")},_=/^(?:input|select|textarea|button)$/i,z=/^h\d$/i,X=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,U=/[+~]/,G=new RegExp("\\\\[\\da-fA-F]{1,6}"+S+"?|\\\\([^\\r\\n\\f])","g"),funescape=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},unloadHandler=function(){setDocument()},V=addCombinator((function(e){return true===e.disabled&&nodeName(e,"fieldset")}),{dir:"parentNode",next:"legend"});function safeActiveElement(){try{return c.activeElement}catch(e){}}try{v.apply(r=o.call(E.childNodes),E.childNodes);r[E.childNodes.length].nodeType}catch(e){v={apply:function(e,t){D.apply(e,o.call(t))},call:function(e){D.apply(e,o.call(arguments,1))}}}function find(e,t,n,r){var i,o,a,s,u,l,f,d=t&&t.ownerDocument,m=t?t.nodeType:9;n=n||[];if("string"!==typeof e||!e||1!==m&&9!==m&&11!==m)return n;if(!r){setDocument(t);t=t||c;if(p){if(11!==m&&(u=X.exec(e)))if(i=u[1]){if(9===m){if(!(a=t.getElementById(i)))return n;if(a.id===i){v.call(n,a);return n}}else if(d&&(a=d.getElementById(i))&&find.contains(t,a)&&a.id===i){v.call(n,a);return n}}else{if(u[2]){v.apply(n,t.getElementsByTagName(e));return n}if((i=u[3])&&t.getElementsByClassName){v.apply(n,t.getElementsByClassName(i));return n}}if(!P[e+" "]&&(!g||!g.test(e))){f=e;d=t;if(1===m&&(I.test(e)||R.test(e))){d=U.test(e)&&testContext(t.parentNode)||t;d==t&&h.scope||((s=t.getAttribute("id"))?s=jQuery.escapeSelector(s):t.setAttribute("id",s=y));l=tokenize(e);o=l.length;while(o--)l[o]=(s?"#"+s:":scope")+" "+toSelector(l[o]);f=l.join(",")}try{v.apply(n,d.querySelectorAll(f));return n}catch(t){P(e,true)}finally{s===y&&t.removeAttribute("id")}}}}return select(e.replace(k,"$1"),t,n,r)}
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */function createCache(){var e=[];function cache(t,n){e.push(t+" ")>i.cacheLength&&delete cache[e.shift()];return cache[t+" "]=n}return cache}
+/**
+ * Mark a function for special use by jQuery selector module
+ * @param {Function} fn The function to mark
+ */function markFunction(e){e[y]=true;return e}
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */function assert(e){var t=c.createElement("fieldset");try{return!!e(t)}catch(e){return false}finally{t.parentNode&&t.parentNode.removeChild(t);t=null}}
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */function createInputPseudo(e){return function(t){return nodeName(t,"input")&&t.type===e}}
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */function createButtonPseudo(e){return function(t){return(nodeName(t,"input")||nodeName(t,"button"))&&t.type===e}}
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */function createDisabledPseudo(e){return function(t){return"form"in t?t.parentNode&&false===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&V(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */function createPositionalPseudo(e){return markFunction((function(t){t=+t;return markFunction((function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))}))}))}
+/**
+ * Checks a node for validity as a jQuery selector context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */function testContext(e){return e&&"undefined"!==typeof e.getElementsByTagName&&e}
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [node] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */function setDocument(e){var t,n=e?e.ownerDocument||e:E;if(n==c||9!==n.nodeType||!n.documentElement)return c;c=n;d=c.documentElement;p=!jQuery.isXMLDoc(c);m=d.matches||d.webkitMatchesSelector||d.msMatchesSelector;d.msMatchesSelector&&E!=c&&(t=c.defaultView)&&t.top!==t&&t.addEventListener("unload",unloadHandler);h.getById=assert((function(e){d.appendChild(e).id=jQuery.expando;return!c.getElementsByName||!c.getElementsByName(jQuery.expando).length}));h.disconnectedMatch=assert((function(e){return m.call(e,"*")}));h.scope=assert((function(){return c.querySelectorAll(":scope")}));h.cssHas=assert((function(){try{c.querySelector(":has(*,:jqfake)");return false}catch(e){return true}}));if(h.getById){i.filter.ID=function(e){var t=e.replace(G,funescape);return function(e){return e.getAttribute("id")===t}};i.find.ID=function(e,t){if("undefined"!==typeof t.getElementById&&p){var n=t.getElementById(e);return n?[n]:[]}}}else{i.filter.ID=function(e){var t=e.replace(G,funescape);return function(e){var n="undefined"!==typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}};i.find.ID=function(e,t){if("undefined"!==typeof t.getElementById&&p){var n,r,i,o=t.getElementById(e);if(o){n=o.getAttributeNode("id");if(n&&n.value===e)return[o];i=t.getElementsByName(e);r=0;while(o=i[r++]){n=o.getAttributeNode("id");if(n&&n.value===e)return[o]}}return[]}}}i.find.TAG=function(e,t){return"undefined"!==typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)};i.find.CLASS=function(e,t){if("undefined"!==typeof t.getElementsByClassName&&p)return t.getElementsByClassName(e)};g=[];assert((function(e){var t;d.appendChild(e).innerHTML="";e.querySelectorAll("[selected]").length||g.push("\\["+S+"*(?:value|"+H+")");e.querySelectorAll("[id~="+y+"-]").length||g.push("~=");e.querySelectorAll("a#"+y+"+*").length||g.push(".#.+[+~]");e.querySelectorAll(":checked").length||g.push(":checked");t=c.createElement("input");t.setAttribute("type","hidden");e.appendChild(t).setAttribute("name","D");d.appendChild(e).disabled=true;2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled");t=c.createElement("input");t.setAttribute("name","");e.appendChild(t);e.querySelectorAll("[name='']").length||g.push("\\["+S+"*name"+S+"*="+S+"*(?:''|\"\")")}));h.cssHas||g.push(":has");g=g.length&&new RegExp(g.join("|"));sortOrder=function(e,t){if(e===t){l=true;return 0}var n=!e.compareDocumentPosition-!t.compareDocumentPosition;if(n)return n;n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1;return 1&n||!h.sortDetached&&t.compareDocumentPosition(e)===n?e===c||e.ownerDocument==E&&find.contains(E,e)?-1:t===c||t.ownerDocument==E&&find.contains(E,t)?1:s?u.call(s,e)-u.call(s,t):0:4&n?-1:1};return c}find.matches=function(e,t){return find(e,null,null,t)};find.matchesSelector=function(e,t){setDocument(e);if(p&&!P[t+" "]&&(!g||!g.test(t)))try{var n=m.call(e,t);if(n||h.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){P(t,true)}return find(t,c,null,[e]).length>0};find.contains=function(e,t){(e.ownerDocument||e)!=c&&setDocument(e);return jQuery.contains(e,t)};find.attr=function(e,t){(e.ownerDocument||e)!=c&&setDocument(e);var n=i.attrHandle[t.toLowerCase()],r=n&&f.call(i.attrHandle,t.toLowerCase())?n(e,t,!p):void 0;return void 0!==r?r:e.getAttribute(t)};find.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */jQuery.uniqueSort=function(e){var t,n=[],r=0,i=0;l=!h.sortStable;s=!h.sortStable&&o.call(e,0);T.call(e,sortOrder);if(l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)C.call(e,n[r],1)}s=null;return e};jQuery.fn.uniqueSort=function(){return this.pushStack(jQuery.uniqueSort(o.apply(this||e)))};i=jQuery.expr={cacheLength:50,createPseudo:markFunction,match:B,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(G,funescape);e[3]=(e[3]||e[4]||e[5]||"").replace(G,funescape);"~="===e[2]&&(e[3]=" "+e[3]+" ");return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if("nth"===e[1].slice(0,3)){e[3]||find.error(e[0]);e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3]));e[5]=+(e[7]+e[8]||"odd"===e[3])}else e[3]&&find.error(e[0]);return e},PSEUDO:function(e){var t,n=!e[6]&&e[2];if(B.CHILD.test(e[0]))return null;if(e[3])e[2]=e[4]||e[5]||"";else if(n&&W.test(n)&&(t=tokenize(n,true))&&(t=n.indexOf(")",n.length-t)-n.length)){e[0]=e[0].slice(0,t);e[2]=n.slice(0,t)}return e.slice(0,3)}},filter:{TAG:function(e){var t=e.replace(G,funescape).toLowerCase();return"*"===e?function(){return true}:function(e){return nodeName(e,t)}},CLASS:function(e){var t=A[e+" "];return t||(t=new RegExp("(^|"+S+")"+e+"("+S+"|$)"))&&A(e,(function(e){return t.test("string"===typeof e.className&&e.className||"undefined"!==typeof e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=find.attr(r,e);if(null==i)return"!="===t;if(!t)return true;i+="";return"="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(O," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-")}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h=o!==a?"nextSibling":"previousSibling",g=t.parentNode,m=s&&t.nodeName.toLowerCase(),v=!u&&!s,b=false;if(g){if(o){while(h){f=t;while(f=f[h])if(s?nodeName(f,m):1===f.nodeType)return false;p=h="only"===e&&!p&&"nextSibling"}return true}p=[a?g.firstChild:g.lastChild];if(a&&v){c=g[y]||(g[y]={});l=c[e]||[];d=l[0]===x&&l[1];b=d&&l[2];f=d&&g.childNodes[d];while(f=++d&&f&&f[h]||(b=d=0)||p.pop())if(1===f.nodeType&&++b&&f===t){c[e]=[x,d,b];break}}else{if(v){c=t[y]||(t[y]={});l=c[e]||[];d=l[0]===x&&l[1];b=d}if(false===b)while(f=++d&&f&&f[h]||(b=d=0)||p.pop())if((s?nodeName(f,m):1===f.nodeType)&&++b){if(v){c=f[y]||(f[y]={});c[e]=[x,b]}if(f===t)break}}b-=i;return b===r||b%r===0&&b/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||find.error("unsupported pseudo: "+e);if(r[y])return r(t);if(r.length>1){n=[e,e,"",t];return i.setFilters.hasOwnProperty(e.toLowerCase())?markFunction((function(e,n){var i,o=r(e,t),a=o.length;while(a--){i=u.call(e,o[a]);e[i]=!(n[i]=o[a])}})):function(e){return r(e,0,n)}}return r}},pseudos:{not:markFunction((function(e){var t=[],n=[],r=compile(e.replace(k,"$1"));return r[y]?markFunction((function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,i,o){t[0]=e;r(t,null,o,n);t[0]=null;return!n.pop()}})),has:markFunction((function(e){return function(t){return find(e,t).length>0}})),contains:markFunction((function(e){e=e.replace(G,funescape);return function(t){return(t.textContent||jQuery.text(t)).indexOf(e)>-1}})),lang:markFunction((function(e){$.test(e||"")||find.error("unsupported lang: "+e);e=e.replace(G,funescape).toLowerCase();return function(t){var n;do{if(n=p?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang")){n=n.toLowerCase();return n===e||0===n.indexOf(e+"-")}}while((t=t.parentNode)&&1===t.nodeType);return false}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(e){return e===d},focus:function(e){return e===safeActiveElement()&&c.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:createDisabledPseudo(false),disabled:createDisabledPseudo(true),checked:function(e){return nodeName(e,"input")&&!!e.checked||nodeName(e,"option")&&!!e.selected},selected:function(e){e.parentNode&&e.parentNode.selectedIndex;return true===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return false;return true},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return z.test(e.nodeName)},input:function(e){return _.test(e.nodeName)},button:function(e){return nodeName(e,"input")&&"button"===e.type||nodeName(e,"button")},text:function(e){var t;return nodeName(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:createPositionalPseudo((function(){return[0]})),last:createPositionalPseudo((function(e,t){return[t-1]})),eq:createPositionalPseudo((function(e,t,n){return[n<0?n+t:n]})),even:createPositionalPseudo((function(e,t){var n=0;for(;nt?t:n;for(;--r>=0;)e.push(r);return e})),gt:createPositionalPseudo((function(e,t,n){var r=n<0?n+t:n;for(;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return false;return true}:e[0]}function multipleContexts(e,t,n){var r=0,i=t.length;for(;r-1&&(o[c]=!(a[c]=d))}}else{p=condense(p===a?p.splice(m,p.length):p);i?i(null,a,p,l):v.apply(a,p)}}))}function matcherFromTokens(e){var t,n,r,o=e.length,s=i.relative[e[0].type],l=s||i.relative[" "],c=s?1:0,f=addCombinator((function(e){return e===t}),l,true),d=addCombinator((function(e){return u.call(t,e)>-1}),l,true),p=[function(e,n,r){var i=!s&&(r||n!=a)||((t=n).nodeType?f(e,n,r):d(e,n,r));t=null;return i}];for(;c1&&elementMatcher(p),c>1&&toSelector(e.slice(0,c-1).concat({value:" "===e[c-2].type?"*":""})).replace(k,"$1"),n,c0,r=e.length>0,superMatcher=function(o,s,u,l,f){var d,h,g,m=0,y="0",b=o&&[],T=[],C=a,S=o||r&&i.find.TAG("*",f),k=x+=null==C?1:Math.random()||.1,A=S.length;f&&(a=s==c||s||f);for(;y!==A&&null!=(d=S[y]);y++){if(r&&d){h=0;if(!s&&d.ownerDocument!=c){setDocument(d);u=!p}while(g=e[h++])if(g(d,s||c,u)){v.call(l,d);break}f&&(x=k)}if(n){(d=!g&&d)&&m--;o&&b.push(d)}}m+=y;if(n&&y!==m){h=0;while(g=t[h++])g(b,T,s,u);if(o){if(m>0)while(y--)b[y]||T[y]||(T[y]=w.call(l));T=condense(T)}v.apply(l,T);f&&!o&&T.length>0&&m+t.length>1&&jQuery.uniqueSort(l)}if(f){x=k;a=C}return b};return n?markFunction(superMatcher):superMatcher}function compile(e,t){var n,r=[],i=[],o=j[e+" "];if(!o){t||(t=tokenize(e));n=t.length;while(n--){o=matcherFromTokens(t[n]);o[y]?r.push(o):i.push(o)}o=j(e,matcherFromGroupMatchers(i,r));o.selector=e}return o}
+/**
+ * A low-level selection function that works with jQuery's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with jQuery selector compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */function select(e,t,n,r){var o,a,s,u,l,c="function"===typeof e&&e,f=!r&&tokenize(e=c.selector||e);n=n||[];if(1===f.length){a=f[0]=f[0].slice(0);if(a.length>2&&"ID"===(s=a[0]).type&&9===t.nodeType&&p&&i.relative[a[1].type]){t=(i.find.ID(s.matches[0].replace(G,funescape),t)||[])[0];if(!t)return n;c&&(t=t.parentNode);e=e.slice(a.shift().value.length)}o=B.needsContext.test(e)?0:a.length;while(o--){s=a[o];if(i.relative[u=s.type])break;if((l=i.find[u])&&(r=l(s.matches[0].replace(G,funescape),U.test(a[0].type)&&testContext(t.parentNode)||t))){a.splice(o,1);e=r.length&&toSelector(a);if(!e){v.apply(n,r);return n}break}}}(c||compile(e,f))(r,t,!p,n,!t||U.test(e)&&testContext(t.parentNode)||t);return n}h.sortStable=y.split("").sort(sortOrder).join("")===y;setDocument();h.sortDetached=assert((function(e){return 1&e.compareDocumentPosition(c.createElement("fieldset"))}));jQuery.find=find;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.unique=jQuery.uniqueSort;find.compile=compile;find.select=select;find.setDocument=setDocument;find.tokenize=tokenize;find.escape=jQuery.escapeSelector;find.getText=jQuery.text;find.isXML=jQuery.isXMLDoc;find.selectors=jQuery.expr;find.support=jQuery.support;find.uniqueSort=jQuery.uniqueSort})();var dir=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&jQuery(e).is(n))break;r.push(e)}return r};var siblings=function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n};var N=jQuery.expr.match.needsContext;var j=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function winnow(e,t,n){return g(t)?jQuery.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?jQuery.grep(e,(function(e){return e===t!==n})):"string"!==typeof t?jQuery.grep(e,(function(e){return u.call(t,e)>-1!==n})):jQuery.filter(t,e,n)}jQuery.filter=function(e,t,n){var r=t[0];n&&(e=":not("+e+")");return 1===t.length&&1===r.nodeType?jQuery.find.matchesSelector(r,e)?[r]:[]:jQuery.find.matches(e,jQuery.grep(t,(function(e){return 1===e.nodeType})))};jQuery.fn.extend({find:function(t){var n,r,i=(this||e).length,o=this||e;if("string"!==typeof t)return this.pushStack(jQuery(t).filter((function(){for(n=0;n1?jQuery.uniqueSort(r):r},filter:function(t){return this.pushStack(winnow(this||e,t||[],false))},not:function(t){return this.pushStack(winnow(this||e,t||[],true))},is:function(t){return!!winnow(this||e,"string"===typeof t&&N.test(t)?jQuery(t):t||[],false).length}});var P,H=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,M=jQuery.fn.init=function(t,n,r){var i,o;if(!t)return this||e;r=r||P;if("string"===typeof t){i="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:H.exec(t);if(!i||!i[1]&&n)return!n||n.jquery?(n||r).find(t):this.constructor(n).find(t);if(i[1]){n=n instanceof jQuery?n[0]:n;jQuery.merge(this||e,jQuery.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:v,true));if(j.test(i[1])&&jQuery.isPlainObject(n))for(i in n)g((this||e)[i])?this[i](n[i]):this.attr(i,n[i]);return this||e}o=v.getElementById(i[2]);if(o){(this||e)[0]=o;(this||e).length=1}return this||e}if(t.nodeType){(this||e)[0]=t;(this||e).length=1;return this||e}return g(t)?void 0!==r.ready?r.ready(t):t(jQuery):jQuery.makeArray(t,this||e)};M.prototype=jQuery.fn;P=jQuery(v);var L=/^(?:parents|prev(?:Until|All))/,q={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function(t){var n=jQuery(t,this||e),r=n.length;return this.filter((function(){var t=0;for(;t-1:1===r.nodeType&&jQuery.find.matchesSelector(r,t))){a.push(r);break}return this.pushStack(a.length>1?jQuery.uniqueSort(a):a)},index:function(t){return t?"string"===typeof t?u.call(jQuery(t),(this||e)[0]):u.call(this||e,t.jquery?t[0]:t):(this||e)[0]&&(this||e)[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(e,t))))},addBack:function(t){return this.add(null==t?(this||e).prevObject:(this||e).prevObject.filter(t))}});function sibling(e,t){while((e=e[t])&&1!==e.nodeType);return e}jQuery.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return dir(e,"parentNode")},parentsUntil:function(e,t,n){return dir(e,"parentNode",n)},next:function(e){return sibling(e,"nextSibling")},prev:function(e){return sibling(e,"previousSibling")},nextAll:function(e){return dir(e,"nextSibling")},prevAll:function(e){return dir(e,"previousSibling")},nextUntil:function(e,t,n){return dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return dir(e,"previousSibling",n)},siblings:function(e){return siblings((e.parentNode||{}).firstChild,e)},children:function(e){return siblings(e.firstChild)},contents:function(e){if(null!=e.contentDocument&&i(e.contentDocument))return e.contentDocument;nodeName(e,"template")&&(e=e.content||e);return jQuery.merge([],e.childNodes)}},(function(t,n){jQuery.fn[t]=function(r,i){var o=jQuery.map(this||e,n,r);"Until"!==t.slice(-5)&&(i=r);i&&"string"===typeof i&&(o=jQuery.filter(i,o));if((this||e).length>1){q[t]||jQuery.uniqueSort(o);L.test(t)&&o.reverse()}return this.pushStack(o)}}));var O=/[^\x20\t\r\n\f]+/g;function createOptions(e){var t={};jQuery.each(e.match(O)||[],(function(e,n){t[n]=true}));return t}jQuery.Callbacks=function(t){t="string"===typeof t?createOptions(t):jQuery.extend({},t);var n,r,i,o,a=[],s=[],u=-1,fire=function(){o=o||t.once;i=n=true;for(;s.length;u=-1){r=s.shift();while(++u-1){a.splice(n,1);n<=u&&u--}}));return this||e},has:function(e){return e?jQuery.inArray(e,a)>-1:a.length>0},empty:function(){a&&(a=[]);return this||e},disable:function(){o=s=[];a=r="";return this||e},disabled:function(){return!a},lock:function(){o=s=[];r||n||(a=r="");return this||e},locked:function(){return!!o},fireWith:function(t,r){if(!o){r=r||[];r=[t,r.slice?r.slice():r];s.push(r);n||fire()}return this||e},fire:function(){l.fireWith(this||e,arguments);return this||e},fired:function(){return!!i}};return l};function Identity(e){return e}function Thrower(e){throw e}function adoptValue(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}jQuery.extend({Deferred:function(n){var r=[["notify","progress",jQuery.Callbacks("memory"),jQuery.Callbacks("memory"),2],["resolve","done",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),0,"resolved"],["reject","fail",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),1,"rejected"]],i="pending",o={state:function(){return i},always:function(){a.done(arguments).fail(arguments);return this||e},catch:function(e){return o.then(null,e)},pipe:function(){var t=arguments;return jQuery.Deferred((function(n){jQuery.each(r,(function(r,i){var o=g(t[i[4]])&&t[i[4]];a[i[1]]((function(){var t=o&&o.apply(this||e,arguments);t&&g(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this||e,o?[t]:arguments)}))}));t=null})).promise()},then:function(n,i,o){var a=0;function resolve(n,r,i,o){return function(){var s=this||e,u=arguments,mightThrow=function(){var e,t;if(!(n=a){if(i!==Thrower){s=void 0;u=[e]}r.rejectWith(s,u)}}};if(n)l();else{jQuery.Deferred.getErrorHook?l.error=jQuery.Deferred.getErrorHook():jQuery.Deferred.getStackHook&&(l.error=jQuery.Deferred.getStackHook());t.setTimeout(l)}}}return jQuery.Deferred((function(e){r[0][3].add(resolve(0,e,g(o)?o:Identity,e.notifyWith));r[1][3].add(resolve(0,e,g(n)?n:Identity));r[2][3].add(resolve(0,e,g(i)?i:Thrower))})).promise()},promise:function(e){return null!=e?jQuery.extend(e,o):o}},a={};jQuery.each(r,(function(t,n){var s=n[2],u=n[5];o[n[1]]=s.add;u&&s.add((function(){i=u}),r[3-t][2].disable,r[3-t][3].disable,r[0][2].lock,r[0][3].lock);s.add(n[3].fire);a[n[0]]=function(){a[n[0]+"With"]((this||e)===a?void 0:this||e,arguments);return this||e};a[n[0]+"With"]=s.fireWith}));o.promise(a);n&&n.call(a,a);return a},when:function(t){var n=arguments.length,r=n,i=Array(r),a=o.call(arguments),s=jQuery.Deferred(),updateFunc=function(t){return function(r){i[t]=this||e;a[t]=arguments.length>1?o.call(arguments):r;--n||s.resolveWith(i,a)}};if(n<=1){adoptValue(t,s.done(updateFunc(r)).resolve,s.reject,!n);if("pending"===s.state()||g(a[r]&&a[r].then))return s.then()}while(r--)adoptValue(a[r],updateFunc(r),s.reject);return s.promise()}});var F=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook=function(e,n){t.console&&t.console.warn&&e&&F.test(e.name)&&t.console.warn("jQuery.Deferred exception: "+e.message,e.stack,n)};jQuery.readyException=function(e){t.setTimeout((function(){throw e}))};var R=jQuery.Deferred();jQuery.fn.ready=function(t){R.then(t).catch((function(e){jQuery.readyException(e)}));return this||e};jQuery.extend({isReady:false,readyWait:1,ready:function(e){if(!(true===e?--jQuery.readyWait:jQuery.isReady)){jQuery.isReady=true;true!==e&&--jQuery.readyWait>0||R.resolveWith(v,[jQuery])}}});jQuery.ready.then=R.then;function completed(){v.removeEventListener("DOMContentLoaded",completed);t.removeEventListener("load",completed);jQuery.ready()}if("complete"===v.readyState||"loading"!==v.readyState&&!v.documentElement.doScroll)t.setTimeout(jQuery.ready);else{v.addEventListener("DOMContentLoaded",completed);t.addEventListener("load",completed)}var access=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===toType(n)){i=true;for(s in n)access(e,t,s,n[s],true,o,a)}else if(void 0!==r){i=true;g(r)||(a=true);if(l)if(a){t.call(e,r);t=null}else{l=t;t=function(e,t,n){return l.call(jQuery(e),n)}}if(t)for(;s1,null,true)},removeData:function(t){return this.each((function(){B.remove(this||e,t)}))}});jQuery.extend({queue:function(e,t,n){var r;if(e){t=(t||"fx")+"queue";r=$.get(e,t);n&&(!r||Array.isArray(n)?r=$.access(e,t,jQuery.makeArray(n)):r.push(n));return r||[]}},dequeue:function(e,t){t=t||"fx";var n=jQuery.queue(e,t),r=n.length,i=n.shift(),o=jQuery._queueHooks(e,t),next=function(){jQuery.dequeue(e,t)};if("inprogress"===i){i=n.shift();r--}if(i){"fx"===t&&n.unshift("inprogress");delete o.stop;i.call(e,next,o)}!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return $.get(e,n)||$.access(e,n,{empty:jQuery.Callbacks("once memory").add((function(){$.remove(e,[t+"queue",n])}))})}});jQuery.fn.extend({queue:function(t,n){var r=2;if("string"!==typeof t){n=t;t="fx";r--}return arguments.length\x20\t\r\n\f]*)/i;var Z=/^$|^module$|\/(?:java|ecma)script/i;(function(){var e=v.createDocumentFragment(),t=e.appendChild(v.createElement("div")),n=v.createElement("input");n.setAttribute("type","radio");n.setAttribute("checked","checked");n.setAttribute("name","t");t.appendChild(n);h.checkClone=t.cloneNode(true).cloneNode(true).lastChild.checked;t.innerHTML="";h.noCloneChecked=!!t.cloneNode(true).lastChild.defaultValue;t.innerHTML="";h.option=!!t.lastChild})();var ee={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ee.tbody=ee.tfoot=ee.colgroup=ee.caption=ee.thead;ee.th=ee.td;h.option||(ee.optgroup=ee.option=[1,""]);function getAll(e,t){var n;n="undefined"!==typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!==typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&nodeName(e,t)?jQuery.merge([e],n):n}function setGlobalEval(e,t){var n=0,r=e.length;for(;n-1)i&&i.push(o);else{l=isAttached(o);a=getAll(f.appendChild(o),"script");l&&setGlobalEval(a);if(n){c=0;while(o=a[c++])Z.test(o.type||"")&&n.push(o)}}return f}var ne=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true}function returnFalse(){return false}function on(t,n,r,i,o,a){var s,u;if("object"===typeof n){if("string"!==typeof r){i=i||r;r=void 0}for(u in n)on(t,u,r,i,n[u],a);return t}if(null==i&&null==o){o=r;i=r=void 0}else if(null==o)if("string"===typeof r){o=i;i=void 0}else{o=i;i=r;r=void 0}if(false===o)o=returnFalse;else if(!o)return t;if(1===a){s=o;o=function(t){jQuery().off(t);return s.apply(this||e,arguments)};o.guid=s.guid||(s.guid=jQuery.guid++)}return t.each((function(){jQuery.event.add(this||e,n,o,i,r)}))}jQuery.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=$.get(e);if(acceptData(e)){if(n.handler){o=n;n=o.handler;i=o.selector}i&&jQuery.find.matchesSelector(V,i);n.guid||(n.guid=jQuery.guid++);(u=m.events)||(u=m.events=Object.create(null));(a=m.handle)||(a=m.handle=function(t){return"undefined"!==typeof jQuery&&jQuery.event.triggered!==t.type?jQuery.event.dispatch.apply(e,arguments):void 0});t=(t||"").match(O)||[""];l=t.length;while(l--){s=ne.exec(t[l])||[];p=g=s[1];h=(s[2]||"").split(".").sort();if(p){f=jQuery.event.special[p]||{};p=(i?f.delegateType:f.bindType)||p;f=jQuery.event.special[p]||{};c=jQuery.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&jQuery.expr.match.needsContext.test(i),namespace:h.join(".")},o);if(!(d=u[p])){d=u[p]=[];d.delegateCount=0;f.setup&&false!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(p,a)}if(f.add){f.add.call(e,c);c.handler.guid||(c.handler.guid=n.guid)}i?d.splice(d.delegateCount++,0,c):d.push(c);jQuery.event.global[p]=true}}}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=$.hasData(e)&&$.get(e);if(m&&(u=m.events)){t=(t||"").match(O)||[""];l=t.length;while(l--){s=ne.exec(t[l])||[];p=g=s[1];h=(s[2]||"").split(".").sort();if(p){f=jQuery.event.special[p]||{};p=(r?f.delegateType:f.bindType)||p;d=u[p]||[];s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)");a=o=d.length;while(o--){c=d[o];if((i||g===c.origType)&&(!n||n.guid===c.guid)&&(!s||s.test(c.namespace))&&(!r||r===c.selector||"**"===r&&c.selector)){d.splice(o,1);c.selector&&d.delegateCount--;f.remove&&f.remove.call(e,c)}}if(a&&!d.length){f.teardown&&false!==f.teardown.call(e,h,m.handle)||jQuery.removeEvent(e,p,m.handle);delete u[p]}}else for(p in u)jQuery.event.remove(e,p+t[l],n,r,true)}jQuery.isEmptyObject(u)&&$.remove(e,"handle events")}},dispatch:function(t){var n,r,i,o,a,s,u=new Array(arguments.length),l=jQuery.event.fix(t),c=($.get(this||e,"events")||Object.create(null))[l.type]||[],f=jQuery.event.special[l.type]||{};u[0]=l;for(n=1;n=1))for(;c!==(this||e);c=c.parentNode||this||e)if(1===c.nodeType&&!("click"===t.type&&true===c.disabled)){a=[];s={};for(r=0;r-1:jQuery.find(o,this||e,null,[c]).length);s[o]&&a.push(i)}a.length&&u.push({elem:c,handlers:a})}c=this||e;l\s*$/g;function manipulationTarget(e,t){return nodeName(e,"table")&&nodeName(11!==t.nodeType?t:t.firstChild,"tr")&&jQuery(e).children("tbody")[0]||e}function disableScript(e){e.type=(null!==e.getAttribute("type"))+"/"+e.type;return e}function restoreScript(e){"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type");return e}function cloneCopyEvent(e,t){var n,r,i,o,a,s,u;if(1===t.nodeType){if($.hasData(e)){o=$.get(e);u=o.events;if(u){$.remove(t,"handle events");for(i in u)for(n=0,r=u[i].length;n1&&"string"===typeof v&&!h.checkClone&&ie.test(v))return t.each((function(o){var a=t.eq(o);y&&(n[0]=v.call(this||e,o,a.html()));domManip(a,n,r,i)}));if(p){o=buildFragment(n,t[0].ownerDocument,false,t,i);s=o.firstChild;1===o.childNodes.length&&(o=s);if(s||i){u=jQuery.map(getAll(o,"script"),disableScript);l=u.length;for(;d0&&setGlobalEval(a,!u&&getAll(e,"script"));return s},cleanData:function(e){var t,n,r,i=jQuery.event.special,o=0;for(;void 0!==(n=e[o]);o++)if(acceptData(n)){if(t=n[$.expando]){if(t.events)for(r in t.events)i[r]?jQuery.event.remove(n,r):jQuery.removeEvent(n,r,t.handle);n[$.expando]=void 0}n[B.expando]&&(n[B.expando]=void 0)}}});jQuery.fn.extend({detach:function(t){return remove(this||e,t,true)},remove:function(t){return remove(this||e,t)},text:function(t){return access(this||e,(function(t){return void 0===t?jQuery.text(this||e):this.empty().each((function(){1!==(this||e).nodeType&&11!==(this||e).nodeType&&9!==(this||e).nodeType||((this||e).textContent=t)}))}),null,t,arguments.length)},append:function(){return domManip(this||e,arguments,(function(t){if(1===(this||e).nodeType||11===(this||e).nodeType||9===(this||e).nodeType){var n=manipulationTarget(this||e,t);n.appendChild(t)}}))},prepend:function(){return domManip(this||e,arguments,(function(t){if(1===(this||e).nodeType||11===(this||e).nodeType||9===(this||e).nodeType){var n=manipulationTarget(this||e,t);n.insertBefore(t,n.firstChild)}}))},before:function(){return domManip(this||e,arguments,(function(t){(this||e).parentNode&&(this||e).parentNode.insertBefore(t,this||e)}))},after:function(){return domManip(this||e,arguments,(function(t){(this||e).parentNode&&(this||e).parentNode.insertBefore(t,(this||e).nextSibling)}))},empty:function(){var t,n=0;for(;null!=(t=(this||e)[n]);n++)if(1===t.nodeType){jQuery.cleanData(getAll(t,false));t.textContent=""}return this||e},clone:function(t,n){t=null!=t&&t;n=null==n?t:n;return this.map((function(){return jQuery.clone(this||e,t,n)}))},html:function(t){return access(this||e,(function(t){var n=(this||e)[0]||{},r=0,i=(this||e).length;if(void 0===t&&1===n.nodeType)return n.innerHTML;if("string"===typeof t&&!re.test(t)&&!ee[(K.exec(t)||["",""])[1].toLowerCase()]){t=jQuery.htmlPrefilter(t);try{for(;r=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0);return u+l}function getWidthOrHeight(e,t,n){var r=getStyles(e),i=!h.boxSizingReliable()||n,o=i&&"border-box"===jQuery.css(e,"boxSizing",false,r),a=o,s=curCSS(e,t,r),u="offset"+t[0].toUpperCase()+t.slice(1);if(ae.test(s)){if(!n)return s;s="auto"}if((!h.boxSizingReliable()&&o||!h.reliableTrDimensions()&&nodeName(e,"tr")||"auto"===s||!parseFloat(s)&&"inline"===jQuery.css(e,"display",false,r))&&e.getClientRects().length){o="border-box"===jQuery.css(e,"boxSizing",false,r);a=u in e;a&&(s=e[u])}s=parseFloat(s)||0;return s+boxModelAdjustment(e,t,n||(o?"border":"content"),a,r,s)+"px"}jQuery.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=curCSS(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:true,aspectRatio:true,borderImageSlice:true,columnCount:true,flexGrow:true,flexShrink:true,fontWeight:true,gridArea:true,gridColumn:true,gridColumnEnd:true,gridColumnStart:true,gridRow:true,gridRowEnd:true,gridRowStart:true,lineHeight:true,opacity:true,order:true,orphans:true,scale:true,widows:true,zIndex:true,zoom:true,fillOpacity:true,floodOpacity:true,stopOpacity:true,strokeMiterlimit:true,strokeOpacity:true},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=camelCase(t),u=se.test(t),l=e.style;u||(t=finalPropName(s));a=jQuery.cssHooks[t]||jQuery.cssHooks[s];if(void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,false,r))?i:l[t];o=typeof n;if("string"===o&&(i=U.exec(n))&&i[1]){n=adjustCSS(e,t,i);o="number"}if(null!=n&&n===n){"number"!==o||u||(n+=i&&i[3]||(jQuery.cssNumber[s]?"":"px"));h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit");a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n)}}},css:function(e,t,n,r){var i,o,a,s=camelCase(t),u=se.test(t);u||(t=finalPropName(s));a=jQuery.cssHooks[t]||jQuery.cssHooks[s];a&&"get"in a&&(i=a.get(e,true,n));void 0===i&&(i=curCSS(e,t,r));"normal"===i&&t in he&&(i=he[t]);if(""===n||n){o=parseFloat(i);return true===n||isFinite(o)?o||0:i}return i}});jQuery.each(["height","width"],(function(e,t){jQuery.cssHooks[t]={get:function(e,n,r){if(n)return!de.test(jQuery.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?getWidthOrHeight(e,t,r):swap(e,pe,(function(){return getWidthOrHeight(e,t,r)}))},set:function(e,n,r){var i,o=getStyles(e),a=!h.scrollboxSize()&&"absolute"===o.position,s=a||r,u=s&&"border-box"===jQuery.css(e,"boxSizing",false,o),l=r?boxModelAdjustment(e,t,r,u,o):0;u&&a&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-boxModelAdjustment(e,t,"border",false,o)-.5));if(l&&(i=U.exec(n))&&"px"!==(i[3]||"px")){e.style[t]=n;n=jQuery.css(e,t)}return setPositiveNumber(e,n,l)}}}));jQuery.cssHooks.marginLeft=addGetHookIf(h.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(curCSS(e,"marginLeft"))||e.getBoundingClientRect().left-swap(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"}));jQuery.each({margin:"",padding:"",border:"Width"},(function(e,t){jQuery.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"===typeof n?n.split(" "):[n];for(;r<4;r++)i[e+G[r]+t]=o[r]||o[r-2]||o[0];return i}};"margin"!==e&&(jQuery.cssHooks[e+t].set=setPositiveNumber)}));jQuery.fn.extend({css:function(t,n){return access(this||e,(function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){r=getStyles(e);i=t.length;for(;a1)}});function Tween(e,t,n,r,i){return new Tween.prototype.init(e,t,n,r,i)}jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(t,n,r,i,o,a){(this||e).elem=t;(this||e).prop=r;(this||e).easing=o||jQuery.easing._default;(this||e).options=n;(this||e).start=(this||e).now=this.cur();(this||e).end=i;(this||e).unit=a||(jQuery.cssNumber[r]?"":"px")},cur:function(){var t=Tween.propHooks[(this||e).prop];return t&&t.get?t.get(this||e):Tween.propHooks._default.get(this||e)},run:function(t){var n,r=Tween.propHooks[(this||e).prop];(this||e).options.duration?(this||e).pos=n=jQuery.easing[(this||e).easing](t,(this||e).options.duration*t,0,1,(this||e).options.duration):(this||e).pos=n=t;(this||e).now=((this||e).end-(this||e).start)*n+(this||e).start;(this||e).options.step&&(this||e).options.step.call((this||e).elem,(this||e).now,this||e);r&&r.set?r.set(this||e):Tween.propHooks._default.set(this||e);return this||e}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(e){var t;if(1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop])return e.elem[e.prop];t=jQuery.css(e.elem,e.prop,"");return t&&"auto"!==t?t:0},set:function(e){jQuery.fx.step[e.prop]?jQuery.fx.step[e.prop](e):1!==e.elem.nodeType||!jQuery.cssHooks[e.prop]&&null==e.elem.style[finalPropName(e.prop)]?e.elem[e.prop]=e.now:jQuery.style(e.elem,e.prop,e.now+e.unit)}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}};jQuery.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var ge,me,ve=/^(?:toggle|show|hide)$/,ye=/queueHooks$/;function schedule(){if(me){false===v.hidden&&t.requestAnimationFrame?t.requestAnimationFrame(schedule):t.setTimeout(schedule,jQuery.fx.interval);jQuery.fx.tick()}}function createFxNow(){t.setTimeout((function(){ge=void 0}));return ge=Date.now()}function genFx(e,t){var n,r=0,i={height:e};t=t?1:0;for(;r<4;r+=2-t){n=G[r];i["margin"+n]=i["padding"+n]=e}t&&(i.opacity=i.width=e);return i}function createTween(e,t,n){var r,i=(Animation.tweeners[t]||[]).concat(Animation.tweeners["*"]),o=0,a=i.length;for(;o1)},removeAttr:function(t){return this.each((function(){jQuery.removeAttr(this||e,t)}))}});jQuery.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o){if("undefined"===typeof e.getAttribute)return jQuery.prop(e,t,n);1===o&&jQuery.isXMLDoc(e)||(i=jQuery.attrHooks[t.toLowerCase()]||(jQuery.expr.match.bool.test(t)?xe:void 0));if(void 0!==n){if(null===n){jQuery.removeAttr(e,t);return}if(i&&"set"in i&&void 0!==(r=i.set(e,n,t)))return r;e.setAttribute(t,n+"");return n}if(i&&"get"in i&&null!==(r=i.get(e,t)))return r;r=jQuery.find.attr(e,t);return null==r?void 0:r}},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&nodeName(e,"input")){var n=e.value;e.setAttribute("type",t);n&&(e.value=n);return t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(O);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}});xe={set:function(e,t,n){false===t?jQuery.removeAttr(e,n):e.setAttribute(n,n);return n}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=be[t]||jQuery.find.attr;be[t]=function(e,t,r){var i,o,a=t.toLowerCase();if(!r){o=be[a];be[a]=i;i=null!=n(e,t,r)?a:null;be[a]=o}return i}}));var we=/^(?:input|select|textarea|button)$/i,Te=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(t,n){return access(this||e,jQuery.prop,t,n,arguments.length>1)},removeProp:function(t){return this.each((function(){delete(this||e)[jQuery.propFix[t]||t]}))}});jQuery.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o){if(1!==o||!jQuery.isXMLDoc(e)){t=jQuery.propFix[t]||t;i=jQuery.propHooks[t]}return void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]}},propHooks:{tabIndex:{get:function(e){var t=jQuery.find.attr(e,"tabindex");return t?parseInt(t,10):we.test(e.nodeName)||Te.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}});h.optSelected||(jQuery.propHooks.selected={get:function(e){var t=e.parentNode;t&&t.parentNode&&t.parentNode.selectedIndex;return null},set:function(e){var t=e.parentNode;if(t){t.selectedIndex;t.parentNode&&t.parentNode.selectedIndex}}});jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){jQuery.propFix[this.toLowerCase()]=this||e}));function stripAndCollapse(e){var t=e.match(O)||[];return t.join(" ")}function getClass(e){return e.getAttribute&&e.getAttribute("class")||""}function classesToArray(e){return Array.isArray(e)?e:"string"===typeof e&&e.match(O)||[]}jQuery.fn.extend({addClass:function(t){var n,r,i,o,a,s;if(g(t))return this.each((function(n){jQuery(this||e).addClass(t.call(this||e,n,getClass(this||e)))}));n=classesToArray(t);return n.length?this.each((function(){i=getClass(this||e);r=1===(this||e).nodeType&&" "+stripAndCollapse(i)+" ";if(r){for(a=0;a-1)r=r.replace(" "+o+" "," ")}s=stripAndCollapse(r);i!==s&&this.setAttribute("class",s)}})):this||e},toggleClass:function(t,n){var r,i,o,a,s=typeof t,u="string"===s||Array.isArray(t);if(g(t))return this.each((function(r){jQuery(this||e).toggleClass(t.call(this||e,r,getClass(this||e),n),n)}));if("boolean"===typeof n&&u)return n?this.addClass(t):this.removeClass(t);r=classesToArray(t);return this.each((function(){if(u){a=jQuery(this||e);for(o=0;o-1)return true;return false}});var Ce=/\r/g;jQuery.fn.extend({val:function(t){var n,r,i,o=(this||e)[0];if(arguments.length){i=g(t);return this.each((function(r){var o;if(1===(this||e).nodeType){o=i?t.call(this||e,r,jQuery(this||e).val()):t;null==o?o="":"number"===typeof o?o+="":Array.isArray(o)&&(o=jQuery.map(o,(function(e){return null==e?"":e+""})));n=jQuery.valHooks[(this||e).type]||jQuery.valHooks[(this||e).nodeName.toLowerCase()];n&&"set"in n&&void 0!==n.set(this||e,o,"value")||((this||e).value=o)}}))}if(o){n=jQuery.valHooks[o.type]||jQuery.valHooks[o.nodeName.toLowerCase()];if(n&&"get"in n&&void 0!==(r=n.get(o,"value")))return r;r=o.value;return"string"===typeof r?r.replace(Ce,""):null==r?"":r}}});jQuery.extend({valHooks:{option:{get:function(e){var t=jQuery.find.attr(e,"value");return null!=t?t:stripAndCollapse(jQuery.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;r=o<0?u:a?o:0;for(;r-1)&&(n=true)}n||(e.selectedIndex=-1);return o}}}});jQuery.each(["radio","checkbox"],(function(){jQuery.valHooks[this||e]={set:function(e,t){if(Array.isArray(t))return e.checked=jQuery.inArray(jQuery(e).val(),t)>-1}};h.checkOn||(jQuery.valHooks[this||e].get=function(e){return null===e.getAttribute("value")?"on":e.value})}));var Se=t.location;var ke={guid:Date.now()};var Ae=/\?/;jQuery.parseXML=function(e){var n,r;if(!e||"string"!==typeof e)return null;try{n=(new t.DOMParser).parseFromString(e,"text/xml")}catch(e){}r=n&&n.getElementsByTagName("parsererror")[0];n&&!r||jQuery.error("Invalid XML: "+(r?jQuery.map(r.childNodes,(function(e){return e.textContent})).join("\n"):e));return n};var Ee=/^(?:focusinfocus|focusoutblur)$/,stopPropagationCallback=function(e){e.stopPropagation()};jQuery.extend(jQuery.event,{trigger:function(e,n,r,i){var o,a,s,u,l,c,d,p,h=[r||v],y=f.call(e,"type")?e.type:e,x=f.call(e,"namespace")?e.namespace.split("."):[];a=p=s=r=r||v;if(3!==r.nodeType&&8!==r.nodeType&&!Ee.test(y+jQuery.event.triggered)){if(y.indexOf(".")>-1){x=y.split(".");y=x.shift();x.sort()}l=y.indexOf(":")<0&&"on"+y;e=e[jQuery.expando]?e:new jQuery.Event(y,"object"===typeof e&&e);e.isTrigger=i?2:3;e.namespace=x.join(".");e.rnamespace=e.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;e.result=void 0;e.target||(e.target=r);n=null==n?[e]:jQuery.makeArray(n,[e]);d=jQuery.event.special[y]||{};if(i||!d.trigger||false!==d.trigger.apply(r,n)){if(!i&&!d.noBubble&&!m(r)){u=d.delegateType||y;Ee.test(u+y)||(a=a.parentNode);for(;a;a=a.parentNode){h.push(a);s=a}s===(r.ownerDocument||v)&&h.push(s.defaultView||s.parentWindow||t)}o=0;while((a=h[o++])&&!e.isPropagationStopped()){p=a;e.type=o>1?u:d.bindType||y;c=($.get(a,"events")||Object.create(null))[e.type]&&$.get(a,"handle");c&&c.apply(a,n);c=l&&a[l];if(c&&c.apply&&acceptData(a)){e.result=c.apply(a,n);false===e.result&&e.preventDefault()}}e.type=y;if(!i&&!e.isDefaultPrevented()&&(!d._default||false===d._default.apply(h.pop(),n))&&acceptData(r)&&l&&g(r[y])&&!m(r)){s=r[l];s&&(r[l]=null);jQuery.event.triggered=y;e.isPropagationStopped()&&p.addEventListener(y,stopPropagationCallback);r[y]();e.isPropagationStopped()&&p.removeEventListener(y,stopPropagationCallback);jQuery.event.triggered=void 0;s&&(r[l]=s)}return e.result}}},simulate:function(e,t,n){var r=jQuery.extend(new jQuery.Event,n,{type:e,isSimulated:true});jQuery.event.trigger(r,null,t)}});jQuery.fn.extend({trigger:function(t,n){return this.each((function(){jQuery.event.trigger(t,n,this||e)}))},triggerHandler:function(t,n){var r=(this||e)[0];if(r)return jQuery.event.trigger(t,n,r,true)}});var De=/\[\]$/,Ne=/\r?\n/g,je=/^(?:submit|button|image|reset|file)$/i,Pe=/^(?:input|select|textarea|keygen)/i;function buildParams(e,t,n,r){var i;if(Array.isArray(t))jQuery.each(t,(function(t,i){n||De.test(e)?r(e,i):buildParams(e+"["+("object"===typeof i&&null!=i?t:"")+"]",i,n,r)}));else if(n||"object"!==toType(t))r(e,t);else for(i in t)buildParams(e+"["+i+"]",t[i],n,r)}jQuery.param=function(t,n){var r,i=[],add=function(e,t){var n=g(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!jQuery.isPlainObject(t))jQuery.each(t,(function(){add((this||e).name,(this||e).value)}));else for(r in t)buildParams(r,t[r],n,add);return i.join("&")};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=jQuery.prop(this||e,"elements");return t?jQuery.makeArray(t):this||e})).filter((function(){var t=(this||e).type;return(this||e).name&&!jQuery(this||e).is(":disabled")&&Pe.test((this||e).nodeName)&&!je.test(t)&&((this||e).checked||!J.test(t))})).map((function(t,n){var r=jQuery(this||e).val();return null==r?null:Array.isArray(r)?jQuery.map(r,(function(e){return{name:n.name,value:e.replace(Ne,"\r\n")}})):{name:n.name,value:r.replace(Ne,"\r\n")}})).get()}});var He=/%20/g,Me=/#.*$/,Le=/([?&])_=[^&]*/,qe=/^(.*?):[ \t]*([^\r\n]*)$/gm,Oe=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fe=/^(?:GET|HEAD)$/,Re=/^\/\//,Ie={},We={},$e="*/".concat("*"),Be=v.createElement("a");Be.href=Se.href;function addToPrefiltersOrTransports(e){return function(t,n){if("string"!==typeof t){n=t;t="*"}var r,i=0,o=t.toLowerCase().match(O)||[];if(g(n))while(r=o[i++])if("+"===r[0]){r=r.slice(1)||"*";(e[r]=e[r]||[]).unshift(n)}else(e[r]=e[r]||[]).push(n)}}function inspectPrefiltersOrTransports(e,t,n,r){var i={},o=e===We;function inspect(a){var s;i[a]=true;jQuery.each(e[a]||[],(function(e,a){var u=a(t,n,r);if("string"===typeof u&&!o&&!i[u]){t.dataTypes.unshift(u);inspect(u);return false}if(o)return!(s=u)}));return s}return inspect(t.dataTypes[0])||!i["*"]&&inspect("*")}function ajaxExtend(e,t){var n,r,i=jQuery.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);r&&jQuery.extend(true,e,r);return e}function ajaxHandleResponses(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0]){u.shift();void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"))}if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o){o!==u[0]&&u.unshift(o);return n[o]}}function ajaxConvert(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o){e.responseFields[o]&&(n[e.responseFields[o]]=t);!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType));u=o;o=c.shift();if(o)if("*"===o)o=u;else if("*"!==u&&u!==o){a=l[u+" "+o]||l["* "+o];if(!a)for(i in l){s=i.split(" ");if(s[1]===o){a=l[u+" "+s[0]]||l["* "+s[0]];if(a){if(true===a)a=l[i];else if(true!==l[i]){o=s[0];c.unshift(s[1])}break}}}if(true!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}}return{state:"success",data:t}}jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Se.href,type:"GET",isLocal:Oe.test(Se.protocol),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$e,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":JSON.parse,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(e,t){return t?ajaxExtend(ajaxExtend(e,jQuery.ajaxSettings),t):ajaxExtend(jQuery.ajaxSettings,e)},ajaxPrefilter:addToPrefiltersOrTransports(Ie),ajaxTransport:addToPrefiltersOrTransports(We),ajax:function(n,r){if("object"===typeof n){r=n;n=void 0}r=r||{};var i,o,a,s,u,l,c,f,d,p,h=jQuery.ajaxSetup({},r),g=h.context||h,m=h.context&&(g.nodeType||g.jquery)?jQuery(g):jQuery.event,y=jQuery.Deferred(),x=jQuery.Callbacks("once memory"),b=h.statusCode||{},w={},T={},C="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=qe.exec(a))s[t[1].toLowerCase()+" "]=(s[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=s[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(t,n){if(null==c){t=T[t.toLowerCase()]=T[t.toLowerCase()]||t;w[t]=n}return this||e},overrideMimeType:function(t){null==c&&(h.mimeType=t);return this||e},statusCode:function(t){var n;if(t)if(c)S.always(t[S.status]);else for(n in t)b[n]=[b[n],t[n]];return this||e},abort:function(t){var n=t||C;i&&i.abort(n);done(0,n);return this||e}};y.promise(S);h.url=((n||h.url||Se.href)+"").replace(Re,Se.protocol+"//");h.type=r.method||r.type||h.method||h.type;h.dataTypes=(h.dataType||"*").toLowerCase().match(O)||[""];if(null==h.crossDomain){l=v.createElement("a");try{l.href=h.url;l.href=l.href;h.crossDomain=Be.protocol+"//"+Be.host!==l.protocol+"//"+l.host}catch(e){h.crossDomain=true}}h.data&&h.processData&&"string"!==typeof h.data&&(h.data=jQuery.param(h.data,h.traditional));inspectPrefiltersOrTransports(Ie,h,r,S);if(c)return S;f=jQuery.event&&h.global;f&&0===jQuery.active++&&jQuery.event.trigger("ajaxStart");h.type=h.type.toUpperCase();h.hasContent=!Fe.test(h.type);o=h.url.replace(Me,"");if(h.hasContent)h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(He,"+"));else{p=h.url.slice(o.length);if(h.data&&(h.processData||"string"===typeof h.data)){o+=(Ae.test(o)?"&":"?")+h.data;delete h.data}if(false===h.cache){o=o.replace(Le,"$1");p=(Ae.test(o)?"&":"?")+"_="+ke.guid+++p}h.url=o+p}if(h.ifModified){jQuery.lastModified[o]&&S.setRequestHeader("If-Modified-Since",jQuery.lastModified[o]);jQuery.etag[o]&&S.setRequestHeader("If-None-Match",jQuery.etag[o])}(h.data&&h.hasContent&&false!==h.contentType||r.contentType)&&S.setRequestHeader("Content-Type",h.contentType);S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$e+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(false===h.beforeSend.call(g,S,h)||c))return S.abort();C="abort";x.add(h.complete);S.done(h.success);S.fail(h.error);i=inspectPrefiltersOrTransports(We,h,r,S);if(i){S.readyState=1;f&&m.trigger("ajaxSend",[S,h]);if(c)return S;h.async&&h.timeout>0&&(u=t.setTimeout((function(){S.abort("timeout")}),h.timeout));try{c=false;i.send(w,done)}catch(e){if(c)throw e;done(-1,e)}}else done(-1,"No Transport");function done(e,n,r,s){var l,d,p,v,w,T=n;if(!c){c=true;u&&t.clearTimeout(u);i=void 0;a=s||"";S.readyState=e>0?4:0;l=e>=200&&e<300||304===e;r&&(v=ajaxHandleResponses(h,S,r));!l&&jQuery.inArray("script",h.dataTypes)>-1&&jQuery.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){});v=ajaxConvert(h,v,S,l);if(l){if(h.ifModified){w=S.getResponseHeader("Last-Modified");w&&(jQuery.lastModified[o]=w);w=S.getResponseHeader("etag");w&&(jQuery.etag[o]=w)}if(204===e||"HEAD"===h.type)T="nocontent";else if(304===e)T="notmodified";else{T=v.state;d=v.data;p=v.error;l=!p}}else{p=T;if(e||!T){T="error";e<0&&(e=0)}}S.status=e;S.statusText=(n||T)+"";l?y.resolveWith(g,[d,T,S]):y.rejectWith(g,[S,T,p]);S.statusCode(b);b=void 0;f&&m.trigger(l?"ajaxSuccess":"ajaxError",[S,h,l?d:p]);x.fireWith(g,[S,T]);if(f){m.trigger("ajaxComplete",[S,h]);--jQuery.active||jQuery.event.trigger("ajaxStop")}}}return S},getJSON:function(e,t,n){return jQuery.get(e,t,n,"json")},getScript:function(e,t){return jQuery.get(e,void 0,t,"script")}});jQuery.each(["get","post"],(function(e,t){jQuery[t]=function(e,n,r,i){if(g(n)){i=i||r;r=n;n=void 0}return jQuery.ajax(jQuery.extend({url:e,type:t,dataType:i,data:n,success:r},jQuery.isPlainObject(e)&&e))}}));jQuery.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}));jQuery._evalUrl=function(e,t,n){return jQuery.ajax({url:e,type:"GET",dataType:"script",cache:true,async:false,global:false,converters:{"text script":function(){}},dataFilter:function(e){jQuery.globalEval(e,t,n)}})};jQuery.fn.extend({wrapAll:function(t){var n;if((this||e)[0]){g(t)&&(t=t.call((this||e)[0]));n=jQuery(t,(this||e)[0].ownerDocument).eq(0).clone(true);(this||e)[0].parentNode&&n.insertBefore((this||e)[0]);n.map((function(){var t=this||e;while(t.firstElementChild)t=t.firstElementChild;return t})).append(this||e)}return this||e},wrapInner:function(t){return g(t)?this.each((function(n){jQuery(this||e).wrapInner(t.call(this||e,n))})):this.each((function(){var n=jQuery(this||e),r=n.contents();r.length?r.wrapAll(t):n.append(t)}))},wrap:function(t){var n=g(t);return this.each((function(r){jQuery(this||e).wrapAll(n?t.call(this||e,r):t)}))},unwrap:function(t){this.parent(t).not("body").each((function(){jQuery(this||e).replaceWith((this||e).childNodes)}));return this||e}});jQuery.expr.pseudos.hidden=function(e){return!jQuery.expr.pseudos.visible(e)};jQuery.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)};jQuery.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(e){}};var _e={0:200,1223:204},ze=jQuery.ajaxSettings.xhr();h.cors=!!ze&&"withCredentials"in ze;h.ajax=ze=!!ze;jQuery.ajaxTransport((function(e){var n,r;if(h.cors||ze&&!e.crossDomain)return{send:function(i,o){var a,s=e.xhr();s.open(e.type,e.url,e.async,e.username,e.password);if(e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType);e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){if(n){n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null;"abort"===e?s.abort():"error"===e?"number"!==typeof s.status?o(0,"error"):o(s.status,s.statusText):o(_e[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!==typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders())}}};s.onload=n();r=s.onerror=s.ontimeout=n("error");void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&t.setTimeout((function(){n&&r()}))};n=n("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}));jQuery.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=false)}));jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){jQuery.globalEval(e);return e}}});jQuery.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=false);e.crossDomain&&(e.type="GET")}));jQuery.ajaxTransport("script",(function(e){if(e.crossDomain||e.scriptAttrs){var t,n;return{send:function(r,i){t=jQuery("